如何深入理解yaffs2文件系统的核心原理?

摘要:liwen01 2024.07.07 前言 yaffs 是专为nand flash 设计的一款文件系统,与jffs 类似,都是属于日志结构文件系统。与jffs 不同的是,yaffs 文件系统利用了nand flash 一些特有属性,所以在数
liwen01 2024.07.07 前言 yaffs 是专为nand flash 设计的一款文件系统,与jffs 类似,都是属于日志结构文件系统。与jffs 不同的是,yaffs 文件系统利用了nand flash 一些特有属性,所以在数据读写擦除和回收上都有较大的差异。 关于jffs2文件系统的介绍可以查看《文件系统(八):Linux JFFS2文件系统工作原理、优势与局限》 这里先介绍一下nand flash的一些基础知识,有助于后面理解yaffs的设计原理。 (一)flash 基础 flash分为nor flash和nand flash两类: nor flash: 成本较高,容量较小,优点是读写数据不容易出错,比较适用于存储关键数据,比如程序固件、配置参数等。 nand flash:成本较低,相对便宜,容量较大,但是数据比较容易出错,所以一般都需要有对应的软件或者硬件的校验算法(ECC),比较适合用来储存大容量且数据安全要求不是非常严格的数据,比如照片、视频等。 (1)nand flash 数据存储单元 nand flash数据存储单元从概念上来说,由大到小有: Nand Flash(Package) -> Chip(Die) -> Plane -> Block -> Page(Chunk) -> OOB(Spare data) 其中有些存储单元,在一些不同的资料上它们的叫法不太一样,比如page(页),、有些资料上介绍的是Chunk,在有些软件编程中,也有可能被介绍为扇区sector Nand Flash:也叫Package,这是我们在PCBA上看到的已经封装好的整科芯片,带有封装有IO引脚,可以直接焊接到PCB上使用。 Chip:也叫Die(裸片),这是独立的硅片,包含存储单元和控制电路,一个Package 中可以包含多个Die。 Plane: Plane是die内部的一个逻辑分区。每个die通常被划分为多个plane,以实现并行操作。每个plane有独立的寄存器和数据缓存,因此可以同时进行多个操作(如读取、写入、擦除),从而提高性能。 Block:NAND Flash存储的基本单位。 Page:也叫chunk,NAND Flash中最小的可编程单元。 OOB(Out-Of-Band):也叫Spare data,OOB区域是每个page中额外的存储空间,用于存储元数据,例如错误校正码(ECC)、坏块标记和其他管理信息. (2)nand flash 特性 nand flash 有一些特殊的属性,也是因为这些特殊的属性才有了yaffs文件系统的特殊设计 数据读写的最小单位是page(chunk) 数据写入之前,写入位置需要是被擦除过了的 数据擦除的最小单位是block block里面的page,只能按顺序写入,不能任意page写入 oob的数据是随着page(chunk)的数据一同被写入 nand flash有编程干扰、读取干扰、配对页面等问题,会引起自身或是配对页面的位翻转。 (3)数据存储 结合nand flash的特性,从应用软件编程的角度来看,整个nand flash空间是由各page(chunk)组成,每个page(chunk)后面跟随一个与之对应的oob. 不同型号不同厂家生产的nand flash,它的block、page、oob等大小有可能不一样,在软件开发或是制作yaffs文件系统时,首先需要确认nand flash的参数。 (二)yaff2 数据格式 yaffs 有两个版本,yaffs1与yaffs2,主要区别是yaffs2可以支持比512Byte更大的chunk。它发布于2003年,比jffs2晚一两年被设计,但距今也二十多年了。 下面内容,yaffs 是代指yaffs1和yaffs2。
阅读全文