關於flash分區打印信息jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985

uboot中的bootargs設置如下:

bootargs=noinitrd console=ttyS0,115200n8 maxcpus=1mem=240Mmtdparts=S29GL:768K(boot),128K(env),15M(system),13M(rootfs),-(custfs);spi1.0:640k(uboot),320k(env),64k(mac),6M(system),23M(rootfs),-(config)root=/dev/mtdblock9 rw rootfstype=jffs2 init=/linuxrc

可以看到給custfs分配了3M大小的空間。

系統啓動後,掛載文件系統後出現如下現象:

只有一片串行flash的設備上不會有此打印信息,同時又串行和並行flash的設備上有此打印信息(此打印信息時有時無,有的設備上有,有的設備上沒有)

jffs2: jffs2_scan_eraseblock(): Magic bitmask0x1985 not found at 0x00000000: 0x4255 instead

jffs2: jffs2_scan_eraseblock(): Magic bitmask0x1985 not found at 0x00000004: 0x0001 instead

jffs2: jffs2_scan_eraseblock(): Magic bitmask0x1985 not found at 0x00000018: 0x0fcc instead

jffs2: jffs2_scan_eraseblock(): Magic bitmask0x1985 not found at 0x0000003c: 0x9221 instead

一直到:

jffs2: jffs2_scan_eraseblock(): Magic bitmask0x1985 not found at 0x00ce01d4: 0x16f1 instead

jffs2: Further such events for this erase blockwill not be printed

jffs2: Cowardly refusing to erase blocks onfilesystem with no valid JFFS2 nodes

jffs2: empty_blocks 0, bad_blocks 0, c->nr_blocks104

   

       可以發現地址從0x00000000 ---0x00ce01d4剛好3M大小的內容。然後根據網上提供的兩種解決方案:

  1. jffs2製作的過程中沒有指定生成的文件文件系統的大小,在從內存地址中下載文件系統後寫入到flash中的時候,寫入的大小和生成的大小不一樣,可能是由於內存中的髒數據下載到flash中去了,所以在製作jffs2文件系統的時候指定了生成文件的大小:--pad指定生成文件的大小

    /home/project/XLDK/buildroot/output/host/usr/sbin/mkfs.jffs2-e 0x10000 --pad=0x600000 -l -s 0x1000 -d/home/project/XLDK/buildroot/output/target -o/home/project/XLDK/buildroot/output/images/rootfs.jffs2

  2. flash沒有擦除乾淨

    把整片flash都擦除後重新燒寫還是有此打印信息出現。

經過這兩種方法都沒有解決此問題,說明問題不是出在此處,由於這塊的操作一直都是針對第二片串行的flash進行操作的,發現打印出來的地址大小卻是第一片並行flashmtdblock4的大小,而且是給他分配多大空間,打印信息就報出多少空間的信息。所以定位在第一片並行flash對串行flash有影響。具體影響暫時沒法定位,由於沒有並行flash的座子,無法讀出並行flash中的內容,無法判斷flash是否被使用。

 

進入系統後df查看內存使用情況:(兩片flash

第一片flashmtdblock4使用了388k的內容,當拆掉第一片flash後進入系統查看到:

    

根據df查看到內存使用情況後,突然發現文件系統下多出了一個mtdblock4,掛載在mnt目錄下,對比其他設備都沒有這一欄,所以這肯定是系統啓動的時候系統自動創建目錄並且把mtdblock4掛載到/mnt/custfs下。經過分析,後來查看到在/etc/inittab下發現瞭如下:

 

在文件系統製作過程中,會默認掛載mtdblock4到目錄custfs下,那麼之前的現象就得到解釋了,這裏纔是出現此打印信息的真正原因所在,因爲如果我們設備上有兩片flash的話,mtd分區第一片flash分區如下:

mtdparts=S29GL:768K(boot),128K(env),15M(system),13M(rootfs),-(custfs);custfs剛好是mtdblock4,而系統啓動過程中把mtdblock4掛載到/mnt/custfs下,並且文件類型是jffs2,這時候系統會去掃描該空間,出現打印信息,並且空間大小剛好是mtdblock4的大小,這就可以解釋文檔最開始的現象了。當我們拆掉並行flash後,mtd分區:

mtdparts=spi1.0:640k(uboot),320k(env),64k(mac),6M(system),23M(rootfs),-(config)其中mtdblock4剛好是rootfs,所以纔會出現下面的有兩個掛載的問題了

    

掛載的問題是在製作文件系統的時候添加到/etc/inittab下的,所以可以更改制作文件系統時候的文件可解決該問題,該文件目錄如下:

    

修改inittab後,重新燒寫rootfs.jffs2即可解決問題。



























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章