关于flash分区打印信息jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985

2023-12-11 03:18

本文主要是介绍关于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即可解决问题。




























这篇关于关于flash分区打印信息jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/479286

相关文章

什么是 Flash Attention

Flash Attention 是 由 Tri Dao 和 Dan Fu 等人在2022年的论文 FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness 中 提出的, 论文可以从 https://arxiv.org/abs/2205.14135 页面下载,点击 View PDF 就可以下载。 下面我

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

Hbase Filter+Scan 查询效率优化

Hbase Filter+Scan 查询效率问题 众所周知,Hbase利用filter过滤器查询时候会进行全表扫描,查询效率低下,如果没有二级索引,在项目中很多情况需要利用filter,下面针对这种情况尝试了几种优化的方案,仅供参考,欢迎交流。 根据业务要求,作者需要根据时间范围搜索所需要的数据,所以作者设计的rowKey是以时间戳为起始字符串的。 正确尝试: 1.scan 设置 开始行和结

context:component-scan使用说明!

<!-- 使用annotation 自动注册bean, 并保证@Required、@Autowired的属性被注入 --> <context:component-scan base-package="com.yuanls"/> 在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controll

数据库系统 第41节 数据库分区简介

数据库分区是一种数据库设计技术,用于将大型表或索引的数据分布到不同的物理区域,以提高查询性能、优化数据管理、简化维护任务,并提高数据的可用性。下面我将详细介绍每种分区类型,并结合伪代码或概念性的源代码来说明其实现方式。 1. 范围分区 (Range Partitioning) 范围分区是根据某个列的值范围来划分数据。例如,可以按照日期或数值范围来分区。 示例场景:一个订单表,按年份分区。

Windows环境下SD卡多分区 隐藏分区 解决python裸读写扇区失败

SD卡分区 右键“我的电脑”->“管理”->“磁盘管理”; 如果SD卡有文件系统,点击"删除卷",重新做卡; 删除文件系统后如下图,点击“新建简单卷”; 在导航页“指定卷大小”,设置分区的大小,留出剩余的空间; python读写SD卡 这里需要注意的是,写SD卡需要加锁,否则写不成功 #带文件系统,需要锁定卷,否则无法写扇区@contextlib.contextmanagerd

在不损坏数据的情况下给WIN7重新划分分区

小易接到个求助电话:我的机器上已经装好了系统,但是只有一个分区。我不想重装系统重新分区,能不能再分出一个分区?   这个故障可能是困惑很多网友的一个故障。一般,有一些第三方的软件可以实现这些功能。但是,现在在 Windows Vista/Windows 7 里允许你对现有分区大小进行一定范围的调整。   来看一下操作办法:   准备工作   这个操作必须要求你的文件系统是 N

如何调整c盘分区大小,怎样把c盘空间调整小些

新买的笔记本电脑回来后发现电脑只分了C盘和D盘两个区,C盘就占了很大的空间,如何调整c盘分区大小,这样可以多腾些空间出来利用呢?虽然Win7有磁盘管理器可以压缩分区实现把C盘调小些,但是它的功能有限,压缩后也是很大一部分空间在C盘浪费,那怎样把c盘空间调整小些呢,下载我们介绍一个工具来完成这些复杂的动作:   1、下载安装分区助手DiskTool中文版。   在主界面上你可以看到C盘有60

win10 gpt分区+uefi引导 卸载双系统ubuntu

1、首先暴力卸载ubuntu 在win10里面磁盘管理中找到对应的linux磁盘分区 删除卷OK 2、重启 出现下面(根据机型不同界面可能不一样 ) 3、exit 退出grub引导 进入uefi引导  选择win10引导项 (当然你要是一直按着进入bios boot的那个按键的话 也不用看第二步了 直接选择windows启动项进去 dell的话是F12) 4、进入