本文主要是介绍关于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大小的内容。然后根据网上提供的两种解决方案:
-
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即可解决问题。
这篇关于关于flash分区打印信息jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!