一、 TFFS文件系统结构简介
dosFS--> core layer
translation layer
MTD layer
Socket layer --> FLASH memory
图 1. tffs 结构层布局
核心层(Core layer):核心层主要起相互连接其他几层的功能。同时它也可以进行碎片回收、定时器和其他系统资源的维护。通常WindRiver公司将这部分内容以二进制文件提供。
翻译层主要实现TrueFFS和dosFs之间的高级交互功能。它也包含了控制flash映射到块、wear-leveling、碎片回收和数据完整性所需的智能化处理功能。目前有三种不同的翻译层模块可供选择。选择哪一种层要看你所用的flash介质是采用NOR-based, 还是NAND- based, 或者SSFDC-based技术而定。
Socket层则是提供TrueFFS和板卡硬件(如flash卡)的接口服务。其名字来源于用户可以插入flash卡的物理插槽。用来向系统注册socket设备,检测设备拔插,硬件写保护等。后面将详细讲解它的功能。
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设备注册socket组件驱动。在链接的时候,通过解析与tffsDrv()相关联的符号(symbols)可以将TrueFFS所必需的软件模块链接到VxWorks映象中。
为了支持TrueFFS,每一个BSP目录下都必须包含一个sysTffs.c文件。它将TrueFFS所有的层(翻译层,socket层和MTD 层)链接到一起并和VxWorks绑定。因此,我必须编辑这个文件并决定哪一种MTD和翻译层模块应该包含到TrueFFS中。即:
其他无关的MTD driver包含头都#undef掉,同时定义Flash在系统中的基地址和大小。另外,还必须编辑sysLib.c中的 sysPhysMemDesc[ ]数组,将Flash基地址和大小加入到MMU中,以供将来访问Flash,否则访问Flash会失败。如果BSP目录下没有sysTffs.c文件,那么我们可以从其他BSP目录下拷贝一个即可,然后做上述修改,其他的内容基本可以不用修改。
接下来需要修改tffsConfig.c文件,为了方便管理,通常我们将src/drv/tffs/目录下该文件拷贝到我们BSP目录下,然后再做出修改。在MTDidentifyRoutine mtdTable[]表中加入如下语句:
2、MTD驱动简介
做了上述配置后,进入VxWorks操作系统后,我们在shell上利用tffsShow工具来显示flash的信息。TffsShow函数最终会调用 MTD驱动中的mx29lvMtdIdentiy( )函数,在mx29lvMtdIdentiy ( )函数主要是通过读取MX29LV160BT芯片的设备和厂商ID来识别它,然后对FLFlash结构成员进行初始化,最主要的几个参数是:
type
Flash内存的JEDEC ID号。
erasableBlockSize
tffsDrvCreate()
|
-----> xMountVolume()
|
-----> xMount()
|
-----> xIdentifyFlash()
|
-----> aaaIdentify()
bbbIdentify()
cccIdentify()
图 2. tffsDrvCreate()函数调用
三、 建立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文件中引导行,如下:
#define 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...
Starting at 0x10000...
Development System
VxWorks version 5.5.1
KERNEL: WIND version 2.6
Copyright Wind River Systems, Inc., 1984-2003
CPU: Motorola ADS - PowerPC 860. Processor #0.
Memory Size: 0x. BSP version 1.2/5.
WDB Comm Type: WDB_COMM_END
WDB: Ready.
到此,说明引导成功。flash整个TFFS文件系统就已经建立成功。
四、 结论
VxWorks操作系统中支持TFFS文件系统,我们将VxWorks映像作为文件放到flash上,这就有利于开发者和用户更新应用程序而不需要影响bootrom,直接更新VxWorks映像或者将应用程序直接copy到flash中,然后装载到RAM中运行。
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/qdvuejs/27605.html