AFFS2 的 `yaffs_ext_tags` 数据结构详解

[复制链接]
发表于 5 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
YAFFS2 的 yaffs_ext_tags 数据结构详解

yaffs_ext_tags 是 YAFFS2 文件系统中用于 管理 NAND 闪存页的元数据 的焦点结构体,存储在 NAND 的 OOB(Out-Of-Band)地区。它记录了数据块的归属、状态、校验信息等关键元数据,是 YAFFS2 实现 快速挂载数据恢复垃圾回收 的基础。以下是其详细剖析:

1. 结构体定义
  1. struct yaffs_ext_tags {
  2.     unsigned chunk_used:1;      // 标记该页是否被使用(1=有效数据,0=空闲)
  3.     unsigned obj_id:20;         // 所属对象的唯一标识符(文件/目录的ID)
  4.     unsigned chunk_id:10;       // 页在文件中的逻辑编号(从0开始)
  5.     unsigned serial_number:15;  // 序列号(用于块版本控制)
  6.     unsigned n_bytes:10;        // 页内有效数据字节数(非全页写入时使用)
  7.     unsigned ecc:12;            // ECC校验码(可选,依赖硬件支持)
  8.     unsigned block_bad:1;       // 标记所属块是否为坏块(1=坏块)
  9.     // ... 其他扩展字段(根据YAFFS2版本可能不同)
  10. };
复制代码

2. 关键字段剖析

字段作用chunk_used标识当前页是否存储有效数据。若为 0,垃圾回收时可擦除该页。obj_id关联到 yaffs_obj 的 obj_id,表示该页属于哪个文件/目录。chunk_id页在文件中的逻辑偏移量(如 0 表示文件头,1 表示第二个数据块)。serial_number块的序列号,用于磨损平衡和版本控制(防止旧数据覆盖新数据)。n_bytes实际存储的有效数据长度(支持非整页写入,如文件末端部门填充)。ecc错误校正码(ECC),用于检测和纠正数据错误(需硬件支持)。block_bad标志当前页所属的块是否为坏块。若为 1,YAFFS2 会跳过该块。
3. 存储位置与结构


  • OOB 地区
    每个 NAND 页的 OOB 地区通常为 64 字节,yaffs_ext_tags 占用其中一部门(具体大小由YAFFS2配置决定)。
    典型结构字段字节偏移长度(字节)chunk_used01 (bit)obj_id0-34chunk_id4-52serial_number6-72n_bytes8-92ecc10-134block_bad141 (bit)

4. 焦点功能

(1) 数据归属与快速挂载


  • 挂载时扫描
    YAFFS2 通过遍历全部块的 yaffs_ext_tags,快速重建文件系统元数据(如 yaffs_obj 树)。
  • 对象关联
    obj_id 和 chunk_id 共同定位数据所属文件及位置,无需依赖中心目录表。
(2) 数据完备性掩护


  • ECC校验
    若硬件支持,YAFFS2 利用 ecc 字段检测和纠正数据错误。
  • 坏块隔离
    block_bad 标志坏块,防止后续写入操纵利用已破坏的块。
(3) 垃圾回收(GC)优化


  • 无效数据识别
    通过 chunk_used 和 obj_id,GC 可快速识别可回收的无效页。
  • 磨损平衡
    serial_number 记录块的擦除次数,优先回收低序列号的块。

5. 操纵流程示例

(1) 写入数据页
  1. struct yaffs_ext_tags tags;
  2. memset(&tags, 0, sizeof(tags));
  3. tags.chunk_used = 1;
  4. tags.obj_id = file->obj_id;
  5. tags.chunk_id = chunk_num;
  6. tags.n_bytes = data_len;
  7. tags.serial_number = block->seq_number
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表