以s5pv210為例簡要說明。
1、選平台
A、修改頂層Makefile
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
就是在指定arch\arm目錄需要交叉編譯編譯,其他體系平台下的目錄則不會。
B、拷貝arch\arm\configs\s5pv210_defconfig到頂層目錄下
打開終端,進到內核頂層目錄,並執行:
# make s5pv210_defconfig
核心板是抄襲三星公司的demo板,所以我們可以參考三星DEMO板來移植,這一步就是選擇三星公司基於s5pv210的基礎配置。
C、編譯驗證
# make
驗證環境及選配平台,一般沒有問題的話就編譯出來內核,把arch\arm\boot\zImage用tftp上傳驗證下,看能不能起來。
D、常見錯誤
Uncompressing Linux... done, booting the kernel.
停下來不動了。
大多數的原因是內核啟動參數不對
A、U-bOOT環境變量設置的啟動參數錯誤(console=ttySAC0,115200:這個是在指定輸出終端,如果錯誤,內核跑起來了,沒有正確的輸出終端,所以看不到信息)
B、目前有內核對啟動參數有兩種格式解析
Bootloader把傳遞給內核的參數寫死在內存偏移0x100(內核板文件寫死的)的位置,內核初始化的時候會從這裡去讀啟動參數。如果bootloader寫如參數格式和內核解析格式不一樣,也會造成啟動參數解析失敗。最好驗證的方式是先在內核寫死啟動參數(通過make menuconfig,注意相應的內核啟動參數使用方式的選配),也可以試試make mennuconfig選擇下老格式支持。
2、板文件修改定制arch\arm\mach-s5pv210\mach-smdkv210.c
開源的設備代碼往往是寫成platform設備,那板文件實際上最主要的工作就是添加設備。platform_device(IO內存、中斷號及參數)就是設備的抽象。
static struct platform_device *smdkv210_devices[] __initdata = {
&s5pv210_device_iis0,
&s5pv210_device_ac97,
&s3c_device_adc,
&s3c_device_ts,
&s3c_device_wdt,
};
注:三星公司把某些設備的定義放到了arch\arm\plat-samsung\目錄及arch\arm\plat-s5p\目錄下。
3、選配內核模塊
# make menuconfig
A、選驅動(platform_device對應的驅動platform_driver)
B、邏輯層代碼
譬如選擇了網卡驅動,就必須要協議模塊;NANDFLASH就必須要分區支持及文件系統模塊。