這段時間因為工作上的需要,一直在弄Linux下的JFFS2根檔案系統,前期老是出現Empty flash at 0x0012cdff - 0x0012ffff以及jffs2_scan_eraseblock(): Magic.....這樣一大堆的警告,雖然不影響linux系統的運行,但是多少對於linux系統來說,還不是很安全的啦,畢竟老是在擦除不該擦除的地址,因為這些地方對應的是linux的核心代碼處,總感覺不是很完美的解決問題,因此在網路上也GOOGLE了一下,有很多人都遇到這樣的問題,也看到很多人寫了關於這樣問題的解決辦法,可是按照網路上的方法,始終無法解決這類現象,後來,沒有辦法,只有自己仔細看了一下MTD的詳細介紹和分析了相關代碼,最後修改兩處地方,才將問題解決。
主要還是講講JFFS2檔案系統的製作以及一些細節吧:mkfs.jffs2
在開發板中採用cat proc/mtd 查看erasesize大小為0x10000,而我製作JFFS檔案時,也是選中0x10000的啊,因此可以知道不是這裡的問題,最後,看了一下產生的JFFS2的檔案大小為1.200M,心裡想好奇怪的檔案大小哦。最後自己算了一下:1.2x1024x1024=1258291.2=0x133333,最後重建JFFS2檔案時,設定了一下:--pad=0x133333,再來查看JFFS2的檔案大小問1.218M。不一樣的哦。這就說明,很可能是將記憶體髒資料填充到檔案系統剩餘頁部分。而出現了jffs2_scan_eraseblock():
Magic和Empty Flash at...問題,之後燒錄到系統中,啟動很快,再也看不見這兩個錯誤了。問題完美解決了。
mkfs.jffs2 -n -s 512 -e 64KiB--pad=0x133333 -d
rootfs -o myjffs2.img
參數注釋:
-s 頁大小,採用預設的設定也可。
-e 擦除塊大小,需和手冊相匹配,此處為128(由手冊可知),1 Block = (2K + 64)B + 64 Pages=(128K + 4K)bytes
此處如果設定過大(如 256),將出現jffs2_scan_eraseblock():Magic bitmask......問題
如果設定過小(如 64),將出現Empth flash at .......問題
--pad 設定組建檔案大小,其實此處也不算是設定,因為此選項是填充的意思,當組建檔案比參數規定大小大時,此選項不起作用只有當組建檔案小於規定大小才會進行填充,如果產生的檔案大小不規範,很可能將記憶體髒資料填充到檔案系統剩餘頁部分。