<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 意得法电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=271 </link><title>基于VxWorks的文件系统的研究与实现</title><author>cinde</author><pubDate>2009-12-04 9:51:50</pubDate><description><![CDATA[<strong>1 引言</strong>
<p>　　Tornado的<a style="color: blue; text-decoration: underline" title="TrueFFS" href="http://article.ednchina.com/word/251762.aspx">TrueFFS</a>是一种与<a style="color: blue; text-decoration: underline" title="VxWorks" href="http://article.ednchina.com/word/251763.aspx">VxWorks</a>兼容的M-Systems Flite实现方式，可为种类繁多的Flash存储设备提供统一的块设备接口，并具有可重入、线程安全的特点，支持大多数流行的CPU架构。具有 TrueFFS的应用程序对Flash存储设备的读写就像对拥有MS-DOS<a style="color: blue; text-decoration: underline" title="文件系统" href="http://article.ednchina.com/word/251764.aspx">文件系统</a>的磁碟设备的操作一样。TrueFFS屏蔽下层存储介质的差异，为开发者提供统一的接口方式。TrueFFS使用一种基于动态维护表的Block-to-Flash(块对应于Flash)传输系统实现对Flash的操作，为上层程序提供接口。这里提出一种在2片Flash上建立VxWorks下的文件系统的实现方案。</p>
<p>　　<strong>2 TrueFFS文件系统结构分析</strong></p>
<p>　　TrueFFS(以下简称TFFS)由1个核心层(Core Layer)和翻译层(Translation Layer)、MTD(Memory Technology Drivers)层、Sock-et层(Socket Layer)3个功能层组成。图1为TmeFFS其结构图。</p>
<p align="center"><img border="0" hspace="0" alt="TmeFFS结构图" src="http://pagesadmin.ednchina.com/images/article/c4a27064-e7d5-4491-bbf4-e19bf5aa425d/1.jpg" width="314" height="247" /></p>
<p>　　翻译层主要实现TFFS和DOS文件系统(DOSFS)之间的高级交互功能。该层包含控制Flash映射到块、平均抹写(wear-leveling)、碎片回收和数据完整性所需的智能化处理功能。目前有3种翻译层模块，选择哪种要根据使用的Flash介质是采用NOR-based、NAND-based 或SSFDC-based技术确定闭。Socket层提供TFFS和板卡硬件(如Flash卡)的接口服务，用来向系统注册Socket设备，检测设备插拔，硬件写保护等。MTD层主要实现对具体的Flash进行读、写、擦、ID识别等操作，并设置与Flash密切相关的一些参数。TFFS已包含支持 Intel、AMD及Samsung部分Flash器件的MTD层驱动。新的器件需要新的MTD支持，可使用一个标准接口加入这些驱动。</p>
<p>　　2个对Socket驱动和MTD至关重要的结构体分别是FLFlash和FLSocket。TFFS使用FLFlash结构体存储数据和函数指针，这些函数用于管理Flash设备。比如TFFS使用MTD函数处理对Flash的基本读写操作，而FLFlash结构体则包含这些MTD函数指针。当运行一个 MTD识别程序时，系统就安装了这些函数指针。FLFlash结构体还包含一个指向FISocket结构体的指针。TFFS使用这些FLSocket结构体来存储数据和函数指针，而这些函数是用于处理与Flash设备的硬件接口，即Socket接口。</p>
<p>　　用TFFS注册Socket驱动：在VxWorks中包含TFFS将使usrRoot()调用TFFSDrv()，而这将发起一个函数调用链，如图2所示。</p>
<p align="center"><img border="0" hspace="0" alt="注册网络接口驱动组件" src="http://pagesadmin.ednchina.com/images/article/c4a27064-e7d5-4491-bbf4-e19bf5aa425d/2.jpg" width="361" height="319" /></p>
<p align="center"><img border="0" hspace="0" alt="设备创建函数调用" src="http://pagesadmin.ednchina.com/images/article/c4a27064-e7d5-4491-bbf4-e19bf5aa425d/3.jpg" width="351" height="322" /></p>
<p>　　调用这些函数的目的之一就是用TFFS注册Socket驱动函数。多数情况下，注册工作都发生在xxxRegister()(该函数在sysTFFS．c 中定义)中。该函数可更新FLSocket结构体，同时，TFFS已对应Socket驱动中的服务程序给FLSocket结构体赋予一个设备号即卷标。 TFFs调用FLSocket结构体中引用的函数来处理与Flash设备的硬件接口。</p>
<p>　　给Flash确定一个MTD：要创建TFFS块设备，必须调用TFFSDevCreate()。这一调用也将发起一个函数调用链，调用这些函数的目的之一是确认合适的MTD。该确认过程在flIdentifyFlash()巾。flIdentifyFlash()通过逐个执行xxxldentify()表中的程序确定合适的MTD，相同的MTD可在多个不同的Flash卷标中同时有效。一旦找到合适的MTD，确认程序就更新FLFlash结构体中的数据及指向用于读、写、擦除、映射等操作的MTD程序指针。此外，确认过程还将完成在当前FLFlash结构体中涉及的FLSocket结构体的初始化。 TFFS最多可处理5个TFFS块设备。TFFS为每个FLFlash结构体和FLSocket结构体都分配一个可能存在的Flash设备。当使用 TFFS注册Socket驱动时，系统也同时初始化这些结构体。多数情况下，注册也将更新FLFlash中Socket成员中涉及的FLSocket结构体，而FLFlash结构体的初始化通过运行一个MTD确认程序完成。因为确认程序依赖于FLSocket结构体中所涉及的函数，所以必须在运行MTD确认程序之前安装好Socket驱动。</p>
<p>　　<strong>3 TFFS文件系统的建立</strong></p>
<p>　　以NOR Flash AM29LV160TE为例，在2片Flash上建立TFFS文件系统，每个Flash的大小为2 MB，选择第1片的前1 MB用于存放bootrom，后面的3 MB用作存放VxWorks映像和应用程序，开发工具采用Tornado2．2 for PPC。 <strong>3．1 </strong><a style="color: blue; text-decoration: underline" title="VxWorks" href="http://article.ednchina.com/word/251763.aspx"><strong>VxWorks</strong></a><strong>映像的配置</strong></p>
<p>　　(1)在VxWorks映像中包含<a style="color: blue; text-decoration: underline" title="TrueFFS" href="http://article.ednchina.com/word/251762.aspx">TrueFFS</a><a style="color: blue; text-decoration: underline" title="文件系统" href="http://article.ednchina.com/word/251764.aspx">文件系统</a>。首先在config．h文件中定义：</p>
<p align="center"><img border="0" hspace="0" alt="程序" src="http://pagesadmin.ednchina.com/images/article/c4a27064-e7d5-4491-bbf4-e19bf5aa425d/01.jpg" width="371" height="118" /></p>
<p>　　Tornado开发环境利用config．h中的预编译语句实现映像中组件的添加。第1句定义使VxWorks在系统初始化时调用TFFSDrv()创建注册TrueFFS所必需的结构和全局变量，并为其上挂接的两个Flash设备注册Socket组件驱动。第2句则配置TFFSShow()和 TFFSShowAll()两段显示程序，可在系统正常启动后检测所注册的Flash。第3句包含与VxWorks所兼容的文件系统MS-DOS，用于包含一些可在Shell中操作的命令。</p>
<p>　　(2)为支持TFFS，在所建的BSP目录下必须包含1个sysTffs．c文件，该文件可从Tornado的安装目录下找一个较相近的文件复制到所建立的BSP目录下，然后作如下修改：</p>
<p align="center"><img border="0" hspace="0" alt="程序" src="http://pagesadmin.ednchina.com/images/article/c4a27064-e7d5-4491-bbf4-e19bf5aa425d/02.jpg" width="441" height="294" /></p>
<p>　　因为所选的2片Flash不在连续的空间，所以还需在sysTffsInit()函数中增加一个Socket注册。</p>
<p>　　文件将TFFS的所有功能层链接到一起并与VxWorks绑定，其他无关的MTD driver包含头均可去掉。</p>
<p>　　(3)系统用的开发板是基于PPC860的处理器。由于器件实现了虚拟内存管理，所以需要编辑sysLib．C中的sysPhys-MemDesc[]数组，将文件中Flash基地址和大小加入到MMU中，即将上面用到的地址空间映射加入内存管理单元，以供后续访问Flash，否则访问Flash失败。</p>
<p>　　(4)修改TFFSConfig．c文件。为便于管理，通常将src／drv／TFFS／目录下该文件拷贝到BSP目录下，然后再修改。在MTDidentifyRoutine mtdTable[]表中加入如下代码：</p>
<p align="center"><img border="0" hspace="0" alt="程序" src="http://pagesadmin.ednchina.com/images/article/c4a27064-e7d5-4491-bbf4-e19bf5aa425d/03.jpg" width="446" height="513" /></p>
<p align="center"><img border="0" hspace="0" alt="程序" src="http://pagesadmin.ednchina.com/images/article/c4a27064-e7d5-4491-bbf4-e19bf5aa425d/04.jpg" width="397" height="96" /></p>
<p>　　(6)在所建立的BSP目录中加入建立FTP服务器所需的头文件和源文件。</p>
<p>　　(7)将Flash相关的MTD驱动和FTP服务器加入到make-file中，即：MACH_EXTRA=mx29lvMtd．o FTPlib．o</p>
<p>　<strong>　3．2 VxWorks映像的加载</strong></p>
<p>　　(1)在Shell上用TFFSShow验证mx29lvMtdIdentiy：</p>
<p align="center"><img border="0" hspace="0" alt="程序" src="http://pagesadmin.ednchina.com/images/article/c4a27064-e7d5-4491-bbf4-e19bf5aa425d/05.jpg" width="452" height="132" /></p>
<p align="center"><img border="0" hspace="0" alt="程序" src="http://pagesadmin.ednchina.com/images/article/c4a27064-e7d5-4491-bbf4-e19bf5aa425d/06.jpg" width="437" height="789" /></p>
<p align="center"><img border="0" hspace="0" alt="程序" src="http://pagesadmin.ednchina.com/images/article/c4a27064-e7d5-4491-bbf4-e19bf5aa425d/07.jpg" width="452" height="132" /></p>
<p align="center"><img border="0" hspace="0" alt="程序" src="http://pagesadmin.ednchina.com/images/article/c4a27064-e7d5-4491-bbf4-e19bf5aa425d/08.jpg" width="439" height="166" /></p>
<p align="center"><img border="0" hspace="0" alt="程序" src="http://pagesadmin.ednchina.com/images/article/c4a27064-e7d5-4491-bbf4-e19bf5aa425d/09.jpg" width="435" height="819" /></p>
<p>　　至此引导完成。Flash整个TFFS文件系统成功建立。</p>
<p>　　<strong>4 结束语</strong></p>
<p>　　VxWorks下的TFFS文件系统方便VxWorks映像和应用程序存储到Flash，这有利于开发者和用户更新应用程序而无需重新烧写booTRom，加快程序开发进程。系统中所用的2片Flash扩展了文件系统的可使用空间，所实现的系统也包括fTP服务器，通过 FTP客户端软件升级系统。可在MICETEK的MPC860开发板上实现系统，因此，表明该系统具有稳定性好、可靠性高的特点。</p>
<!-- 2009/10/10 14:27:14-->]]></description></item></channel></rss>