基于TFFS的成像声呐文件系统设计
1 VxWorks系统的启动流程
嵌入式VxWorks操作系统的启动包括两个阶段,一是BootRom引导,二是VxWorks操作系统映像的启动。BootRom映像也叫做启动映像,它主要是初始化串口、网口等很少的硬件系统来下载VxWorks映像。VxWorks映像包含完整的VxWorks OS,是真正在目标板上运行的操作系统。它启动后会重新初始化几乎所有的硬件系统,这样操作系统才可以在目标板上正常运行。两种映像的区别如表 1所示。
VxWorks内核有多种启动流程。本文基于的声呐原型机采用了最常见的一种启动方法,将BootRom映像存放在Flash中,负责初始化一些简单的硬件如网口、串口等,然后下载VxWorks映像到RAM中并将控制权交由操作系统开始执行。VxWorks映像存放在干端主机上,通过网络加载到目标机中,启动时还需要打开FTP进行配置。图 1所示为基于网络加载的VxWorks启动方式。此种启动方法比较繁琐,而且需要网络的支持,启动速度也比较慢。
产品定型之后,BootRom映像和VxWorks映像不再需要进行修改,本文建立基于Flash的文件系统,将VxWorks映像拷贝到文件系统中,通过Flash文件系统加载VxWorks映像,不需要网络和FTP软件的支持,提高了启动速度。基于Flash文件系统的加载的VxWorks启动方式如图 2所示。
2 Flash文件系统
2.1 文件系统比较与选择
文件系统的选择与存储设备的物理特性和系统的要求密切相关。I/O系统、文件系统和块设备之间的联系如图 3所示。
dosFs文件系统是一种与MS_DOS文件系统相兼容的文件系统,具有能够满足实时应用的多种要求;支持可扩展的目录结构;支持使用连续文件;支持存储盘缓存,提高数据读写效率的特点。
TrueFFS(简称TFFS)旨在提高闪存的使用效率。它具有线程安全、可重入的特点,忽略了底层存储介质的不同,使得用户可以像操作磁质设备一样操作存储介质。通过wear-leveling技术、磨损均衡及碎片回收等机制平衡所有存储单元的使用频率,以此来达到延长存储介质使用寿命的目的。但是TrueFFS不能单独使用,需要DOS文件系统的支持。
因此本文选择在嵌入式VxWorks操作系统下基于Flash建立TFFS系统,在TFFS上挂载dosFs文件系统来进行I/O操作。如此一来,对Flash设备中文件和数据的读取就像对磁盘操作一样,方便快捷。
2.2 TrueFFS系统分析
VxWorks下的TFFS位于dosFs文件系统和底层硬件之间,由一个核心层和翻译层、MTD层、Socket层三个功能层组成。要在VxWorks下包含TFFS系统,每一层至少有一个软件模块与之对应。图4为TFFS结构图。
核心层(Core Layer)的主要作用是将其它三层有机结合起来,同时还控制着碎片回收、定时器和其他一些系统资源。翻译层(Translation Layer)是TrueFFS系统的核心,主要实现TrueFFS和DOS文件系统(dosFs)之间的高级交互功能。MTD(Memory Technology Drivers)层针对具体Flash存储器件,提供读、写、擦除、ID识别、映射等基本操作。Socket层(Socket Layer),又称套接层,提供TrueFFS和硬件系统之间的接口,用来向系统注册socket设备、检测设备插拔、硬件写保护等。
3 TrueFFS系统设计
3.1 功能层的实现
为了使生成的VxWorks映像支持TrueFFS系统,需要对如下文件进行配置:
config.h用来定义系统包含的配置,这使得VxWorks的初始化代码调用tffsDrv()来创建管理TrueFFS所需的结构和全局变量,并在运行MTD确认程序之前为所有挂接了的Flash设备注册socket组件驱动。在链接时,通过解析与tffsDrv()相关联的符号可以将TrueFFS所必须的软件模块链接到VxWorks映像中。
xxxMtd.c是MTD驱动文件,主要包含了针对所使用的具体Flash设备所编写的底层驱动函数,由于我们使用的Flash是SPANSION公司的S29GL512P10TFIR20芯片,Tornado或者Workbench并未提供相应的MTD驱动,需要自己编写,具体在3.2节中进行了阐述。
sysTffs.c文件将TrueFFS三个功能层链接到一起,并与VxWorks关联并决定应该包含哪个翻译层和MTD模块,本文Flash芯片采用的是NOR-based技术,包含INCLUDE_TL_FTL组件即可。
tffsConfig.c文件在mtdTable[]表中注册自己的MTD。如果你新写了一个MTD并希望TrueFFS可以识别它,就需要在此表中添加它的注册信息。
Makefile文件用来添加TrueFFS的目标文件。
3.2 MTD驱动的编写
MTD和具体的Flash存储器相关,实现读、写、擦除、映射等操作,这里我们针对S29GL512P10TFIR20芯片编写了驱动文件的入口函数、Flash映射函数、Flash擦除函数、Flash写函数。擦除和写函数是编写MTD驱动时最关键的两个函数。
MTD入口函数主要用来探测设备并识别设备ID。若返回的
VxWorks 嵌入式 TFFS Flash MTD 相关文章:
- 蓝牙无线耳机设计及VxWorks移植方法(07-21)
- 军事指挥系统中VxWorks下汉字显示技术(07-16)
- 基于VxWorks的文件系统的研究与实现(09-18)
- 嵌入式语音通信系统中VxWorks BSP的设计实现(09-18)
- 嵌入式系统的VxWorks安全性问题研究(11-06)
- VxWorks下的多重定时器设计(02-16)