用NOR Flash建立VxWorks TrueFFS文件系统

2012-09-25 02:59邵富杰徐云宽
单片机与嵌入式系统应用 2012年4期
关键词:格式化驱动程序扇区

邵富杰,徐云宽

(北京跟踪与通信技术研究所 100094)

引 言

VxWorks是美国Wind River公司于1983年开发的高模块化、高性能的32位嵌入式实时多任务操作系统,以其良好的可靠性和卓越的实时性而被广泛应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如弹道制导、飞机导航等[1]。

Flash作为一种非易失性的固态存储设备,具有可靠性高、体积小、功耗低等特点,非常适合移动设备、手持设备和嵌入式设备使用。NOR Flash和NAND Flash是现在市场上两种主要的非易失闪存技术,SST39VF1601是一种存储容量为2MB的NOR Flash,应用程序可以直接在芯片内部运行,不必再把代码读到系统RAM中。NOR的传输效率很高,在嵌入式系统中得到广泛的应用。

1 VxWorks TrueFFS文件系统结构

TrueFFS文件系统是VxWorks集成开发环境Tornado提供的一个可选模块,它为种类繁多的Flash存储设备提供了统一的块设备接口,并且具有可重入、线程安全的特点,支持大多数流行的CPU构架。TrueFFS文件为用户屏蔽了底层物理存储设备的差别,应用程序对Flash存储设备的读写可以像对拥有MS-DOS文件系统的磁碟设备的操作一样。TrueFFS文件系统由4个层次组成:核心层、翻译层、MTD层和Socket层,TrueFFS文件系统结构如图1所示。

图1 TrueFFS文件系统结构

核心层:连接其他几个功能层,同时也进行碎片回收及定时器和其他系统资源的维护。该层以二进制形式提供。

翻译层:主要实现TrueFFS与DOSFS之间的高级交互功能,也包含控制Flash映射到块、碎片回收和数据完整性所需的智能化处理功能。该层以二进制形式提供。

MTD层:实现对底层Flash的地址映射、读、写、擦除和ID识别等操作,并设置与Flash密切相关的一些参数。该层以二进制和源码形式提供。

Socket层:提供TrueFFS与板卡硬件之间的接口服务,提供板卡规范的硬件访问例程,并且负责电源管理、卡检测、窗口管理和Socket注册。该层以源码形式提供[2]。

2 SST39VF1601上建立TrueFFS文件系统

在SST39VF1601上建立VxWorks TrueFFS文件系统需要完成以下3部分工作:

◆配置完整的DOS文件系统支持;

◆包含核心TrueFFS组件;

◆为翻译层、MTD层和Socket层各提供一个可用的软件模块。

DOS文件系统、核心TrueFFS组件和翻译层可以通过配置集成开发环境Tornado安装目录target\config\bspname\下的config.h文件实现,MTD层和Socket层需要编写驱动程序实现[2]。

2.1 配置TrueFFS文件系统

若没有VxWorks兼容的 MS-DOS文件系统,True-FFS文件系统的配置是没有意义的,因此DOS文件系统及其相关组件都要被包含在TrueFFS文件系统中。另外,还有一些非必需的文件系统的其他组件,可以增加文件系统基本功能的支持(如ls、cd、copy等命令),也需要添加进来。在config.h文件中配置TrueFFS文件系统如下:

定义INCLUDE_TFFS后,VxWorks系统启动时的初始化代码会调用tffsDrv()来创建和管理TrueFFS所需的结构和全局变量,并为所有挂接了的Flash设备注册Socket组件驱动。链接时,通过解析与tffsDrv()相关联的符号可以将TrueFFS所必需的软件模块连接到Vx-Works映像中。

2.2 MTD层实现

MTD层软件为TrueFFS文件系统提供了底层Flash的地址映射、读、写、擦除和ID识别等操作的函数。所有MTD层软件必须包含3个函数:写数据函数、擦除扇区(块)函数和ID识别函数。

在BSP目录下创建SST39VF1601的MTD层驱动程序文件SST39VF1601.c,并为该驱动程序文件编写以下函数:

①Flash ID识别函数sst39vf1601Identify()。该函数通过读取Flash的ID号,判断底层Flash设备是否适合本MTD层驱动,并为用于底层操作的Flash数据结构vol注册成员函数和成员变量。其中注册的成员函数有地址映射函数、写数据函数和扇区(块)擦除函数,注册变量有Flash存储器的类型type、Flash存储器的大小、平分数据总线的Flash芯片个数interleaving、构建Flash文件系统的Flash芯片个数noOfChips、擦除块的大小erasable-BlockSize等。

②Flash地址映射函数sst39vf1601Map(),用于实现系统地址到Flash地址的转换。

③Flash扇区(块)擦除函数sst39vf1601Erase(),用于擦除Flash的一个块或扇区,擦除大小应与erasable-BlockSize一致,在sst39vf1601Identify()函数中定义erasableBlockSize为4KB,因此sst39vf1601Erase()一次可擦除4KB的扇区。

④Flash写数据函数sst39vf1601Write(),向指定的Flash地址处写一段数据。由于SST39VF1601位宽为16位,因此被写入数据的地址必须半字对齐。

