Linux核心及檔案系統移植之jffs2燒錄後無法啟動__Linux

來源:互聯網
上載者:User

近一周的時候都在玩linux 核心及檔案系統移植,使用的版本如下:

Bootloader: u-boot-2010.06.tgz

Kernel:   linux-3.0.y.tgz

BusyBox:  busybox-1.16.1.tgz

搜集相應介紹文檔後分別編譯出U-boot.bin,uImage和rootfs.jffs2鏡像檔案(稍後抽空整理相應製作過程),當燒寫進16M SPI Flash中,上電重啟後卻進不了系統。

串口輸出以下資訊:

困擾了近兩天時間。。。。

期間作過很多嘗試和測試,確定了我的u-boot可以成功引導別人的可用的核心及檔案系統;而燒錄我自己的u-boot及uImage之後,核心引導及初始化完畢,掛載檔案系統後將要載入必要的核心模組的時候,出現Kernel panic,如下圖:


發現問題出在我的根檔案系統這裡。開始以為是我在鏡像燒錄的時候沒有規劃好分區導致燒錄的檔案系統資料不完整,又對照著文檔步驟重新製作了根檔案系統,調整分區結構,再次仔仔細細地燒錄進去,依舊出現以上錯誤。

後來在查看製作根檔案系統的時候,看到mkfs.jffs2這個產生JFFS2格式檔案系統的工具,搜尋它的用法,發現它有一個“-e”參數(設定擦除塊的大小為(預設: 64KiB)),突然想到上面串口輸出的資訊中有這麼一句:

Further such events for this erase block will not be printed

Node at 0x0024ff48 with length 0x000001bc would run over the end ofthe erase block

Perhaps the file system was created with the wrong erase size?

然後在指令碼中找到組建檔案系統的命令:

mkfs.jffs2-l -e 0x20000 -d $rootfs_dir -o $target_fs

發現該命令在製作檔案系統時塊擦除大小設定為128K。於是,當我回過頭檢查串口輸出的系統引導啟動資訊的時候,終於發現了問題所在:


此處顯示該SPI Flash的Block大小為64K。原來是我在製作根檔案系統時把塊擦除大小設定成了128K,與晶片實際的參數不相符導致檔案系統不能正常運行。

果斷修改mkfs.jffs2後-e參數後面的值為64K:

mkfs.jffs2-l -e 0x10000 -d $rootfs_dir -o $target_fs

重新燒錄了檔案系統後,問題得到解決。。。

另外,在設定U-boot啟動參數的時候,也要注意rootfs分區大小和後面燒錄rootfs.jffs2映像的時候erase擦除的大小要對應,否則會出現:系統雖然可以啟動,但同時會列印以下資訊:



記錄一下,聊以慰藉。

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.