相关知识引用《嵌入式 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 的问题还是内核的问题。
——忠于梦想 勇于实践 linux_xpj@opencores.org
阅读(2693) | 评论(0) | 转发(1) |