转:http://blog.chinaunix.net/uid-27675161-id-3392636.html
相关知识引用《嵌入式 Linux 应用开发 完全手册》
Nand Flash 每一页大小为(512+16)字节,当然还有其它格式的,比如对于大页的 Nand Flash 是(2048+64),其中 512 字节就是一般的数据存储区,16 字节称为 OOB(Out Of Band)区。通常在 OOB 区存放坏块标记和前面512 字节的 ECC 校验码等。
jffs2 文件系统映像文件中没有 OOB 区的内容,如果将它烧写到 Nor Flash 中,则是简单的“平铺”关系;如果将它烧到 Nand Flash 中,则 Nand Flash 的驱动程序首先根据 OOB 的标记略过坏块,然后将一页数据(512字节)写入后,还会计算这 512 自己的 ECC 校验码,最后将它写入 OOB 区,如此循环。jffs2 文件系统映像文件的大小通常是 512 字节(页)的整数倍。
yaffs 文件系统映像文件中本身就包含了 OOB 区的数据,所以烧写时不需要再计算 ECC 值,首先检查是否坏块(是则跳过),然后写入 512 字节的数据,最后写入 16 字节的 OOB 数据,如此循环。yaffs 文件系统映像文件的大小是 (512+16)字节的整数倍。注意:烧写 yaffs 文件系统映像文件时要跳过第一个可用块,这是 yaffs 文件系统的特性决定的。
u-boot-2010.06 中烧写 jffs2 文件系统映像时并没有根据一页的数据计算出 ECC 校验码,而是往 OOB 区中直接写入 FF ,因此有些版本的 Linux 内核(例如:linux-2.6.29、linux-2.6.30.4),挂载 jffs2 文件系统时就会出现问题,然而有些高版本的内核(例如:linux-2.6.32、linux-3.4.2)却可以成功挂载上,不知道这是 u-boot 的问题还是内核的问题。
=================================================================
NAND Flash每一页大小为(512+16)字节(还有其他格式的NANDFlash,比如每页大小为(256+8)、(2048+64)等),其中的512字节就是一般存储数据的区域,16字节称为OOB(Out OfBand)区。通常在OOB区存放坏块标记、前面512字节的ECC较验码等。
cramfs、jffs2文件系统映像文件中并没有OOB区的内容,如果将它们烧入NORFlash中,则是简单的“平铺”关系;如果将它们烧入NAND Flash中,则NANDFlash的驱动程序首先根据OOB的标记略过坏块,然后将一页数据(512字节)写入后,还会计算这512字节的ECC较验码,最后将它写入OOB区,如此循环。cramfs、jffs2文件系统映像文件的大小通常是512的整数倍。
而yaffs文件系统映像文件的格式则跟它们不同,文件本身就包含了OOB区的数据(里面有坏块标记、ECC较验码、其他yaffs相关的信息)。所以烧写时,不需要再计算ECC值,首先检查是否坏块(是则跳过),然后写入512字节的数据,最后写入16字节的OOB数据,如此循环。yaffs文件系统映像文件的大小是(512+16)的整数倍。
注意:烧写yaffs文件系统映像时,分区上第一个可用的(不是坏块)块也要跳过。