1.擷取核心移植源碼
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.2.tar.bz2
2.解壓核心源碼
(1).bzip2 -d linux-2.6.32.2.tar.bz2
(2).tar -xvf linux-2.6.32.2.tar
3.修改總目錄下的Makefile
原:
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
改為
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
其中,ARCH 是指定目標平台為 arm, CROSS_COMPILE 是指定交叉編譯器,這裡指定的是系統預設的交叉編譯器,如要使用其它的,則要把編譯器的全路徑在這裡寫出。
4.測試一下linux編譯是否能通過
#make s3c2410_defconfig ;使用預設核心設定檔,s3c2410_defconfig 是 SMDK2440 的預設設定檔
#make ;編譯時間較長
5.複製建立自己的平台
5.1 linux-2.6.32.2/arch/arm/mach-s3c2440 目 錄 下 有 個mach-mini2440.c 檔案,它其實就是國外愛好者為 mini2440 移植添加的主要內容了,但我們不需要,直接刪除。
5.2 將 linux-2.6.32.2/arch/arm/mach-s3c2440/目錄下的 mach-smdk2440.c 複製一份。命名為mach-mini2440.c , 找 到 MACHINE_START(S3C2440, "SMDK2440") , 修 改 為
MACHINE_START(MINI2440, "FriendlyARM Mini2440 development board")
5.3修改時鐘源頻率
mach-mini2440.c( 就 是 我 們 剛 剛 通 過 複 制mach-smdk2440.c 得到的)的第 160 行 static void __init smdk2440_map_io(void)函數中,把其中的 16934400(代表SMDK2440 目標板上的晶振是 16.9344MHz)改為 mini2440 開發板上實際使用的 12000000(代表 mini2440 開發板上的晶振 12MHz,元器件標號為 X2)
因為我們要製作自己的 mini2440 平台體系,因此把 mach-mini2440.c 中所有的smdk2440 字樣改為 mini2440,可以使用批處理命令修改,在 vim 的命令模式下輸入:
%s/smdk2440/mini2440/g
上面這句的意思是:把所有和“smdk2440”匹配的字串全部替換為“mini2440”,前面的“%s“代表字串匹配,最後的“g”代表 global,是全域的意思。
除此之外,還有一個地方需要改動,在 mini2440_machine_init(void)函數中,把smdk_machine_init()函數調用注釋掉,因為我們後面會編寫自己的初始化函數,不需要調用smdk2440 原來的。
6.在 Linux 原始碼根目錄下執行
#make mini2440_defconfig ;使用 Linux 官方內建的 mini2440 配置
#make zImage ;編譯核心,時間較長,最後會產生 zImage
重新編譯並把產生的核心檔案 zImage(位於 arch/arm/boot 目錄)下到板子中,可以看到核心已經可以正常啟動了。