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大小的內容。然後根據網上提供的兩種解決方案:
-
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
-
flash沒有擦除乾淨
把整片flash都擦除後重新燒寫還是有此打印信息出現。
經過這兩種方法都沒有解決此問題,說明問題不是出在此處,由於這塊的操作一直都是針對第二片串行的flash進行操作的,發現打印出來的地址大小卻是第一片並行flash的mtdblock4的大小,而且是給他分配多大空間,打印信息就報出多少空間的信息。所以定位在第一片並行flash對串行flash有影響。具體影響暫時沒法定位,由於沒有並行flash的座子,無法讀出並行flash中的內容,無法判斷flash是否被使用。
進入系統後df查看內存使用情況:(兩片flash)
第一片flash的mtdblock4使用了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即可解決問題。