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

本文详细探讨了在RTEMS操作系统中,使用JFFS2文件系统时mkdir命令的工作流程。从分配节点、预留空间到标记节点过时,再到读写操作和节点引用的添加,逐一剖析关键步骤,帮助理解mkdir如何在JFFS2中创建目录。
摘要由CSDN通过智能技术生成

发现不深入了解jffs2完全无法理解错误的根源。更别说找出错误了。还是脚踏实地慢慢来吧。

根据5的一些输出信息。我来一步步分析吧

输入mkdir命令后。会调用 jffs2_mknod函数,目录也是一个node

1:首先分配一个jffs2_raw_inode类型

2:进入jffs2_reserve_space函数,保留空间,如果需要保留的空间不够,会触发jffs2_garbage_collect_pass函数,暂时不考虑gc部分。

3:如果需要保留的空间够,那么直接调用jffs2_do_reserve_space函数去保留空间。因此c->nextblock这时候还没有值,那么需要从free_list中找到一个挂接到上面使用。拿出来的节点在free_list中删除。这个时候c->nextblock指向一个有足够空间的区域。

4:调用jffs2_mark_node_obsolete函数,标记node是过时的,也就是用过的意思吧,因为之前擦除的块里面写了12个字节的mark,所以当被使用的时候这12个byte可以被用来储存数据。所以成为过时的吧obsolete

flash地址的最低位用来表示过时标志,bit1用来表示未使用。

ref->flash_offset = ref_offset(ref) | REF_OBSOLETE;

5:读取mark。然后更改类型再写入。称之为消除过时node,这时候就给出有多少空间可以用。

6:创建一个新的node,类型是_inode,然后填写它的各种属性,然后调用jffs2_write_dnode

这里面有另一个结构体

/*
  Larger representation of a raw no

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值