加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于flash分区打印信息jffs2: jffs2_scan_eraseblock(): Magic b

发布时间:2020-12-15 19:57:14 所属栏目:百科 来源:网络整理
导读: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/

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

第一片mtdblock4使用了388k的内容,当拆掉第一片flash后进入系统查看到:

????


根据df查看到内存使用情况后,突然发现文件系统下多出了一个mtdblock4,挂载在mnt目录下,对比其他设备都没有这一栏,所以这肯定是系统启动的时候系统自动创建目录并且把mtdblock4挂载到/mnt/custfs下。经过分析,后来查看到在/etc/inittab下发现了如下:

?

在文件系统制作过程中,会默认挂载mtdblock4到目录custfs下,那么之前的现象就得到解释了,这里才是出现此打印信息的真正原因所在,因为如果我们设备上有两片flash的话,mtd分区第一片flash分区如下:

mtdparts=S29GL:768K(boot),-(custfs);custfs刚好是mtdblock4,而系统启动过程中把/mnt/custfs下,并且文件类型是jffs2,这时候系统会去扫描该空间,出现打印信息,并且空间大小刚好是mtdblock4的大小,这就可以解释文档最开始的现象了。当我们拆掉并行flash后,mtd分区:

mtdparts=spi1.0:640k(uboot),-(config)其中mtdblock4刚好是rootfs,所以才会出现下面的有两个挂载的问题了

????

挂载的问题是在制作文件系统的时候添加到/etc/inittab下的,所以可以更改制作文件系统时候的文件可解决该问题,该文件目录如下:

????

修改inittab后,重新烧写rootfs.jffs2即可解决问题。




















??
??
??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读