今天用主線Linux內核移植到MINI6410,主線內核2.6.37.1基本已經支持了MINI6410的板子,因此移植到可以啓動起來的階段很簡單,可是在移植的時候仍是出現了一個比較常見的問題:css
一、machine type 不匹配
在 內核自解壓完成之後內核會首先會進入 bl __lookup_machine_type函數(在arch/arm/kernel/head.S中),檢查machine_type是否匹配,若是不 匹配會跳入__error_a函數(在arch/arm/kernel/head-common.S中),致使啓動失敗。
例如arch/arm/mach-s3c64xx/mach-mini6410.c 查看下面這個結構體:
- MACHINE_START( MINI6410 , "MINI6410" )
- /* Maintainer: Darius Augulis <augulis.darius@gmail.com> */
- . boot_params = S3C64XX_PA_SDRAM + 0x100,
- . init_irq = s3c6410_init_irq,
- . map_io = mini6410_map_io,
- . init_machine = mini6410_machine_init,
- . timer = & s3c24xx_timer,
- MACHINE_END
這個宏的定義在arch/arm/include/asm/mach/arch.h
- /*
- * Set of macros to define architecture features. This is built into
- * a table by the linker.
- */
- # define MACHINE_START( _type , _name) /
- static const struct machine_desc __mach_desc_# # _type /
- __used /
- __attribute__( ( __section__( ".arch.info.init" ) ) ) = { /
- .nr = MACH_TYPE_##_type, /
- . name = _name,
- # define MACHINE_END /
- } ;
這個宏定義擴展以後的machine type 就成了 MACHINE_TYPE_MIN6410。MACHINE_TYPE_MIN6410這個宏定義在include/generated/mach-types.h
machine type在u-boot的配置 在board/samsung/mini6410/mini6410.c
這個宏的定義在:include/configs/mini6410.h
只要這兩個數對上就能夠了。
二、串口驅動沒有編譯入內核
在弄MINI6410的時候我就犯了這個錯誤,由於尚未MINI6410的默認配置文件,全部這個要本身選上的。位置在Device Drivers->Character devices->Serial drivers中linux
三、內核啓動參數設置錯誤 web
內核的啓動參數的錯誤也能夠形成一樣的錯誤。函數
好比有一個配置是:ui
關鍵是在 console=ttySAC0,115200上,若是 ttySAC0弄錯了,或者波特率不對就會出問題。.net
不一樣的CPU的 console有可能不同,好比有的多是 ttyS0。code
ref: http://blog.csdn.net/challen537/article/details/6544878orm