⑤编程结束检测函数doneDetect(),检测擦除、写入操作是否结束,调用Flash擦除函数和写入函数后必须调用该函数,检测当前操作是否结束,是否可以再次进行读、写和擦除操作。

MTD层驱动程序编写完成后,还应向Socket层注册MTD层驱动程序,过程如下。

①配置tffsConfig.c文件。将Tornado安装目录target\src\drv\tffs下的tffsConfig.c文件拷贝至 BSP目录下,在函数声明中添加:

②添加MTD模块至BSP。打开BSP目录下的Makefile文件,设置添加:MACH_EXTRA=sst39vf1601.o ftpdLib.o…

即把SST39VF1601的MTD层驱动程序添加到目标代码中,连同内核模块一起编译。

2.3 Socket层实现

Socket层提供了TrueFFS与板卡硬件之间的接口服务,由systffs.c文件实现。系统在Tornado安装目录target\config\comps\src下提供了一个原始systffs.c文件,可以将此文件拷贝到自己的BSP目录下进行修改,来实现Socket层驱动。systffs.c文件的修改有以下几个关键点:

◆sysTffsInit()函数,完成TrueFFS文件系统的初始化,并调用注册函数rfaRegister();

◆rfaRegister()函数,负责注册Socket结构的各个成员函数;

◆被rfaRegister()函数注册的各个成员函数;

◆设备硬件相关的宏定义。

在系统提供的原始文件systffs.c中,定义了所有必需的函数。设计在一片NOR Flash SST39VF1601上建立TrueFFS文件系统的情况下,原始sysTffsInit()函数和各个被注册函数可以完成TrueFFS文件系统的初始化、Socket层的管理,因此也不需要更改。该文件中需要重新定义与硬件相关的宏:

需要注意的是,硬件设计中SST39VF1601的起始地址是从0x00000000开始的,之所以定义FLASH_BASE_ADRS为0x00080000,是因为SST39VF1601的前0.5MB用于存储VxWorks的BootRom,在调用TrueFFS文件系统格式化函数tffsDevFormat()时不应将该部分格式化。

3 挂接VxWorks DOS文件系统

包含TrueFFS文件系统的VxWorks映像在目标机上运行时,必须在TrueFFS的Flash驱动上挂接Vx-Works DOS文件系统后,TrueFFS文件系统才真正能够使用,VxWorks DOS文件系统挂接过程如图2所示。

VxWorks DOS文件系统的挂接过程如下。

(1)格式化Flash设备

在Flash设备上首次建立TrueFFS文件系统时,应该调用TrueFFS文件系统格式化函数tffsDevFormat()格式化Flash设备,该函数原型如下:

图2 VxWorks DOS文件系统挂接过程

tffsDriveNo为TrueFFS设备驱动号,此处只构建一个TrueFFS设备,因此设置为0;arg为格式化参数结构tffsDevFormatParams的地址,此处为0,表示使用target\h\tffs目录下头文件tffsDev.h中定义的TrueFFS标准格式化参数TFFS_STD_FORMAT_PARAMS,即从地址为Flash_BASE_ADRS处开始,格式化大小为FLASH_SIZE的空间,若NOR Flash支持则格式化为FAT格式;函数调用返回状态STATUS,格式化成功为OK,否则为ERROR。

(2)配置TrueFFS文件系统

格式化Flash设备后,就可以调用usrTffsConfig()挂接VxWorks DOS文件系统,该函数原型如下:STATUS usrTffsConfig (int drive,int removable,char *fileName);

drive为TrueFFS设备驱动号,此处只构建一个TrueFFS设备,因此设置为0;removable为Flash存储介质是否可移除标记,0表示不可移除,1表示可以移除,此处为0;fileName为文件系统挂接点的名字,此处使用“/tffs0/”;函数调用返回状态 STATUS,格式化成功为OK,否则为ERROR。

(3)测试TrueFFS文件系统

配置TrueFFS文件系统后,可调用devs函数,显示系统中挂接的所有设备,若出现设备“/tffs0/”,则表示True-FFS文件系统挂接成功。此时调用VxWorks DOS命令chdir(“/tffs0/”),将当前目录切换到 TrueFFS文件系统挂接点/tffs0/,调用VxWorks DOS命令ls显示当前目录下所有文件。可用FTP客户端登陆目标机,可上传、下载文件,如图3所示。 28

图3 使用FTP上传、下载文件

结 语

本文以VxWorks实时多任务操作系统为基础,详细描述了在嵌入式系统中常用的NOR Flash存储器上建立TrueFFS文件系统的方法。TrueFFS文件系统建立后,可以很方便地更新系统程序、存取设备数据,有效地提高了嵌入式设备的可维护性和易用性。

[1]李忠民,杨刚,顾亦然,等.ARM嵌入式VxWorks实践教程[M].北京:北京航空航天大学出版社,2006:6-7.

[2]Wind River.VxWorks Programmer's Guide 5.5,2002:295-297,300-301.

猜你喜欢
格式化驱动程序扇区
分阶段调整增加扇区通行能力策略
现代人守则:昏死之前请把手机格式化
计算机硬件设备驱动程序分析
U盘故障排除经验谈
格式化
基于贝叶斯估计的短时空域扇区交通流量预测
重建分区表与FAT32_DBR研究与实现
基于MPC8280的CPU单元与内部总线驱动程序设计
电脑硬盘格式化知识点滴