u-boot-2014.10移植第31天----核心啟動(一)

fulinux發表於2015-01-20

硬體平臺:tq2440

開發環境:Ubuntu-3.11

u-boot版本:2014.10

本文允許轉載,請註明出處:http://blog.csdn.net/fulinus


原本以為u-boot移植好了,引導linux核心啟動不是問題吧。但是卻折磨了我兩天,一直在“Starting kernel...”這裡卡住了。綜合網上的說法出現這個問題有如下原因:

1)u-boot和linux核心主頻不匹配;

2)u-boot和linux核心機器碼不匹配;

3)bootarges引數數不對;

3)核心中沒有新增串列埠相關的驅動;

實際情況是這些在我這裡都是正確的。因為我用u-boot-2010.09引導linux核心啟動是沒有問題的,換成u-boot-2014.10就不行。。。。。。

什麼資訊也沒有列印,除了:

Starting kernel...

這條資訊是u-boot列印的,安裝正常的啟動,下面是會有核心列印的:

Uncompressing Linux... done, booting the kernel.

但是沒有。我換了了很多種方式,反覆組合測試,反覆燒錄,反覆測試。。。。我簡直就要瘋了,什麼情況?!

我就這麼反覆折騰,也不知道什麼時候,我就用了go命令,出現了Uncompressing Linux... done, booting the kernel.資訊,但是還是沒有成功!j-link燒錄又一次居然可以了正常引導啟動了。

於是我再用:

tftp 30008000 zImage;go 30008000

不行,我突然想到go命令是直接設定pc地址的,不像bootm會傳入引數給linux核心,於是我就講核心中啟動引數設定成:

console=ttyS0,115200 mem=64M init=/linuxrc rw loglevel=7

再執行,OK可以了。用go命令是可以的。

前面偶然又一次機會用go命令成功,是因為我再使用它之前用了:

tftp 30008000 linuxrom-s3c2440.bin;bootm 30008000

雖然沒有成功引導,但是bootm已經解壓了核心映象,而且引數也傳入了核心(在一個特殊的地址處),如果不掉電覆位,用J-link燒錄並執行u-boot,再使用go 30008000,就在前面bootm解壓後的基礎上成功執行了linux核心。因此,問題的癥結在bootm命令有問題,我比較了u-boot-2010.04,u-boot-2014.10,和u-boot-2015.01版本的cmd_bootm.c檔案,發現都有很大的改動,估計是這裡有個沒有被開發人員發現的bug吧,後面有機會我會在找出這個bug。



相關文章