轉自:http://topic.csdn.net/u/20100415/14/1569e49e-921f-4b67-92be-409bd4885679.html
1、u-boot中的命令列參數中console設定有問題,對2.6的核心應該使用ttySAC0,而不是ttyS0。更改為"console=ttySAC0"就可以解決問題。
2、u-boot中FCLK與kernel時鐘頻率不一致。kernel的FCLK為200MHz,但是uboot的預設值是202.8MHz。(vivi預設的也是200MHz,所以vivi不會出現這個問題。)這樣修改uboot的時鐘頻率設定就可以解決問題。
但是這兩個方案並不適合我這種情況。經過分析和讀bootm的原始碼,現在提出兩點額外考慮的地方:
1、如果你在設定檔中不定義tag list的成員,那麼預設情況下bootm是不會傳遞命令列參數的。也就是說,如果你uboot環境變數中設定了正確的bootargs,但是設定檔中沒有設定,這時就會出現問題。為了使用上的方便,你至少應該在標頭檔中定義:
/* tag list choosing */
#define CONFIG_CMDLINE_TAG
//#define CONFIG_SETUP_MEMORY_TAGS
這樣就可以保證你在命令列狀態下修改環境變數bootargs後,可以傳遞進核心。同時也就避免了重新編譯uboot。
2、我在使用中發現,如果在bootargs中沒有指定mem的大小,那麼CONFIG_SETUP_MEMORY_TAGS也是需要設定的。我就是因為bootargs沒有設定mem,所以導致出現上述的情況。現在我的bootargs為:
bootargs=noinitrd root=/dev/mtdblock3 console=ttySAC0,115200 mem=64M
在這種情況下,使用go和bootm都可以正常引導核心。
綜上可知,在tag list的設定上,一定要考慮CONFIG_CMDLINE_TAG和記憶體兩個部分,否則的話,可能出現上述無法引導核心的問題。