欢迎来到天天文库
浏览记录
ID:9707100
大小:63.50 KB
页数:8页
时间:2018-05-05
《基于非2的n次幂大小的trueffs文件系统的创建》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、基于非2的n次幂大小的TrueFFS文件系统的创建 Flash存储器以其体积小、耗电省、非易失的特性,越来越广泛地应用于嵌入式系统开发中,成为重要的程序和数据载体。TrueFFS文件系统是M-systems公司推出的Flash管理软件,它为种类繁多的Flash提供了标准的块设备接口,因此被包括VxTD(MemoryTechnologyDriver)层实现Flash底层驱动,如读、写、擦除等;Socket层提供TFFS与硬件之间的接口服务,如向系统注册Socket设备、检测插拔、硬件写保护等。 2TrueFFS文件系统算法
2、TrueFFS能均匀使用Flash,用冗余数据结构保证可靠的数据操作,能排除损坏以避免错误,实现了FTL(FlashTranslationLayer)标准。 (1)损耗均衡算法 Flash存储器的擦除寿命有限,随着使用次数的增多,它最终会变成只读状态。为延长其寿命,行之有效的方法就是平衡使用所有的存储单元,而不让某一单元过度使用。TrueFFS使用一种基于动态维护表的block-to-flash(块对应于Flash)传输系统来实现损耗均衡技术。当块数据被修改、移动或碎片回收后,这张维护表会自动调整。 (2)碎片回收 块数
3、据的修改使得Flash的一些块区域被填满无效数据,这些区域在擦除之前变得不可写。TrueFFS使用一种碎片回收(garbagecollection)机制来回收这些块。该机制从一个预擦除单元内拷贝所有的有效数据块到一个新的单元,然后更新block-to-flash映射表,最后擦除废旧的预擦除单元。 (3)块分配和关联数据集结 TrueFFS会将关联的数据(如出自同一个文件)集结到同一个单独擦除单元(eraseunit)内的一段连续的区域中。为此,TrueFFS尽量在同一个擦除单元(eraseunit)内维持一个由多个物理上连续
4、自由的块组成的存储池。这就提高了数据的读取效率,减少碎片的产生。 (4)错误恢复 TrueFFS使用了一种先写后擦的策略。当更新Flash一个扇区的数据时,只有在更新操作完成并且新存储的数据校验成功后,先前的数据才会被允许擦掉。操作成功,新扇区的数据才有效,否则老扇区的数据有效。 3开发背景介绍 在开发中使用的硬件电路板焊接了64MBSDRAM,两片NORFlash,每片8MB。嵌入式VxB。计划借助TrueFFS创建两个磁盘C和D,C中存放bootrom.bin和VxB、2MB、4MB或8MB。由于bootrom.bi
5、n是直接固化到第一片NORFlash中,所以无法实现将该Flash全部创建TFFS,导致不仅无法存放VxB空间用于固化bootrom.bin文件,上电后可自动运行bootrom;另外6MB空间创建TFFS文件系统。构建TFFS的过程中涉及5个文件的修改:config.h、Makefile、sysTffs.c、tffsConfig.c、i28f640.c。各文件改动如下: (1)config.h:加入必要的定义 #defineINCLUDE_TFFS #defineINCLUDE_TFFS_DOSFS #defineINC
6、LUDE_TFFS_SHOakefile:将生成的i28f640.o编译进系统映像,加入定义 MACH_EXTRA=i28f640.o (3)sysTffs.c:配置TFFS各项参数 #defineINCLUDE_MTD_I28F640 /*可以调用i28f640Identify函数*/ #defineINCLUDE_TL_FTL /*包含需要使用的翻译层*/ #undefINCLUDE_TL_SSFDC /*去掉不使用的翻译层*/ #defineFLASH_BASE_ADRS0 /*TFFS空间从0地址开始
7、*/ #defineFLASH_SIZE0x00800000 /*共8MB*/ 改写sysTffsFormat函数,完成格式化过程。此处必须弄清tffsDevFormatParams中各个参数的定义。 typedefstruct{ longintbootImageLen; /*bootImage需要从flash开始处预留的长度*/ unsignedpercentUse; /*Flash被格式化的百分率,为了提高TrueFFS的性能,不要设为100%,以便任何时候都有空余空间。默认值为99%*/ unsigned
8、noOfSpareUnits; /*空余擦除单元数目,目的在于flash出现坏块时可以用它来替代,默认为1*/ unsignedlongvmAddressingLimit; /*FTL在RAM中映射的大小,默认为61Kbytes*/ FLStatus(*
此文档下载收益归作者所有