基于INTEL StrataFlash在VxWorks上构建TrueFFS文件系统
一 前言
VxWorks是美国WindRiver公司于1983年推出的一种嵌入式实时操作系统(RTOS),它以突出的可靠性,实时性,可裁减性等特点被广泛应用于航空,航天,军事,通信,安防等领域。
在嵌入式系统中,通常用flash作为永久存储介质,用来存储系统引导程序、操作系统映像、用户应用程序以及系统的配置参数等。基于VxWorks 操作系统,在flash上建立TureFFS文件系统,可以使用户操作flash时,就像操作硬盘一样,支持文件的建立、拷贝、删除等操作。
StrataFlash系列flash是2005年初INTEL公司推出的在技术上有重大突破的产品,它开创了在单个晶体管中存储两位数据的存储技术,从而大大地降低了成本,一经推出,迅速被广泛采用。在其上构建TrueFFS文件系统,可以为其他开发者提供有益的借鉴。
二 TrueFFS文件系统介绍
TrueFFS文件系统为种类繁多的flash存储设备提供了统一的块设备接口,它具有可重入性、线程安全等特点。在TrueFFS的支持下,应用程序对flash设备的操作就好像对有DOS文件系统支持的硬盘设备的操作一样。
TrueFFS文件系统包括一个核心层(Core Layer)和三个功能层:转换层(Translation Layer)、驱动层(Memory Technology Driver (MTD) Layer)、套接层(Socket Layer),共四层。层次结构如图 1所示。
核心层的主要功能是使其他各层互相连接,为其他层的通信提供通道以及完成一些象碎片收集,定时器管理等全局任务。WindRiver公司通常以二进制代码的形式提供核心层模块,开发者不需对核心层进行任何修改。
转换层主要负责维护一个文件系统的逻辑块和flash中删除块之间的映射图。这个映射图主要是用来实现对flash的平衡磨损策略,以及进行错误恢复。所谓平衡磨损是指,flash的寿命通常是有限的,每个块的擦写次数大概在十万次左右(实际上要少的多),因此在擦写时不能一直对某一个块重复擦写,即使是对同一个数据改写时也是这样,一个数据改写前在这个块中存放,改写后可能就存放到另外一块了,而且flash是先写后删,这就可以在写入发生错误时进行错误恢复了。转换层也是以二进制代码的形式提供的。
驱动层是对不同种类的flash提供底层的操作,如映射(map),读(read),写(write),删(erase)等。构建TrueFFS文件系统的主要工作就是针对不同类型的flash芯片编写相应的驱动层代码。
套接层是提供TrueFFS和硬件之间的接口,提供访问特定硬件的访问进程。包括套接字注册,电源管理,写保护等。WindRiver公司为开发者提供一个套接层模板,需要针对特定的硬件进行修改。
三 INTEL StrataFlash系列FLASH上构建TrueFFS文件系统
本文以INTEL StrataFlash系列中常用的32Mbit 28F320J3A为例说明构建TrueFFS文件系统的过程。
1 修改相关系统文件
修改config.h文件,此文件一般存放在BSP文件夹中,在此文件中定义支持TrueFFS功能以及其他相关功能的宏,包括:
#define INCLUDE_TFFS
#ifdef INCLUDE_TFFS
#define INCLUDE_DOSFS
#define INCLUDE_SHOW_ROUTINES
#endif
修改sysTffs.c文件,此文件一般存放在BSP文件夹中,此文件定义哪个MTD驱动和转换层模块被包含到TrueFFS中,以及定义flash的基地址和大小,会有以下定义出现:
#define INCLUDE_MTD_I28FJ3A
#define INCLUDE_TL_FTL
#define FLASH_BASE_ADRS 0x10000000
#defineFLASH_SIZE 0x00400000
修改sysLib.c文件,此文件一般存放在BSP文件夹中,在数组sysPhysMemDesc[]中加入FLASH_BASE_ADRS、 FLASH_SIZE所指定的地址段,MMU属性设为VM_STATE_WRITABLE和VM_STATE_CACHEABLE_NOT等。
修改tffsConfig.c文件,此文件一般存放在src\drv\tffs文件夹中,可以拷贝到BSP文件夹中,在 MTDidentifyRoutine mtdTable[]中把定义的宏INCLUDE_MTD_I28FJ3A和MTD识别函数关联起来:
#ifdef INCLUDE_MTD_I28FJ3A
i28fj3aMtdIdentify,
#endif
系统在调用tffsdev()函数安装flash的MTD驱动时会调用这个表项来查找并识别flash设备。
2 MTD驱动程序组成
在MTD驱动中,最重要的函数是i28fj3aMtdIdentify()函数,可以把它看作是MTD的初始化函数。它负责读取芯片制造商和设备的ID 号,INTEL公司的代码是0x0089,28F320J3A的设备代码是0x0016。然后对FLFlash结构的成员进行初始化。FLFlash结构定义在target\h\tffs\FLFlash.h中:
typedef struct tFlash FLFlash;
struct tFlash {
FlashType type;
long erasableBlockSize;
long chipSize;
int noOfChips;
int interleaving;
int flags;
void *mtdVars;
FLSocket *socket;
void FAR0 *(*map)(FLFlash *, CardAddress
实时操作系统 VxWorks TFFS 文件系统 相关文章:
- VxWorks实时操作系统下MPC8260ATM驱动的实现(11-11)
- VXWORKS内核分析(11-11)
- 嵌入式实时操作系统设计探讨(10-15)
- 嵌入式实时操作系统μC/OS-II 在P89V51RD2中的移植(04-09)
- LPC2292的伪中断与伪中断处理(03-25)
- 网络处理器IP2022及其在嵌入式牌照识别系统中的应用设计(05-16)