Uncompressing Linux... done, booting the kernel (問題集錦)

今天用主線Linux內核移植到MINI6410,主線內核2.6.37.1基本已經支持了MINI6410的板子,所以移植到能夠啓動起來的階段很簡單,但是在移植的時候還是出現了一個比較常見的問題:

  1. MINI6410 # bootm 0x50008000
  2. ## Booting kernel from Legacy Image at 50008000 ...
  3. Image Name: Linux-2.6.37.1
  4. Image Type: ARM Linux Kernel Image (uncompressed)
  5. Data Size: 3800644 Bytes = 3.6 MiB
  6. Load Address: 50008000
  7. Entry Point: 50008040
  8. Verifying Checksum ... OK
  9. XIP Kernel Image ... OK
  10. OK
  11. Starting kernel ...
  12. Uncompressing Linux... done, booting the kernel.
  13. 停住不動了~~~~
這種問題比較常見,由於輸出的信息有限,不是很好找原因,如果去代碼中追蹤的話也比較麻煩。在查找原因解決這個問題的時候,我找到了一些可能出現的原因,在這裏總結一下:

1、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 查看下面這個結構體
修改mach-types    mini6410   1626 

2、串口驅動沒有編譯入內核

在弄MINI6410的時候我就犯了這個錯誤,因爲還沒有MINI6410的默認配置文件,所有這個要自己選上的。位置在Device Drivers->Character devices->Serial drivers中

  1. <*> Samsung SoC serial support 
  2. [*] Support for console on Samsung SoC serial port  
  3. <*> Samsung S3C6400/S3C6410/S5P6440/S5P6450/S5PC100 Serial port support

3、內核啓動參數設置錯誤   

內核的啓動參數的錯誤也可以造成同樣的錯誤。

比如有一個配置是:

 

  1. noinitrd root=/dev/mtdblock4 rootfstype=jffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M

關鍵是在 console=ttySAC0,115200上,如果 ttySAC0弄錯了,或者波特率不對就會出問題。

不同的CPU的 console有可能不一樣,比如有的可能是 ttyS0。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章