和普通文件系统不同,YAFFS文件系统专门为Nand Flash设计,可以使用mkyaffsimage生成文件系统的镜像,但如果要将此镜像烧入Flash,那么有些地方需要注意。
硬件上,Nand Flash的设计已考虑到包含坏块的情况,对于每扇区512字节的Nand Flash,每扇区都有一个16字节额外的扩展区,通常用以存储此扇区的校验数据以及坏块标记等信息(WinCE则使用了其中4字节存储逻辑扇区编号),所以我们看Nand Flash的Data Sheet时,经常会发现其容量以“64M + 2048K”这样的格式进行描述,后面的数字就用来表示扩展区的容量。
YAFFS文件系统既然专为Nand Flash设计,它在生成文件系统镜像时,已经考虑到对扩展区的利用,并将扩展区的数据包含在扇区数据后,其结构定义如下:
bytes 0-511: Data
bytes 512-515: YAFFS TAG
bytes 516: Data status
bytes 517: Block status
bytes 518-519: YAFFS TAG
bytes 520-522: ECC for bytes 256-511
bytes 523-524: YAFFS TAG
bytes 525-527: ECC for bytes 0-255
可以看出,YAFFS使用了8字节(YAFFS TAG)存储文件系统相关信息,并使用4字节(ECC)存储校验数据,而此校验数据算法与Nand Flash控制器的硬件算法并不一致,对于很多Boot Loader,可能会校验失败。
另外&#