10年时候做的一个PPT, 把它整理上来.
Outline
NAND Flash介绍
YAFFS2 Overview
Tnode Structure
YAFFS2 Object
YAFFS2 Misc
Reference
Nand Flash
页(page)
„页是Nand Flash的写入操作的最小单位
○现在常见的flash page size是2KB,老的nand flash多为512B
○每一个页,对应还有一块区域,叫做spare area,Linux系统中一般称之为OOB(Out of Band)。这块区域用于存放数据的校验值,文件系统也经常放些标志数据在里面。 2KB/page的flash一般spare area为64B,512B/page为16B
块(block)
„块是Nand Flash的擦除操作的最小单位
○块由多个页组成,ICE用的flash为64pages/block
写/擦特性
„Flash的擦除操作是以block块为单位的,一次性地把整个块擦除为1,也就是里面的内容全部都是0xFF了,这个过程是充电过程
„Write时,以页为单位,将对应的存储单元放电,所以才说,write过程只能从1变成0
Overwrite / Partial Page Programming
„某些flash支持修改Page中的Data时可以更改部份的Bit而不需要将Page Erase后才更改。如Page中的Data为10111010,要将该Data改成10100010则只需将其中两个Bit更改为0即可,不需先Erase再写入。
„这个功能常会发生这样的问题:在更改Bit时可能会有部分bit保持不变
„这个功能会给硬件设计增加难度,新的flash已不提供这个功能
Flash和普通设备相比所具有的特殊性
|
普通设备(硬盘/内存等)
|
Flash
|
读取/写入的叫法
|
读取/写入
|
读取/编程(Program)
|
读取/写入的最小单位
|
Bit/位
|
Page/页
|
擦除(Erase)操作的最小单位
|
Bit/位
|
Block/块
|
擦除操作的含义
|
将数据删除/全部写入0
|
将整个块都擦除成全是1,也就是里面的数据都是0xFF
|
对于写操作
|
直接写即可
|
在写数据之前,要先擦除,然后再写
|
Nand Flash对FS的要求
Nand Flash可能发生bit位翻转
„FS需要有ECC机制。因为一般NAND都自带ECC,所以这点不是必备
Nand Flash出厂就有坏块,使用时也可能出现坏块
„FS需要能识别/标记坏块
Nand Flash寿命有限(SLC约10万次擦写)
„FS需要尽量平均的使用各block
„FS需要提供buffer机制
Nand Flash的Partial Page Programming特性
„FS需要设计机制去区分一个数据是有效还是无效
Nand Flash的擦/写特性
„FS需要针对这个特性做特殊设计,如何实现garbage collection,如何提高performance
YAFFS2 Overview
是什么?
„YAFFS(Yet Another Flash File System) 是专门为NandFlash设计的文件系统
○JFFS/JFFS2文件系统是为NorFlash设计的
„主要由Aleph One公司的Charles Manning开发
„以GNU GPL协议开放源码
„YAFFS目前有YAFFS1、YAFFS2两个版本
○一般来说,YAFFS对小页面(512B+16B/页)有很好的支持,YAFFS2对更大的页面(2K+64B/页)支持更好。
○但两个版本有很多设计上的不同,不只是简单大小区别。Android中使用的是YAFF2,本文以YAFFS2为主
„YAFFS1是不完整的LFS( logstructured file system),YAFFS2是真正的LFS
特点
„针对Nand特性优化,提高performance及延长Nand寿命
○加载速度快,耗用内存少
○Wear Levelling延长Nand寿命
○Error Correction 提高了可靠性,尤其是使用时断电情形
„极好的可移植性
○YAFFS采用模块化设计,虽然最初是用在linux系统上的,但是也已经移植到其他系统比如wince。甚至可以使用在没有操作系统的设备上(“YAFFS/Direct”)
„不断的发展
○能支持很多新的flashIt now handles larger page sizes of 2KB
○正在开发对MLC NAND的支持
YAFFS concept
Object
„is anything that is stored in the file system:
○Regular data files
○Directories
○Hardlinks
○Symbolic links
○Special objects (pipes, devices etc).
„All objects are identified by a unique integer objectId
Chunk
„the unit of allocation is the chunk