我先把造成Uncompressing Linux..... done, booting the kernel.的常見的幾種可能再羅列一下
1、機(jī)器碼不匹配
解決方法:在配置內(nèi)核時(shí)開啟debug
Kernel hacking -> Kernel low-level debugging functions 是打開的
Kernel hacking -> Kernel low-level debugging messages via S3C UART 也是打開的
在Device Drivers->Character devices->Serial drivers中選擇加載Samsung SoC serial support ,然后再選上Support for console on Samsung SoC serial port 。
如果是機(jī)器碼不匹配的問題,就會(huì)出現(xiàn)相關(guān)打印信息例如
Machine configuration botched (nr 182), unable to continue.
核對(duì)一下你的uboot機(jī)器碼是否匹配。
如果不匹配,你可以修改uboot include/asm-arm/mach-types.h 文件中有關(guān)機(jī)器碼的定義?;蛘咝薷膬?nèi)核 arch/arm/tools/mach-types 文件。
在新內(nèi)核移植時(shí)有關(guān)機(jī)器碼的修改步驟及分析如下:
修改機(jī)器碼,機(jī)器碼在2/arch/arm/mach-s3c2440/mach-test2440.c文件中MACHINE_START(TEST2440, "TEST2440")這一行定義的,第二個(gè)參數(shù)無所謂,重要的是第一個(gè)參數(shù),在gcc編譯這個(gè)mach-test2440.c的時(shí)候,會(huì)把TEST2440匹配到/include/asm-arm/mach-types.h中的"#define MACH_TYPE_TEST2440 N"這里, 如果在mach-types.h中找不到MACH_TYPE_TEST2440的定義, gcc編譯mach-test2440.c則報(bào)錯(cuò);
還有,/include/asm-arm/mach-types.h是每次make zImage過程中, 由arch/arm/tools/mach-types文件生成的,
總結(jié),修改機(jī)器碼,涉及內(nèi)核代碼的三個(gè)地方,MACHINE_START宏,mach-types.h,mach-types,初啟動(dòng)時(shí),bootloader向內(nèi)核傳遞一個(gè)機(jī)器碼。
2、串口配置不正確
確保在配置內(nèi)核時(shí)選上了在Device Drivers->Character devices->Serial drivers中選擇加載Samsung SoC serial support ,然后再選上Support for console on Samsung SoC serial port 。
3、arch/arm/mach-s3c2440/Kconfig配置文件設(shè)置出錯(cuò),某項(xiàng)關(guān)鍵選項(xiàng)沒選上。
這個(gè)情況在網(wǎng)上不多見,但是一出錯(cuò)就會(huì)讓人很糾結(jié)。如果芯片級(jí)或板級(jí)關(guān)鍵配置沒選上或?qū)е聝?nèi)核啟動(dòng)進(jìn)入start_kernel函數(shù)之前就進(jìn)入死循環(huán)。如果芯片級(jí)的配置沒選上,會(huì)在內(nèi)核執(zhí)行完cpu id號(hào)匹配函數(shù)__lookup_processor_type()后進(jìn)入死循環(huán),這種情況你無論怎么配置內(nèi)核的debug,串口都不會(huì)再有打印信息輸出了。只有點(diǎn)個(gè)燈之類的才能跟蹤代碼的執(zhí)行。
這種情況往往在打印Uncompressing Linux..... done, booting the kernel后就無任何輸出了,即便你配置了debug。
我碰到這種情況是因?yàn)槲以赼rch/arm/mach-s3c2440/Kconfig 上沒有select ARCH_S3C2440。
導(dǎo)致Uncompressing Linux..... done, booting the kernel 卡住的大致就這幾種情況。
|