基于INTEL StrataFlash在VxWorks上构建TrueFFS文件系统

时间:2012-05-21来源:网络

修改tffsConfig.c文件,此文件一般存放在srcdrvtffs文件夹中,可以拷贝到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结构定义在targethtffsFLFlash.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, int);

FLStatus (*read)(FLFlash *, CardAddress, void FAR1 *, int, int);

FLStatus (*write)(FLFlash *, CardAddress, const void FAR1 *, int, int);

FLStatus (*erase)(FLFlash *, int, int);

void (*setPowerOnCallback)(FLFlash *);

};

其中,type指flash的设备类型;erasableBlockSize指flash可擦除块的大小,单位为字节;chipsize指flash存储容量,单位为字节;noOfChips指构成flash存储阵列的存储器的片数;interleaving指存储阵列的交叉存取参数,必须为2的整数幂,用于定义在一个存储芯片上,两个字节连续媒体的地址差异;socket是指向FLSocket结构的指针,这个FLSocket结构含有指向socket 层函数的指针和数据。当注册socket驱动时,该FLSocket结构中涉及的函数将被安装。

map是指向flash映射函数的指针,该函数将flash映射到内存的一个区域。read是指向flash读函数的指针。write是指向 flash写函数的指针。erase是指向flash擦除函数的指针。setPowerOnCallback是指TFFS在flash设备上电后应当执行一个函数以便挂接该设备,setPowerOnCallback成员就是指向这个函数的指针,许多flash存储设备不需要此函数。

在MTD驱动中最重要的两个函数是write和erase。write的过程一般是这样的,写入前首先要对扇区解锁,如果是进行改写,需要把待改写扇区的数据读出来,修改相应的部分,然后擦除扇区,接着再写入写命令,写入数据;如果是写入空扇区,直接写命令、写数据就可以了,最后判断数据是否写完。为了确保写入成功,写完数据后要进行数据的比较。对flash的erase操作是按照扇区进行的,擦除前首先要对扇区解锁,然后写入擦除建立和扇区擦除命令,擦除成功后,内容应为0xFFFF。为了确保擦除成功,擦完后也要进行数据比较。

当VxWorks内核支持TFFS文件系统,在启动时,usrRoot()函数将会调用tffsdev()进行TFFS设备初始化,调用tffsdev()的目的是注册套接组件驱动程序。

在使用TFFS之前首先要调用tffsdevcreate()创建此设备,经过一系列的调用,最后运行flidentifyflash(),这个函数按照 sysTffs.c中宏所指定的flash,调用识别函数i28fj3aMtdIdentify()进行识别,来确认究竟是那种flash接入了系统,并向FLFLash数据结构注册MTD驱动中的读、写、擦除、映射等flash操作函数。

3 TFFS操作方法

在使用TFFS前,要用shell命令tffsDevFormat对flash设备进行格式化,并用usrTffsConfig命令把flash设备挂接上DOS设备名,接着就可以用此设备名对flash设备进行操作了。支持的命令包括:ls,copy,remove等常用命令。

还可以通过修改DEFAULT_BOOT_LINE中的参数,将TFFS作为一个启动设备。将boot device改为tffs=0,0 ,将file name 改为/tffs0/VxWroks,就可以把系统启动起来了。

四 结论

在基于VxWorks的嵌入式系统中支持TrueFFS文件系统,可以将VxWorks操作系统映像、应用程序、系统配置等以文件的形式存放到flash 上,与系统的引导程序bootrom分开。这样可以支持用户的在线升级,当应用程序和系统配置需要更新时,直接以文件的形式拷贝到flash中就可以了,非常方便。当然,支持TrueFFS文件系统是有少量存储空间的开销,但这和使用TrueFFS文件系统所获得的好处相比是微乎其微的。本文作者的创新点是为新推出的Intel StrataFlash系列flash编写了驱动程序,并在其上构建了TrueFFS文件系统。

参考文献

[1] VxWorks5.5Programmer’sGuide. WindRiver Systems,Inc

[2] Intel StrataFlash Memory(J3) Datasheet. Intel Corporation

[3] 王明飞,张效义,李鸥,邢明. VxWorks下MPC860的中断处理机制及其应用. 微计算机信息,2005,3:1~2页

[4] 李方敏. 《VxWorks高级程序设计》. 清华大学出版社. 2004.5

[5] 陈智育,温彦军,陈琪. 《VxWorks程序开发实践》. 人民邮电出版社. 2004.5

1 2

关键词: 实时操作系统 VxWorks TFFS 文件系统

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版