0 引 言
U-Boot是现在广泛运用的嵌入式操作体系通用引导程序,具有功用丰厚强壮,支撑多种操作体系和 CPU体系,易于功用扩展和移植,源码敞开等多种长处。U-Boot能够一起支撑发动加载方式和下载方式。在下载方式下,能够经过U-Boot自带的 nand read/write等指令,合作.Jffs 2等参数,完结cramfs,Jffs 2等文件体系镜像的读写,便利开发进程的调试。Yaffs文件体系是专门针对NAND FLASH规划的可读写型文件体系,在NAND FLASH上功用安稳优异。U-Boot本身没有完结对Yaffs文件体系镜像读写的直接支撑。因为Yaffs文件体系的特别结构,需求对nand指令做必定的修正,然后完结其在NANDFLASH上对Yaffs镜像的读写。
1 相关作业简介
1.1 Yaffs文件体系结构简述
现在,嵌入式体系中常用的FLASH文件体系有Cramfs,Jffs 2,Yaffs,exfat等。Cramfs是一种紧缩型只读型文件体系,其在体系发动时解压至内存中运转。Jffs 2,Yaffs,Exfat等是可读写型文件体系,Jffs 2一般应用于NOR型FLASH;Exfat不是开源的文件体系完结,一般应用于Windows CE操作体系中。Yaffs是一种专门针对NAND FLASH规划的可读写型文件体系,它能针对嵌入式存储器的功用要求供给损耗平衡、掉电维护等。Yaffs文件体系的源代码敞开,在多种嵌入式操作体系中移植非常便利。
一般一个NAND FLASH存储设备由若干块组成;1个块由若干页组成。一般128 MB以下容量的NAND FLASH芯片,一页巨细为528 B,顺次分为2个256 B的主数据区和16 B的额定空间;128 MB以上容量的NAND FLASH芯片,一页巨细一般为2 KB。因为NAND FLASH呈现位回转的概率较大,一般在读写时需求运用ECC进行过错查验和康复。
Yaffs文件体系的规划充沛考虑到NAND FLASH以页为存取单位等的特色,将文件安排成固定巨细的段(Chunk)。以528 B的页为例,Yaffs文件体系运用前512 B存储数据、16 B的额定空间,用以寄存数据的ECC和文件体系的安排信息等(称为OOB数据)。经过OOB数据,不但能完结过错检测和坏块处理;一起能够防止加载时对整个存储介质的扫描,加快了文件体系的加载速度。一个页面的详细结构如表1所示。
由此可知,与其他文件体系比较,在生成Yaffs镜像时就包含了OOB数据,所以在烧写Yaffs镜像时,不需求核算ECC,仅顺次写入512 B的数据和16 B的OOB数据即可。一起,Yaffs镜像要运用分区上的第一个块来存储一个名为Yaffs_ObjectHeader的结构体。该结构体记录了该分区中的文件、途径以及相关的链接,所以在烧写时还需求越过第一个可用的块。Yaffs文件体系现在常用的版别为Yaffs 2,功用在许多方面都有了很大的进步。
1.2 U-Boot对常见文件体系的支撑
在实践开发进程中,一般运用引导程序,比方U-Boot,完结文件向FLASH中的烧写和发动引导等作业。U-Boot能够支撑Cramfs,Jffs 2文件体系的烧写。这些文件体系是针对NOR型FLASH规划的,一切文件数据便是简略的线性表安排方式。关于现在很多运用的NAND型FLASH,因为带有用于数据校验等功用的OOB区,所以Yaffs文件体系的数据安排方式不再是线性表的方式。
U-Boot没有供给对Yaffs文件体系的读写支撑。但因为该文件体系的读写进程与其他文件体系的读写相似,因而能够经过修正U-Boot的FLASH读写指令,添加处理00B区域数据的功用,即能够完结对Yaffs文件体系的读写支撑。