tffs文件系统:嵌入式操作系统VxWorks中TFFS文件系统的构建


来源:21IC中国电子网  作者:771所加固机工程部 蔡本华 高文炜

摘要:目前嵌入式系统多使用FLASH作为主存因此如何有效管理FLASH上数据非常重要文章以MX29LV160BT芯片为例讨论了在VxWorks操作系统下Nor Flash上建立TFFS文件系统般步骤从而为FLASH上数据管理提供了理想选择方式同时也为开发者和用户升级提供了方便 

关键词:VxWorks  Flash  MTD  TFFS   文件系统 

嵌入式系统正随着Internet发展而在各个领域得到广泛应用作为个优秀操作系统VxWorks实现了比其他实时操作系统更好有效性、商用性、可裁减性以及互操作性广泛应用在通信、军事、航空、航天等高精尖技术及实时性要求极高领域中如卫星通讯、军事演习、弹道制导、飞机导航等 

如今越来越多嵌入式操作系统中通常都使用FLASH作为主存介质许多开发者和用户为了方便以后升级用户通常在FLASH上建立TFFS文件系统建立文件系统后我们就可以象在windows操作系统下对硬盘操作进行数据拷贝、删除以及文件建立等操作 

NOR和NAND是现在市场上两种主要非易失闪存技术Intel于1988年首先开发出NOR flash技术彻底改变了原先有EPROM和EEPROM统天下局面NOR特点是芯片内执行XIP execute In Place这样应用可以直接在flash闪存内运行不必再把代码读到系统RAM中NOR传输效率很高在1~4MB小容量时具有很高成本效益因此在嵌入式系统得到广泛应用 

、    TFFS文件系统结构简介 

TornadoTrueFFS是和VxWorks兼容种M-s Flite实现方式版本为2.0它为种类繁多flash存储设备提供了统块设备接口并且具有可重入、线程安全特点支持大多数流行CPU构架有了TornadoTrueFFS应用对flash存储设备读写就好象它们对拥有MS-DOS文件系统磁碟设备操作 
如图1所示TrueFFS由核心层(core layer)和三个功能层翻译层(translation layer)MTD层(MTD layer)层( layer)组成 


 [ 相关贴图 ]

核心层(Core layer):核心层主要起相互连接其他几层功能同时它也可以进行碎片回收、定时器和其他系统资源维护通常WindRiver公司将这部分内容以二进制文件提供 

翻译层主要实现TrueFFS和dosFs之间高级交互功能它也包含了控制flash映射到块、wear-leveling、碎片回收和数据完整性所需智能化处理功能目前有三种不同翻译层模块可供选择选择哪种层要看你所用flash介质是采用NOR-based, 还是NAND-based, 或者SSFDC-based技术而定 

  Socket层则是提供TrueFFS和板卡硬件(如flash卡)接口服务其名字来源于用户可以插入flash卡物理插槽用来向系统注册设备检测设备拔插硬件写保护等后面将详细讲解它功能 

  MTD层(Memory Technology Drivers)功能主要是实现对具体flash进行读、写、擦、ID识别等驱动并设置与flash密切相关些参数TrueFFS已经包含了支持Intel,AMD以及samsung部分flash芯片MTD层驱动芯片需要新MTD支持你可以使用个标准接口来加入这些驱动 

  以上四部分我们通常要工作就是后两层 

  当在VxWorks下配置TrueFFS时你必须为每层至少包含个软件模块后面我们将详细讨论 

二、    MX29LV160BT芯片上建立TrueFFS文件系统 

1、配置相关文件 

在此我以Nor Flash MX29LV160BT为例开发工具为Tornado2.2 for PPC要在VxWorks映像中包含TrueFFS文件系统首先必须在config.h文件中定义INCLUDE_TFFS这使得VxWorks化代码tffsDrv来创建管理TrueFFS所需结构和全局变量并为所有挂接了flash设备注册组件驱动在链接时候通过解析与tffsDrv相关联符号(symbols)可以将TrueFFS所必需软件模块链接到VxWorks映象中 

