paper introduces the structure of TFFS,which is the flash file system of embedded real-time operating system VxWorks. It analyses the arithmetic and describes the constructing process on flash whose type is SST39VF160. At last it shows how to load VxWorks image through TFFS,this method is of much convenience in upgrading the system. Key
摘要:本文介绍了嵌入式实时操作系统 VxWorks的 flash文件系统 TFFS的结构,分析了其算法,描述了其在 SST39VF160型号flash上的构建步骤。昀后以 TFFS作为 VxWorks映像的加载途径,这种加载方式为系统的升级提供了极大的方便。
关键词:嵌入式、VxWorks、TFFS
VxWorks是可裁减、高可靠的嵌入式实时操作系统,它包括一个微内核、强大且响应时间上作了优化的网络支持、文件系统、I/O系统和C++支持的各种模块。高可靠性、卓越的实时性及友好的用户开发环境Tornado,使 VxWorks在航空航天、军事、通信等高精尖技术及实时性要求高的场合获得了广泛运用。
Flash作为一种安全、快速的存储体,具有便携、掉电数据不丢失等优点,目前已成为嵌入式系统中主要的数据和程序载体。TFFS文件系统是 M-systems公司为 VxWorks操作系统提供的定制实现,它为种类繁多的 flash提供了统一的块设备接口,和 Tornado实现了无缝连接,具有可重入、线程安全等特点。建立 TFFS后,就可以在它上面进行文件操作了。
一、TFFS结构
Flash作为一种存储器,是作为块设备通过 TFFS被 VxWorks管理的,TFFS在 VxWorks中的位置如图 1所示。
应用程序
500)this.style.width=500;" border=0>
TFFS由四层实现:核心层和三个功能层。三个功能层为:翻译层、 MTD层和 socket层,如图 2所示。核心层将各其它个层关联起来,处理全局性的问题,如垃圾回收、定时器;翻译层主要实现 DOS与 TFFS之间的交互,管理文件系统和 flash各个物理块的关系,以及支持 TFFS的各种功能,如磨损均衡、错误恢复; MTD层实现 flash的底层编程,如读、写、擦除;Socket层提供了 TFFS与硬板之间的接口,负责电源管理、检测设备插拔、窗口管理、 socket注册。二、TFFS的块映射及算法分析
TFFS为了将 flash抽象为普通的块设备,将 flash存储器映射为一系列连续的块,实现了逻辑块到物理块的对应关系,映射由映射图管理,如图 3所示,它在系统运行过程中动态更新。
500)this.style.width=500;" border=0>
Flash是一种只可对连续空间进行擦除操作的存储器件,它的擦除次数有限,为了提高 flash的使用寿命, TFFS实现了一些优化算法:均衡磨损、高效垃圾回收。这些算法的实现都是基于 TFFS所采用的动态块映射图,
1、均衡磨损算法
Flash 的可擦除次数虽然很大,但是是有限的,昀终, flash会老化,进入只读状态。那些擦除次数频繁的块,会先进入只读状态。为了使 flash各部分的磨损均衡, TFFS的映射图随着块的改变、移动和垃圾回收而动态更新,通过不断调整从逻辑块到物理块的映射关系,达到相对均衡的磨损水平。
2、垃圾回收算法
随着数据的不断写入和数据的更改, flash会出现越来越多的脏块,在擦除前不可再使用,如果不进行垃圾回收再利用, flash的空间昀终会耗尽。通常 flash擦除单元包括很多块,为了保证数据的一致性,TFFS先将回收单元的有效数据复制到别的单元,再更新映射图,昀后擦除回收单元,用户感觉不到数据的位置出现了变化。
3、块分配算法
块分配算法维持了一段存储池,这段存储池由一系列驻留同一可擦写块的空连续块组成,当这存储池低于某一下限值时,块分配算法触发块回收算法,寻找并回收昀符合下面标准的擦除单元:脏块数量昀大;擦写次数昀少;静态数据昀多。除了这些可测量的算法,垃圾回收算法还考虑了随机过程,这有助于垃圾回收涵盖各个区域。
4、数据的可靠性算法
为了保证已经存在 flash上的数据的安全,TFFS采用“先写入再擦除”的算法,更新数据时,原来的数据先转移到新的块中,当全部转移成功后,更新动态映射图,再擦除原来的块。若数据的转移途中出现异常,原有的数据仍然有效,映射图也保持不变。三、基于 SST39VF160的 TFFS驱动开发
在构建 TFFS过程中,涉及五个文件的修改: config.h、sysTffs.c、tffsConfig.c、 sst39vf160mtd.c、Makefile,其中, sst39vf160mtd.c根据所使用的 flash由用户自主命名。当定义了 TFFS的核心组件 INCLUDE_TFFS后,工程建立过程中会将 sysTffs.c包括进相应的 BSP目录。为了便于修改,可将 target/src/drv/tffs目录下的 tffsConfig.c拷贝到相应的 BSP目录下,昀后在该 BSP目录下加入用户编写的 sst39vf160mtd.c。
1、在 config.c中进行相关配置
本文中所描述的对象为一块型号为 SST39VF160的 flash,集成开发开发环境为 Tornado2.2_for_ARM。要在 VxWorks映像中包含 TrueFFS文件系统,需要做与之相关的配置,首先在 config.h中定义:
(1)使得 VxWorks的初始化代码调用 tffsDrv()来创建管理 TrueFFS所需的结构和全局变量,并为所有挂接了的 flash设备注册 socket组件驱动。
(2)使得加入两