rtems 文件系统(15)-jffs2 研究(2)

本文深入探讨rtems中jffs2文件系统的构建,包括step6至step9的关键步骤:扫描介质、初步判断擦除块、挂载检查与节点处理。在扫描过程中,针对nor flash特性分析了nand flash相关配置,并详细描述了擦除块的判断和处理流程。最后,文件系统挂载成功后,创建并连接根节点到sb->s_root。
摘要由CSDN通过智能技术生成
接着之前的说

step6:

1:接下来调用 jffs2_build_filesystem 函数去建立文件系统,首先是设置scan flag位,进入scan.c中进行扫描,调用的函数是jffs2_scan_medium

其中有个配置是关于nand flash的CONFIG_JFFS2_FS_WRITEBUFFER,我使用的是nor,所以用不到,在网上找到解释如下

JFFS2_FS_WRITEBUFFER
+	bool "JFFS2 write-buffering support"
+	depends on JFFS2_FS
+	default y
 	help
-	  This enables the experimental support for NAND flash in JFFS2. NAND
-	  is a newer type of flash chip design than the traditional NOR flash,
-	  with higher density but a handful of characteristics which make it
-	  more interesting for the file system to use. Support for NAND flash
-	  is not yet complete and may corrupt data. For further information,
-	  including a link to the mailing list where details of the remaining
-	  work to be completed for NAND flash support can be found, see the 
-	  JFFS2 web site at <http://sources.redhat.com/jffs2>.
+	  This enables the write-buffering support in JFFS2.
 
-	  Say 'N' unless you have NAND flash and you are willing to test and
-	  develop JFFS2 support for it.
2: 它会找一个大小去尝试建立一个buffer,这个buffer会用来作为读buffer,看里面有多少个连续的0xff,PAGE_SIZE的概念。这个定义machine/param.h中,arm架构这个是4k一个页。所以它用这个大小来建立buffer

它会按照PAGE_SIZE分配空间。然后大循环每个sector,为什么根据4k大小去擦除每个64k的sector,现在还不清晰,可能就是个尝试吧。其实只是分配了这么多空间而已,进入到函数jffs2_scan_eraseblock后。每次按照EMPTY_SCAN_SIZE(256个) 对每个sector读回数据填入buffer,如果都是ff那么认为是空的,所以是可以擦除的。这个时候的状态是BLK_STATE_ALLFF


当然,如果在256的前面一些是ff,后面不是了,那么free space就是前面一些,这个时候调用

if ((err = jffs2_prealloc_raw_node_refs(c, jeb, 1)))
return err;
 if ((err = jffs2_scan_dirty_space(c, jeb, ofs)))
return err;

注意如果第一个成功,才会执行第二个函数。这种情况说明里面有数据了,所以要研究这两个函数,看怎么去擦除。这部分放到后面去研究


因为我是第一次擦除,所以都是0xff,所以直接就退出jffs2_scan_eraseblock了。接着进行下一个sector的scan。如果返回都是ff,那么说明这一区间满足我们认为的空block的条件。但其实这时候不能够确定整个块是完全被擦除的。所以我们将其标记为要擦除。并加入到要擦除的list中。scan这一部分就是粗略的方法判断flash中的块是否应该标记为可擦除。


接下来将擦除的这个list加入到erase_pending_list中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值