为了支持TrueFFS个BSP目录下都必须包含个sysTffs.c文件它将TrueFFS所有层(翻译层层和MTD层)链接到起并和VxWorks绑定因此我必须编辑这个文件并决定哪种MTD和翻译层模块应该包含到TrueFFS中即: 

# INCLUDE_MTD_MX29LV           /* MX29LV160BT MTD driver */ 
# INCLUDE_TL_FTL                  /* FTL translation layer */ 
#    FLASH_BASE_ADRS        0x2a10000 /* Flash memory base address */ 
#undef FLASH_SIZE 
#    FLASH_SIZE        0x001f0000    /*Flash memory size,2M(parameter block) */ 

其他无关MTD driver包含头都#undef掉同时定义Flash在系统中基地址和大小另外还必须编辑sysLib.c中sysPhysMemDesc[ ]将Flash基地址和大小加入到MMU中以供将来访问Flash否则访问Flash会失败如果BSP目录下没有sysTffs.c文件那么我们可以从其他BSP目录下拷贝个即可然后做上述修改其他内容基本可以不用修改 

接下来需要修改tffsConfig.c文件为了方便管理通常我们将src/drv/tffs/目录下该文件拷贝到我们BSP目录下然后再做出修改在MTDidentyRoutine mtdTable表中加入如下语句: 

#def  INCLUDE_MTD_MX29LV 
    mx29lvMTDIdenty, 
#end  /* INCLUDE_MTD_MX29LV */ 
并在该文件开头声明 
#def  INCLUDE_MTD_MX29LV 
FLStatus  mx29lvMTDIdenty (FLFlash vol); 
#end   /* INCLUDE_MTD_MX29LV */ 
最后就是将我们flash相关MTD驱动加入到makefile中即: 
MACH_EXTRA   = mx29lvMtd.o 
为了方便我们调试MTD驱动应该在重新编译VxWorks映象前将诸如格式化flash、创建TrueFFS块设备、绑定此块设备到dosFs所必要功能包含到VxWorks映像中比如如下定义: 
#  INCLUDE_TFFS 
#def INCLUDE_TFFS 
# INCLUDE_TFFS_DOSFS 
# INCLUDE_TFFS_SHOW 
# INCLUDE_DOSFS        /* dosFs file system */ 
# INCLUDE_SHOW_ROUTINES    /* show routines for system facilities*/ 
# INCLUDE_TL_FTL 
# INCLUDE_IO_SYSTEM 
# INCLUDE_DISK_UTIL 
#end /* INCLUDE_DOSFS */ 

2、MTD驱动简介 
   做了上述配置后进入VxWorks操作系统后我们在shell上利用tffsShow工具来显示flash信息TffsShow最终会MTD驱动中mx29lvMtdIdentiy( )在mx29lvMtdIdentiy ( )主要是通过读取MX29LV160BT芯片设备和厂商ID来识别它然后对FLFlash结构成员进行最主要几个参数是: 
type 
    Flash内存JEDEC ID号 

erasableBlockSize 

Flash内存擦除块大小(字节)设置这个值时应考虑到erleaving因此通常通过如下方法来设置它大小 
Vol.erasableBlockSize = MX29LV_MTD_SECTOR_SIZE * vol.erleaving; 
对于MX29LV160BTMX29LV_MTD_SECTOR_SIZE为64K字节 
chipSize 
使用来构建TrueFFS文件系统flash实际大小(字节) 
noOfChips 
使用来构建TrueFFS文件系统flash实际片数 
erleaving 
   Flash内存交叉因子(erleaving factor)即扩展数据总线设备数比如个32位数据总线上我们可以使用4片8位或2片16位设备 
map 
   指向flash内存映射(map)将flash映射到内存区 
read 
   指向flash内存在MTD驱动识别这个成员已经被化为缺省通常情况下我们不需要再化它否则还需要修改很多相关 
write 
指向flash内存这个成员必须这是我们要做个重要工作 
erase 
指向flash内存擦除这个成员必须这也是我们要做个重要工作 

