嵌入式 jffs2问题“ jffs2_scan_eraseblock(): Magic和Empty Flash at”

文件系统制作:
    
    以前的内核系统支持的是yaffs文件系统,现在使用的是yaffs2文件系统,因此需要不同的制作工具,我们在此把它称为mkyaffs2image,按照上面的命令解压后它会被安
装到/usr/sbin目录下,并产生2个文件:mkyaffs2image 和mkyaffs2image-128M。

yaffs:
#mkyaffs2image root_qtopia root_qtopia.img
cramfs:
./mkcramfs _install rootfs.cramfs

uboot env:ar0130

jffs2:
mkfs.jffs2 -d ./rootfs -l -e 0x20000 -o jffs2-root.img (128K)

(qy)mkfs.jffs2 -d ./joseph_rootfs/ -l -e 0x10000 -o rootfs_kj_last.jffs2 (64K)


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 设置生成文件大小,其实此处也不算是设置,因为此选项是填充的意思,当生成文件比参数规定大小大时,此选项不起作用只有当生成文件小于规定大小才会进行填充,如果生成的文件大小不规范,很可能将内存脏数据填充到文件系统剩余页部分。

注:还有脏数据的来源可能是没有完整的清空内存


你可能感兴趣的:(嵌入式 jffs2问题“ jffs2_scan_eraseblock(): Magic和Empty Flash at”)