NandFlash及YAFFS学习概述

以开源的YAFFS2为切入点,深入剖析地址映射、坏块管理算法源码,掌握其算法设计思想。

  1. 通过分析相关函数,理解从文件系统初始化到真正写入Nand的整个过程;
  2. 通过分析相关函数接口,认识文件系统层和Nand层次基本关系点是地址映射,除此之外,文件系统和Nand的操作都是按照各种的逻辑,各自处理各自的;
  3. 重复写数据到Nand,理解从写入Nand第一页到再次写入Nand第一页的整个过程;
  4. 重复写数据到Nand,理解垃圾回收的整个过程;
  5. 分析地址映射和坏块管理;
  6. 分析上电时读取Nand的哪些信息,并且怎么样使用这些信息;
  7. 借用文件系统变量及程序架构,实现简单程序来读写用户数据(传入参数:逻辑地址+数据+长度);
  8. RAM资源的使用情况分析。
    详细,如下:
    1)yaffs_StartUp
    2)yaffs_mount
    3)yaffs_Scan
    4)YAFF_Open: 建立文件,就是在RAM和Nand里面建立文件的头
    5)YAFF_Write: 写文件,就是把数据写入Nand
    6)YAFF的软件层次较分明,文件结构\数据等只是在文件层操作,底层Nand操作读写擦和上层的接口就是地址映射
    7)地址映射的方法是:数据是属于该文件里面的哪个数据段,映射到实际的物理页面
    8)垃圾回收和坏块管理与文件系统没有关系,底层根据Nand的状态自动进行
    yaffs_StartUp
    1)配置Nand的基本信息,Nand的驱动
    2)yaffs_initialise:Handles数组–>与Nand无关
    yaffs_mount
    1)yaffs_InitialiseBlocks:因为RAM模拟Nand,所以是建立Nand–>与文件无关
    2)yaffs_InitialiseTnodes: Tnodes数组–>与Nand无关
    yaffs_Scan
    1)读取Nand信息
    2)使用Nand信息初始化文件系统相关:Handles,Tnodes–>与Nand无关(除了地址映射)
    3)使用Nand信息初始化Nand信息相关:Dev-,块、页等使用状态、标志->与文件无关
    yaffs_open
    1)创建文件相关信息:Handles,Tnodes–>与Nand无关(除了地址映射)
    2)将文件头写入Nand:Dev-,垃圾回收–寻找可用的页–写入Nand–反馈真实页面地址给文件系统–>与文件系统无关(除了地址映射)
    3)写入Nand:数据+OOB区的Tag–>与文件系统有关的是文件ID
    垃圾回收与磨损均衡
    1)在真正有写Nand需求时:写文件头和写文件数据,才做垃圾回收
    2)按照一定规律先检查是否需要回收,是则迁移老块的数据到新块,然后擦掉老块(回收)–>与文件无关
    3)不存在因为数据不需要更新,而数据页或者块一直不被更新的情况,即冷热块比较均衡–>与文件无关
    寻找新页
    1)在真正写Nand时:上层传来的只有数据,具体写哪页,底层根据各块、页状态,自行查找–>与文件无关
    实例分析写Nand和垃圾回收过程
    2)Nand:4页/16块
    3)依次写入Nand的每一页,所有页写完后,回到第一页开始写–>与文件无关
    4)垃圾回收的速度超过写入Nand的速度,在所有页还没有被写完时,垃圾回收已经多次(写完所有页时,所有块已经被检查了6次,所有垃圾已经被回收)–>与文件无关
    上述部分,后续分为几个专题,详细讲解。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值