针对FLFlash结构成员我们所关心两个就是写和擦除在mx29lvMtdIdentiy中必须有如下定义: 
vol.write = mx29lvWrite; 
vol.erase = mx29lvErase; 
在mx29lvWrite中主要是实现将数据写到flash中首先需要对扇区进行解锁然后写入写命令之后才能进行数据写入最后需要判断数据是否写完为了确保操作成功我们应该在写完每个数据后进行数据比较比较正确后方能进行下个数据操作 
在mx29lvErase 中主要是实现flash扇区擦除如今flash般都是按照扇区进行擦除操作在擦除操作之前也应该首先对扇区进行解锁然后写擦除建立和扇区擦除命令擦除成功后flash中内容应该是0xffff所以为了确保成功我们还是应该在擦除后进行比较比较正确后方能进入下个扇区擦除操作否则返回擦除标志 
所以对于MTD驱动调试基本上就是调试写和擦除两个在调试过程中我们可以在这两个相应位置加入打印语句来调试为了能调试这两个我们通过在shell上输入命令tffsDevFormat来格式化flashtffsDevFormat最终会mx29lvErase和mx29lvWrite如果成功就会返回0否则返回-1当然也可以tffsDevCreate来验证我们写和擦除正确性图2说明了tffsDevCreate过程 


 [ 相关贴图 ]

在shell上利用tffsShow来验证mx29lvMtdIdentiy 
è    tffsShow  
0: =RFA: type=0x2249, unitSize=0x10000, mediaSize=0x1f0000  
value = 49 = 0x31 = "1" 
说明已正确识别到MX29LV160BT设备设备号为0x2249 

三、    建立TFFS设备 
1、挂接设备名 
MTD驱动调试成功后我们就可以给flash设备挂接上dos设备名如下操作: 
格式化: 
è    tffsDevFormat  
value = 1 
è    usrTffsConfig 0,0,”/tffs0” 
value = 0 
然后通过devs来查看挂接设备名 
è    devs 
drv name                 
  0 /null                
  1 /tyCo/0              
  1 /tyCo/1              
  5 host:                
  6 /pty/rlogin.S        
  7 /pty/rlogin.M        
  3 /tffs0/              
  8 /vio                 
value = 25 = 0x19 
看到/tffs0/说明挂接设备已经成功接下来就可以利用dosFs文件系统相关命令来操作flash了ls、copy等 

2、从Flash中启动并下载VxWorks映像 
    要从flash中下载VxWorks映像首先需要把VxWorks映像拷贝到flash中在shell中操作命令为copy “VxWorks”,”/tffs0/VxWorks”然后修改config.h文件中引导行如下: 
# DEFAULT_BOOT_LINE \ 
"tffs=0,0(0,0)host:/tffs0/VxWorks h=192.168.0.153 e=192.168.0.154 u=target pw=target o=cpm" 
修改完后重新编译生成bootrom_uncmp.bin并把它烧写到flash中(注意:该flash与上面建立TFFS文件系统flash不它并没有建立文件系统)然后重新启动即可看到如下启动画面: 
boot device          : tffs=0,0 
unit number          : 0  
processor number     : 0  
host name            : host 
file name            : /tffs0/VxWorks 
inet on ethernet (e) : 192.168.0.154 
host inet (h)        : 192.168.0.153 
user (u)             : target 
ftp password (pw)    : target 
flags (f)            : 0x0  
other (o)            : cpm 
Attaching to TFFS... done. 
Loading /tffs0/VxWorks...894304 
Starting at 0x10000... 

Development  
        VxWorks version 5.5.1 
        KERNEL: WIND version 2.6 
        Copyright Wind River s, Inc., 1984-2003 
    CPU: Motorola ADS - PowerPC 860.  Processor #0. 
    Memory Size: 0x1000000.  BSP version 1.2/5. 
    WDB Comm Type: WDB_COMM_END 
                 WDB: Ready. 

到此说明引导成功flash整个TFFS文件系统就已经建立成功 

四、    结论 
VxWorks操作系统中支持TFFS文件系统我们将VxWorks映像作为文件放到flash上这就有利于开发者和用户更新应用而不需要影响bootrom直接更新VxWorks映像或者将应用直接copy到flash中然后装载到RAM中运行 

参考文献 
1  VxWorks 5.5 Programmer’s Guide. 

Tags:  嵌入式vxworks 嵌入式文件系统 vxworks文件系统 tffs文件系统

延伸阅读

最新评论

发表评论