YAFFS2在嵌入式系统中的实现
FS2文件系统映像。
mkYAFFS2image MYM{PRJROOT}rootfs rootfs.YAFFS
通过mkYAFFS2image制做出来的映像文件其OOB中包含的ECC是使用YAFFS2/YAFFS ecc.c文件中的YAFFS ECCCaimJlate函数计算出来的
ECC校验码,其校验算法和nand ecc.c文件内的nand_calculate_ecc函数校验算法不同,如果在内核中由MTD来处理ECC,当读取NAND FLASH中的数据时,会通过nand_calculate_ecc函数的算法再生成一个新的ECC校验和,校验的时候,将从OOB区中读出的原ECC校验和新ECC校验和按位异或,其错误的结果会造成系统认为所有的页面都是错误的。解决办法有两种,一是在内核编译时把Lets YAFFS do itsown ECC选上,同时修改内核把MTD驱动中的ECC校验关闭;二是修改mkYAFFS2image.c文件,使其制作image时使用nand_caleulate_ecc函数的校验算法,在内核编译时不要把Lets YAFFS do its own ECC选上,同时打开MTD驱动中的ECC校验。
3.4 系统测试
启动系统后,Bootloader首先运行,然后它将内核复制到内存中,并且在内存某个固定的地址设置好要传递给内核的参数,最后运行内核。内核启动之后,它会将文件系统挂载为根文件系统,接着启动文件系统中的应用程序。启动途中会显示如下信息:
以上信息说明系统已经找到NAND FLASH设备,并识别出分区。进入系统后,输入下面命令。
在输出结果中,显示了YAFFS2的相关信息,说明Linux内核已经支持YAFFS2文件系统。
建立挂载点,挂载blockdevice设备。
查看mount上的目录,可以看到该目录下有刚才拷贝的文件,将其umount后,再次mount上来,发现拷贝的文件仍然存在,这时删除该文件然后umount,再次mount后,发现拷贝的文件已经被删除,说明该分区能正常读/写。
在FLASH上建立根文件系统:
重新启动,改变启动参数:
重新启动,内核可以从NAND FLASH启动根文件系统。
4 结语
大页NAND FLASH的快速擦除、读/写性能满足了系统对实时性的要求,YAFFS2可靠的掉电保护和高效率的读写以及对NAND FLASH存储设备的保护等优势增加了整个系统的安全性和健壮性,两者的结合达到了装备对数据的大容量存储和管理的需求。目前,该系统已装备于某部,用于实时监测装备的战技术状况,以及长时间实时记录装备工作数据,用于事后分析评估装备性能和操作手水平,在部队作训中发挥了重大作用。
- linux文件系统基础(02-09)
- Linux下Ext2与Ext3文件系统的区别(04-10)
- 基于VxWorks的文件系统的研究与实现(09-18)
- 设备文件系统devfs详解(05-01)
- Linux的日志文件系统简要剖析(05-01)
- Flash文件系统剖析(05-07)