在做jffs2根檔案系統燒錄之後,執行時串列埠列印錯誤資訊。
在做這個根檔案系統的過程中,要弄懂三點,
第一,jffs2檔案系統需要有引數進行填充。
第二,在燒錄檔案系統的過程中nand erase, nand write為什麼要在16m的位置開始燒錄。
第三,bootargs傳參是怎麼知道核心啟動根檔案系統的。
首先遇到的問題是,分割槽大小設定與燒錄位址不匹配。
bootargs 傳遞的jffs2根檔案系統是存放在root=/dev/mtdblock(?) 分割槽上,我在所要燒錄的分割槽設定過小,檔案系統溢位,所以列印錯誤資訊,無法啟動。
在重新設定分割槽之後,解決部分問題。
設定bootargs傳參的指令為 set bootargs 'root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc console=ttys0,115200'(rootfstype指明所要啟動的檔案系統型別)
重新進行分割槽,設定了bootargs傳遞引數後,把分割槽和燒錄檔案匹配的問題解決了。
遇到第二個問題是,jffs2系統填充的問題。
只有jffs2檔案系統,它有乙個特殊性,要進行填充。jffs2僅僅算檔案系統的話只有4m左右,但是要想預留空間必須要對其進行填充,我給檔案系統留的分割槽有40m,因此填充到40m,否則會不停的列印重複的資訊。填充指令如下
mkfs.jffs2 -n -s 2048 -e 128kib -d rootfs -o rootfs.jffs2 --pad=0x1400000
各引數的意義:
(1)-r :指定根檔案系統目錄
.(2)-o : 指定輸出的根檔案系統名
.(3)-s : 指定
flash
每一頁的大小
;(3)-e : 指定
flash
的檫除塊的大小,預設是
64kb.
要注意,不同的flash, 其
page size
和block size
會不一樣
.,如果是
k9f2g08u0m,
在它的datasheet
上有說明
最後的-pad=0x1400000就是填充到的大小(與我所做的情況不符,我的填充大小是40m,因此為0x2800000),如果不填充也無法啟動jffs2檔案系統
第三個問題是,為什麼要在16m的位置開始燒錄。
解決了分割槽重置問題,bootargs傳參燒錄指定分割槽問題,jffs2檔案系統填充問題,最終boot(執行bootcmd程式**)啟動了檔案系統。
製作jffs2根檔案系統
安裝製作工具mkfs.jffs2 sudo apt get install mtd utils 假設根檔案系統檔案在rootfs目錄下,則使用下面命令製作檔案系統imag mkfs.jffs2 r rootfs o rootfs.jffs2 p l n e 0x10000 0x10000 64kb ...
jffs2根檔案系統製作 二
1 我用的編譯器是cross 3.4.1的,所以在busybox的makefile檔案中的編譯器路徑改為 usr local arm 3.4.1 bin arm linux 2 在對busybox配置時為 cross compiler prefix指定值為 usr local arm 3.4.1 b...
製作jffs2檔案系統
今天憋了老半天了,終於把jaffs檔案系統做成功了。之前系統啟動時,一直報錯如下 empty flash at 0x00003ffc ends at 0x00004000 一直報個沒完。後來查了一下,才知道,製作jffs2檔案的時候,指定的檔案大小的引數小了,而jffs檔案大小比他大。系統啟動的時候...