国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

Hi,歡迎來到嵌入式培訓高端品牌 - 華清遠見教育科技集團<北京總部官網(wǎng)>,專注嵌入式工程師培養(yǎng)15年!
當前位置: > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > U-boot引導Linux-2.6.39.3內(nèi)核問題
U-boot引導Linux-2.6.39.3內(nèi)核問題
時間:2017-01-05作者:華清遠見

u-boot引導Linux內(nèi)核有兩種方式,go命令或者bootm命令。go命令引導zImage格式的內(nèi)核映像,默認方式下不向內(nèi)核傳遞參數(shù),需要我們修改,相應的修改也有兩種選擇。一種是用使用struct param_struct傳遞內(nèi)核參數(shù),另一種是以標記列表(tagged list)的形式來傳遞啟動參數(shù)。第一種方式設置簡單,Linux2.6繼續(xù)支持該格式,未來是否繼續(xù)支持有待考察。實踐中,用struct param_struct方式引導Linux-2.6.35沒問題,但在引導Linux-2.6.39.3時失敗。提示以下信息:

Root-NFS: No NFS server available, giving up. 
        VFS: Unable to mount root fs via NFS, trying floppy.

懷疑是內(nèi)核參數(shù)傳遞不正確。因此,嘗試用bootm命令引導Linux-2.6.39.3。

bootm命令只能引導uImage格式的內(nèi)核映像,用make uImage命令生成uImage格式的內(nèi)核映像,用bootm命令引導Linux-2.6.39.3,但也不成功。經(jīng)查,bootm命令默認方式也不向內(nèi)核傳遞參數(shù),需要在配置頭文件(例如,include/configs/smdk2410.h)中定義以下兩個宏:

#define CONFIG_SETUP_MEMORY_TAGS 1
        #define CONFIG_CMDLINE_TAG 1

重新編譯生成u-boot.bin,燒寫到開發(fā)板中并重啟開發(fā)板,引導Linux-2.6.39.3仍不成功。

zImage格式的內(nèi)核映像和uImage格式的內(nèi)核映像文件頭部分不同,后者多64個字節(jié)。注意到make uImage時的提示信息:

Load Address: 0x30108000
        Entry Point: 0x30108000

這兩個地址一個是解壓后的加載地址,一個是內(nèi)核映像的執(zhí)行入口地址,二者應該不同,有64(0x40)字節(jié)的偏移。

打開arch/arm/boot目錄中的Makefile,找到$(obj)/uImage: STARTADDR=$(LOADADDR) 這一句,顯然,直接把加載地址賦給了執(zhí)行地址。修改如下:

$(obj)/uImage: STARTADDR=$(shell echo $(LOADADDR) | sed –e “s/..$$/40/”)

其中,sed –e “s/..$$/40/”的意思是把字符串的后兩個字節(jié)用40替換。

重新make uImage,提示信息為:

Load Address: 0x30108000
        Entry Point: 0x30108040

在開發(fā)板上重新引導內(nèi)核:

# tftp 33000000 uImage
        # bootm 33000000

系統(tǒng)引導成功。

發(fā)表評論
評論列表(網(wǎng)友評論僅供網(wǎng)友表達個人看法,并不表明本站同意其觀點或證實其描述)