VxWorks文件系统、Flash的TFFS设计与实现
TQ2440VXWORKS移植手册
TQ2440 VxWorks 实验大纲 Version 1.0 TQ2440 VxWorks 实验大纲目录 第 1 章 前言.............................................................................................................................2 第 2 章 通过 BSP 来生成 VxWorks 镜像并运行...................................................................3 2.1 BSP 的安装.................................................................................................................3 2.2 生成 VxWorks 镜像...................................................................................................3 2.3 u-boot 加载 vxworks.bin ..........................................................................................11 第 3 章 Nor Flash 创建 TFFS 的实验...................................................................................13 3.1 TFFS 文件系统的初始化.........................................................................................13 3.2 TFFS 文件系统的读写测试.....................................................................................14 第 4 章 网络实验...................................................................................................................16 4.1 简单的 Ping 测试 ....................................................................................................16 4.2 简单的 http server 测试...........................................................................................17 4.3 UDP 测试程序..........................................................................................................18 4.4 TCP 测试程序 ..........................................................................................................20 第 5 章 LCD 实验..................................................................................................................23 5.1 ugldemo.....................................................................................................................23 5.2 winHello....................................................................................................................23 5.3 wexbasic....................................................................................................................24 5.4 winBall ......................................................................................................................24天嵌科技 Page 1TQ2440 VxWorks 实验大纲 Version 1.0 第 1 章 前言VxWorks 操作系统是美国 WindRiver 公司于 1983 年设计开发的一种嵌入式实时操作系 统(RTOS) ,是嵌入式开发环境的关键组成部分。
嵌入式操作系统VxWorks中TFFS文件系统的构建
嵌入式操作系统VxWorks中TFFS文件系统的构建摘要:目前的嵌入式系统多使用FLASH 作为主存,因此,如何有效管理FLASH上的数据非常重要。
文章以MX29LV160BT芯片为例,讨论了在VxWorks操作系统下NorFlash 上建立TFFS文件系统的一般步骤,从而为FLASH上的数据管理提供了理想的选择方式,同时也为开发者和用户升级程序提供了方便。
关键词:VxWorksFlashMTDTFFS文件系统嵌入式系统正随着Internet的发展而在各个领域得到广泛的应用,作为一个优秀的操作系统,VxWorks实现了比其他实时操作系统更好的有效性、商用性、可裁减性以及互操作性,广泛应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。
如今越来越多的嵌入式操作系统中,通常都使用FLASH作为主存介质。
许多开发者和用户为了方便以后升级用户程序,通常在FLASH上建立TFFS文件系统,建立文件系统后,我们就可以象在windows操作系统下对硬盘操作一样,进行数据的拷贝、删除以及文件的建立等操作。
NOR和NAND是现在市场上两种主要的非易失闪存技术。
Intel于1988年首先开发出NORflash技术,彻底改变了原先有EPROM和EEPROM一统天下的局面。
NOR的特点是芯片内执行XIPexecuteInPlace,这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。
NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,因此在嵌入式系统得到广泛的应用。
一、TFFS文件系统结构简介Tornado的TrueFFS是和VxWorks兼容的一种M-SystemsFlite实现方式,版本为。
它为种类繁多的flash存储设备提供了统一的块设备接口,并且具有可重入、线程安全的特点,支持大多数流行的CPU构架。
有了Tornado的TrueFFS,应用程序对flash存储设备的读写就好象它们对拥有MS-DOS文件系统的磁碟设备的操作一样。
TFFS
Starlight1中国电子开发网()从 TFFS 中启动 VxWorks硬件平台:星光 S3C44B0 开发板、ARM 网络仿真器 FlashICE 软件平台:Tornado2.2 for ARM、超级终端、LeapFTP、FlashICE-programmer 说明: VxWorks BSP 使用的是,中国电子开发网()星光 S3C44B0 开发板附 (1)带的 BSP(CEDN_S3C44B0X_TFFS), BSP 带有 SST39VF160 和 SST39VF1601 的 TFFS 驱 该 动。
(2) 星光 S3C44B0 开发板的第一块 Flash Memory(起始地址 0X0000-0000)用作引导设 备,第二块 Flash Memory(起始地址 0X0200-0000)用作 TFFS 设备。
(3) 特别提示,注意目标板的 FTP Server 和 Tornado2.2 自带的 FTP Server(PC FTP Server)的区别;主机 IP 和目标板 IP 的区别。
第一步,使用 CEDN_S3C44B0X_TFFS 编译 BOOTROM 第二步,在 Tornado 中编译 VxWorks在编译 VxWorks 之前,需要将添加组件 FTP Server。
Starlight1中国电子开发网()第三步,烧写 BOOTROM使 用 FlashICE-programmer 通 过 FlashICE( 可 以 使 用 其 他 的 烧 写 工 具 烧 写 ) 将 bootrom_uncmp.bin,烧写到第一块 Flash Memory。
最好将第二块 Flash Memory 也擦除,以 保证 TFFS 正常工作。
第四步,下载、启动 VxWorks配置好 Tornado2.2 自带的 FTP Server, 通过 FTP Server 将 VxWorks 下载到星光 S3C44B0 开发板(该部分的详细操作, 参考中国电子开发网发布的 《编译 VxWorks bsp 和下载 VxWorks 教学》/Soft/ShowSoft.asp?SoftID=5),下载完毕之后,VxWorks 将自动运 行。
TFFS
这个问题查了好久,是由于dos文件系统使用了长文件名选项造成。dos文件系统的选项有:
DOS_OPT_CHANGENOWARN
DOS_OPT_AUTOSYNC
DOS_OPT_LONGNAMES
DOS_OPT_EXPORT
1)调试的时候首先要确保FLASH的write和erase函数是完全正确的。
2)用sysTffsFormat(tffsDevFormat)格式化,这一步最难通过,如果这一步通过了,基本也就OK了。
3)tffsDevCreate函数创建设备,如果成功,就修改的代码主要是tffsConfig.c和sysTffs.c连个。
调试1;windows的大小不是2的n次幂。
原来的5600子卡上用了一片I28F128flash,共16M,划出第一个block共128K用来保存bootline,这样实际用做tffs的只有
(16M-128K)大小了,于是用这个值来标识chipSize和WindowsSize。这样调试时用sysTffsFormat格式化的时候,一些分区信 息都写入flash了,但到最后总是返回错误,也不能创建设备。后来设windowsSize=16M,chipSize=(16M-128k),再格式化就好了,也能创建设备了。
DOS_OPT_LOWERCASE
要合理使用这些选项。
TFFS的英文原意是True Flash File System。是M-system的一个产品。作为vxWorks的一个插件,实现时是分3层实现的。我们一般只要负责最底层MTD(Memory technology driver)层就可以了。MTD的上层FTL层只要MTD层提供3个标准函数即:read,write,erase就可以了。如果要包含TFFS文件系统只要定义INCLUDE_TFFS和INCLUDE_DOSFS(or INCLUDE_DOSFS2)这两个宏就可以了。系统会自动包含src/config/usrTffs.c和src\drv\tffs\sockets\systffs。c,src\drv\tffs\tffsConfig.c但一般的做法是把sysTffs。c和tffsConfig。c放到BSP目录下取消usrExtra对sysTffs。c的自动包含,在makefile的MACH_EXTRA里加入。
嵌入式PowerPC上的TFFS文件系统的建立
嵌入式PowerPC上的TFFS文件系统的建立
陈留国
【期刊名称】《电子制作》
【年(卷),期】2015(0)4
【摘要】本文主要介绍了TFFS文件系统结构,并以I28F128为例介绍在嵌入式
操作系统VxWorks上建立TFFS文件系统步骤和VxWorks镜像加载的具体方法。
【总页数】2页(P88-89)
【作者】陈留国
【作者单位】中国电子科技集团公司第三十八研究所安徽合肥 230088
【正文语种】中文
【相关文献】
1.嵌入式文件系统及jffs2文件系统在Flash上的实现 [J], 刘金梅;张振东;路全;杨
建华
2.嵌入式Linux系统在PowerPC上的实现 [J], 叶梅;赵京伟;初元萍
3.嵌入式操作系统VxWorks的TFFS文件系统的实现 [J], 吴楠;郭政慧
4.嵌入式操作系统VxWorks的TFFS文件系统的实现 [J], 吴楠;郭政慧
5.如何建立嵌入式操作系统的Flash文件系统 [J], 魏大木
因版权原因,仅展示原文概要,查看原文内容请购买。
在NAND FLASH上建立TFFS文件系统小结
在NAND FLASH上建立TFFS文件系统小结by minuetfrom EDW经过一个星期的摸索,终于在NAND FLASH上建立了TFFS文件系统,今天拿出来和大家分享一下!相信大家对NAND FLASH的特点和与NOR FLASH的区别都有所了解,有关这方面的文章坛子里有,我就不在赘述了。
下面我以三星的K9F6408U0C为例(它是8M x 8 Bit NAND Flash Memory),详细说明建立过程。
环境:tornado2.0 for arm一、硬件连接主要是CLE和ALE的连接,可以用I/O口控制,也可以直接与地址线相连。
我选择后者,因为这种方*既方便,访问速度也比I/O口控制快。
我是让CLE接在A20上,ALE接在A21上。
还要注意/WP(写保护)这个脚,使其上拉。
我在工作过程中曾忽略了对它的控制(浮空),导致写保护有效,擦写都无效。
希望大家不要犯同样的错误。
/CE这个脚我是接在CPU的BANK1片选上,即界于0x1000000~0x1ffffff的16M地址都是指向此flash设备,当然我们只要选择一个地址表示即可,简单起见选0x1000000。
R//B接在CPU的一个输入I/O上,通过读此I/O判断设备是忙还是准备好。
有的片子要求在片子忙状态时,/CE要是低电平,所以建议R//B与/CE连接在一起。
综上所述,可以如此定义:#define WRITE_COMMAND(val) (*(volatile char *)0x1100000 = (char)(val)) /* CLE = A20 */#define WRITE_ADDRESS(val) (*(volatile char *)0x1200000 = (char)(val)) /* ALE = A21 */#define WRITE_DATA(val) (*(volatile char *)0x1000000 = (char)(val)) /* CE = 0 CLE = 0 ALE = 0 */#define READ_DATA(val) ((char)(val) = *(volatile char *)0x1000000) /* CE = 0 CLE = 0 ALE = 0 */#define READ_REG(val) ((int)(val) = *(volatile int *)0x60061C) /* PI3寄存器地址*/上班时间到了,先写到这。
vxWorks在线升级技术
vxWorks在线升级技术看到有很多网友询问在vxworks下如何实现在线升级,逐一答复了多次,还是没能说明白。
因此决定把自己以前实际做的过程描述一下,希望能对大家有所帮助。
如有不妥之处,请指出。
本人曾经在ppc860T, ppc850, pentium-pc104(加doc2000)的目标机上实现过。
1 首先,需要在目标机上实现文件系统,比如使用trueFFS,用dosFS初始化tffs设备。
在完成tffs驱动之后,可以调用usrTffsConfig(0,0,"/flash");如果成功,在shell下调用devs命令,应该能够看到 /flash设备。
2 板子上首先应该有bootrom,如果没有,使用仿真器写入。
3 让板子flash中的bootrom启动,通过网络加载vxworks。
更新vxworks,应该使目标机在vxworks操作系统的支撑之下。
即在运行vxworks时更新存储在flash中的vxworks映象。
该vxworks中应该包含tffs组件,并用usrTffsConfig创建一个tffs设备。
如果创建不成功,先调用sysTffsFormat格式化该设备,再创建。
这个vxworks中,应该包含下列代码(也可以启动完毕之后,通过target server动态下载):STATUS myftp(char* host, char* user, char* passwd, char* srcFile, char* desFile) { int fd, total = 0; int ctrlSock; int dataSock; char buf [1024]; int nBytes;remove ( desFile);fd=open(desFile,0x202,0); if (ERROR==fd) { return ERROR; } if (ftpXfer (host,user,passwd , "", "RETR %s",NULL, srcFile, &ctrlSock, &dataSock) == ERROR) { return (ERROR); }while ((nBytes = read (dataSock, buf, 512)) > 0) { total += nBytes; write(fd, buf, nBytes); } close(fd); close (dataSock); close (ctrlSock); if(total > 0) { return ERROR; }return OK; }各参数的含义为:char* host:主机ip地址,该主机上存放了最新的vxworks映象。
基于VxWorks的NANDFLASH驱动程序设计
基于VxWorks 的NAND FLASH 驱动程序设计张晴晖,李俊萩(西南林学院 云南昆明 650224)摘 要:目前,NAND FL ASH 技术有了飞速发展,它以能抗震动,功耗小,容量大,掉电数据不丢失等特点而成为嵌入式系统的重要组成部分。
如何合理、高效、可靠地使用NAND FL ASH 就显得尤为重要。
讨论了在基于VxWorks 的软件平台和基于AMCC 公司的PPC440epx 、三星公司的K9F2G 08Q0M 为核心的硬件平台上,实现TrueFFS 文件系统的具体办法。
以此为基础的系统在某机载设备上得到成功运用。
关键词:NAND FL ASH ;Vxworks ;TrueFFS ;PPC440epx中图分类号:TP311 文献标识码:B 文章编号:10042373X (2009)142026204Design of NAN D FLASH Driver B ased on VxWorksZHAN G Qinghui ,L I J unqiu(Southwest Forestry College ,Kunming ,650224,China )Abstract :At present ,NAND FL ASH technology is rapidly developing.Its anti 2vibration ,small power consumption ,large capacity ,power 2down data is not lost ,which make it is one important part of an embedded system.Thus ,how reasonable ,efficient and reliable use of NAND FL ASH is particularly important.This paper describes how to achieve TrueFFS file system based on the VxWorks software platform and hardware platforms consisting of AMCC ′s PPC440epx and Samsung ′s K9F2G 08Q0M.These technologies are applied on the on 2board equipment.K eywords :NAND FL ASH ;Vxworks ;TrueFFS ;PPC440epx收稿日期:20082122160 引 言目前,随着电子技术的不断发展,计算机技术也得到飞速的发展,产生了很多新技术。
vxworks的TFFS分析
Vxworks的tffs分析1.Tffs简介Vxworks的tffs位于dosfs文件系统和底层硬件中,其存在的目的是:dosfs文件系统是针对磁盘的FAT文件系统,而我们大部分嵌入式设备存储设备是flash,flash和磁盘在物理特性上差别很大;首先磁盘和flash的读写方式不一样,磁盘可以一个字节一个字节的修改,而flash在写之前必须先擦除;flash的擦除和写有次数限制(大部分flash设备是10万次);tffs的存在使得dosfs对flash操作犹如对flash操作一样,这样tffs就屏蔽了底层设备的差异。
Tffs有以下几个特性::Wear-leveing算法:此算法的目的在于均衡flash损耗,使得flash各个块的擦除和写次数平衡。
碎片回收:TrueFFS 使用一种被称为碎片回收(garbage collection)的机制来回收那些不再包含有效数据的块。
该机制从一个预擦除单元(source era se unit)内拷贝所有的有效数据块到另一个新的被称为转移单元(transfer unit)的擦除单元。
TrueFFS 然后更新block-to-flash映射表再擦除这个废旧的预擦除单元。
错误恢复:此功能使用了写后删除技术(erase after write),使得数据唯一性,不会产生中间数据。
下图是整dosfs+tffs文件系统架构:可以看到dosfs是位于tffs上层的,tffs包含三层:翻译层、MTD层和socket层。
我们增加tffs特性时需要修改MTD层和socket层。
翻译层由vxworks提供,不需要修改。
下面介绍各层的作用。
翻译层:主要实现TrueFFS和dosFs之间的高级交互功能。
它也包含了控制flash映射到块、wear-leveling、碎片回收和数据完整性所需的智能化处理功能。
MTD层:即设备驱动层,包含flash读、写、擦除、ID识别等驱动。
Socket层:用来提供tffs和板卡硬件(如flash卡)的接口服务,如果我们的flash设备是固定在板卡上的则socket比较简单,修改较少。
vxWorks文件系统详细介绍
VxWorks为块设备(磁盘)的实时使用提供了两种本地文件系统:一种与MS-DOS文件系统相兼容,另一种与RT-11文件系统相兼容。
这些文件系统的支持库分别为dosFsLib和rt11FsLib。
VxWorks还提供了一种简单的raw文件系统,这个文件系统把整个磁盘作为一个单独的大文件。
这个文件系统的支持库是rawFsLib.VxWorks还为不使用标准文件或目录结构的磁带设备提供了一个文件系统。
磁带卷被看作一个raw设备,整个卷就是一个大文件.这个文件系统的支持库是tapeFsLib。
另外,VxWorks提供了一个文件系统支持库cdromFsLib,它允许应用程序从依照ISO9660标准文件系统格式化的CD-ROMs中读取数据。
在VxWorks中,文件系统不受块设备种类型或它的驱动程序的约束.VxWorks块设备都使用一个标准接口,以便文件系统可以与设备驱动程序自由的混合。
做为选择,你可以写自己的能被驱动程序以相同方式使用的文件系统,只要在文件系统、驱动程序和I/O系统间遵循同样的标准接口。
VxWorks的I/O体系结构使得在一个VxWorks系统中可以有多样的文件系统,甚至其类型也可以不同。
块设备界面在3。
9.4块设备中讨论.1 与MS—DOS兼容的文件系统:dosFs使用dosFs文件系统格式化的磁盘与MS-DOS(直至6.2版本)磁盘是相兼容的。
由两个文件系统初始化的硬盘之间在格式上有细微区别。
然而,数据自身是兼容的,而且dosFs可被配置成使用MS—DOS格式化的磁盘。
DosFs文件系统向不同要求的实时应用程序提供了良好的适应性。
主要特点包括:l 文件和目录分等级排序,允许有效地组织,在一卷上可以创建任意数量的文件。
l 每个文件可以是连续存储或非连续存储的。
非连续存储的文件可使硬盘空间利用率更高,连续存储的文件可以增强系统性能。
l 具有与广泛可用的存储器和可恢复介质的兼容性.应用VxWorks(不使用dosFs文件扩展名)、MS—DOS PCs和其它系统创建的磁盘可以自由的交换.如果分区表被说明,那么硬盘也是兼容的。
基于VxWorks的文件系统的研究与实现
基于VxWorks的文件系统的研究与实现1 引言Tornado 的TrueFFS 是一种与VxWorks 兼容的M-Systems Flite 实现方式,可为种类繁多的Flash 存储设备提供统一的块设备接口,并具有可重入、线程安全的特点,支持大多数流行的CPU 架构。
具有TrueFFS 的应用程序对Flash 存储设备的读写就像对拥有MS-DOS 文件系统的磁碟设备的操作一样。
TrueFFS 屏蔽下层存储介质的差异,为开发者提供统一的接口方式。
TrueFFS 使用一种基于动态维护表的Block-to-Flash(块对应于Flash)传输系统实现对Flash 的操作,为上层程序提供接口。
这里提出一种在2 片Flash 上建立VxWorks 下的文件系统的实现方案。
2 TrueFFS 文件系统结构分析TrueFFS(以下简称TFFS)由1 个核心层(Core Layer)和翻译层(Translation Layer)、MTD(Memory Technology Drivers)层、Sock- et 层(Socket Layer)3 个功能层组成。
图1 为TmeFFS 其结构图。
翻译层主要实现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 层驱动。
一种基于VxWorks的内存管理封装层的设计与实现
第26卷Vol126 第2期No12西华师范大学学报(自然科学版)Journal of China W est Nor mal University(Natural Sciences)2005年6月Jun12005文章编号:100128220(2005)022*******一种基于Vx Works的内存管理封装层的设计与实现①何先波(西华师范大学计算机学院,四川南充637002)摘 要:根据特定应用领域对商用嵌入式操作系统进行封装是很有必要的.通信类产品应用程序的内存管理往往对性能与安全有特殊的要求,本文在Vx Works提供的内存管理功能的基础上给出了一种封装方案:使用块内存与堆内存两种分配与释放方式提高内存管理性能,增加调试信息;通过“加墙”或“加页”两种方式实现内存保护,使封装后的Vx Works更适合通信产品应用领域的软件开发.关键词:嵌入式操作系统;操作系统封装层;实时操作系统;内存管理;内存保护中图分类号:TP315 文献标识码:B1 前 言目前,嵌入式软件在软件业中的比重正逐渐加大,所使用的操作系统一般是嵌入式实时多任务操作系统.嵌入式系统的硬件环境多样性、硬软件紧密耦合性及严格的实时性等特点决定了所使用的操作系统不可能象UN I X,W I N DOW S等通用操作系统那样具有方方面面较强的功能.这使得针对特定领域的应用对选用的嵌入式操作系统进行再封装成为必要.所谓嵌入式操作系统的封装是指为了能缩短特定领域的嵌入式系统软件的开发周期,增强嵌入式操作系统功能和实现嵌入式程序的可移植性、可维护性和代码继承性而对所使用的特定嵌入式操作系统的再“加工”.针对许多商用实时操作系统核心部分源码的不开放性,封装层一般会对内存分配、进程调度等核心功能进行重新定义和优化,使用户能跟踪到一些比较靠近内核的东西,可提供丰富的调试手段和实时监控功能,提高关键应用的效率,从而增强和丰富嵌入式操作系统功能.图1展示了封装层在嵌入应用软件系统中的位置(图中箭头表示软件设计中的引用方向).下面基于Vx Works商用嵌入式操作系统以通讯类嵌入式设备应用领域为背景来讨论嵌入操作系统封装层内存管理模块的设计方案与实现.2 Vx Works操作系统提供的内存管理功能及不足Vx Works内存分配与释放相应功能主要通过其me mPart L ib库的me mPart Create(产生内存新的内存分区)、me mPart A ddToPool(给指定内存分区增加内存)、me mPart A ll oc(从指定内存分区中分配一定大小的内存块)、me mPartFree(释放内存给内存分区)、me mAddT oPool(给整个系统内存分区增加内存)以及mall oc、free①收稿日期:2005-02-19基金项目:国家863计划项目课题(2002AA1Z2306)作者简介:何先波(1971-),男,四川苍溪人,西华师范大学计算机学院讲师,四川大学博士研究生,主要研究方向:计算机网络与嵌入式系统. 西华师范大学学报(自然科学版) 2005年176等系统调用实现,其内存保护对硬件提供MMU支持的可通过虚拟内存管理机制实现.但是对通信类产品软件设计而言,Vx Works存在一些需完善的地方:其一,对频繁的固定大小内存的分配与释放可考虑进一步提高性能;其二,应提供统一的内存保护功能;其三,应提供内存资源使用管理情况的各种统计功能;其四,应提供更多的调试和维护信息.针对这些需求,本文给出了对Vx Works内存管理功能封装的一种方式:块内存管理与堆内存管理.3 Vx Works内存封装设计与实现方案探讨3.1 块内存管理嵌入式实时操作系统中的内存管理是保障应用实时性和可靠性的重要因素.在通信领域的应用中,内存申请往往呈现各种相同数据结构(即相同大小内存块)的大量申请现象.为了提高内存管理的实时性能和可维护性,一般采用如图2所示的块内存管理方式:每个应用程序模块保留自己所需一块较大的内存区,再将该内存区划分为若干内存池.每个内存池由若干尺寸相同的内存块(U ser B l ock下面也简称UB)组成,分配内存时,以固定大小块的方式分配给申请者,从而提高分配效率.通过Vx Works的系统调用me mPart Create可实现从系统中预留某模块所需的内存区,该区内存大小主要根据进一步需划分的内存池数及每种内存池中内存块大小及数量共同确定的.具体的划分方式主要根据大量特定应用领域程序的内存需求统计情况而定.如笔者所从事的通信产品应用领域的某模块的一种内存池划分为:(64,1200),(128,1000),(256,800),(512,500),(1024,20),(2048,10),(4096,5),(8192,2), (16384,1),其中括号中前面数字表示以字节为单位的内存块尺寸,后面数字表示该内存池中内存块总数. 3.1.1 块内存管理方案实现所需的数据结构从具体实现的数据结构组织上考虑,为了弥补Vx Works内存管理的不足,对于每种内存池及内存块,可分别用一结构类型来描述,分别称为内存池控制结构和内存块控制头(也称UB头).当然,这样必然会额外占用部分内存,但是对许多通信产品而言,软件的规模不大,性能和安全才是首要问题.内存池控制结构可包含如下一些域:对应的内存块的大小,内存块总量,空闲内存块数,用于互斥操作该结构的信号量,存放用于指向池内所有内存头的指针数组,用于实现内存块分配与释放的单循环队列(用静态链表实现,结点的信息域为指针数组的下标)及指示其队头与队尾的索引域,用于统计该内存池实际使用状况如内存块分配失败的次数、内存块释放失败的次数、重复释放内存块的次数、曾经出现的分配峰值等等.所有的内存池结构实例可用一数组来登记.同时,出于对关键数据保护的目的,管理内存池的结构数组最好与分配的内存块隔开. 第26卷第2期 何先波:一种基于Vx Works的内存管理封装层的设计与实现177 池内每个内存块可用称为内存头的数据结构来控制和描述,可包含如下一些信息:该块的内存地址(虚地址方式为加页保护后的虚拟地址,否则为分配给申请者的实际物理地址),避免重复释放用的占用标志,所属程序模块、内存池(用于提高回收速率)及一些调试信息:如实际申请的内存大小,引发申请/释放该内存块的源程序语句所在文件及行号,申请、释放发生时的时间,申请者/释放者所属的进程名等等.3.1.2 块内存的分配块内存的分配步骤为:⑴根据所申请的内存大小在对应的模块内存区中搜索到特定的内存池(为了提高查找速度,可建快速索引表).⑵通过内存池控制块的空闲内存块数的值判定该次操作是否能成功,如果没有空闲内存块,申请操作失败,并记录下相应的调试信息(之所以不考虑向块内存更大的内存池申请,主要是从性能和节省内存的角度考虑),分配操作结束.如果还有空闲内存块则找到该空闲块指针(对内存池控制结构的静态链表队列进行出队列操作,并对块控制头指针数组相应位置内容清空).⑶根据申请者等信息填写内存块控制头数据结构相应信息,并对池空闲内存块数减1.⑷将分配到的内存地址返回给申请者(该地址为块控制头内的块地址域值).3.1.3 块内存的释放块内存释放是根据内存块的控制头将其标记为自由内存块并归还给相应缓冲池的过程.由于分配时构造了内存块控制头,内存释放相对简单和高效.首先根据要释放的内存块指针找到控制头指针(块内存地址减去内存块控制头字节数,如采取下文所用的保护“墙”方式,还得减去“墙”的“厚度”),并检查该控制头中的地址域值和要释放的块地址是否相等,相等则说明是有效的释放指针,否则为无效.接着修改内存块控制头的占用标志及一些调试信息域,通过该控制头找到内存块所在的内存池,并让该池空闲内存块数加1,最后进行入队列操作(内存池控制结构的静态链表队列进行入队列操作,并对池控制结构中的块控制头指针数组相应位置内容赋该空闲块控制头地址值).3.1.4 块内存使用状况的统计有了上述的控制数据结构中的调试信息域及相应分配与释放操作,便于为上层提供较完善的调试信息,可输出以下调试信息:池号,该池内存块大小,该池内存块总量,当前空闲内存块数量,申请不到该种大小内存块的次数,该种大小内存块已释放后被重复释放的次数,该种大小内存块的最大的消耗量,以及申请/释放时间,申请/释放进程,该块的实际占用地址,申请/释放操作所在的源程序文件及行数等等.3.2 内存的保护内存保护主要有两种方式,不妨称之为“加墙”方式与“加页”方式.3.2.1 内存“加墙”方式保护原理“加墙方式”可检查内存在使用的过程中是否越界,可考虑在要保护的内存的头部或尾部(一般为尾部,因为在实际操作中对地址增加方向的操作概率要大一些,当然也可在头部和尾部同时进行)多添加一个或几个字节,并将这个字节内容置为应用中一般不会出现的特殊数值.如果在内存归还的时候,发现这个字节内容已经变了,则说明对该块内存的操作已经越界了.如果在上述内存块管理方式中使用该方式,则在释放时还要进行越界检测.3.2.2 内存“加页”保护方式该种方式与硬件支持MMU的通用操作系统的内存保护方式类似.它是在内存块或堆栈的附近(一般为尾部)加上保护页,利用MMU的页表保护机制,将该保护页的属性设置为不可写或者不可转换.一旦发生溢出,将马上会引起系统异常,从而保护了其它数据区内容不被破坏.对于使用虚地址方式内存块的保护,可这样实现:初始化时,在该内存块高端加一虚拟页,并让该块向高端靠齐.下图3用以说明这种保护方式.由图3可知,返回给用户的内存块地址是0x801FC0.若用户程序不慎操作了内存块外的地址如: 0x802100,则因为该段地址无效,立刻会报Page Fault异常.3.2.3 两种保护方式的比较“加墙”方法缺点是事先不能给予保护,只有在归还的时候才能检测到是否溢出了,而这时,相邻的数据块的信息有可能已被破坏了. 西华师范大学学报(自然科学版) 2005年178 “加页”方式,克服“加墙”方式检测的“事后性”不足,但其需要硬件支持,并且由于页表的存在对性能有所影响,并造成较大的内存浪费(要求被保护的内存页对齐),该种方式更适合较大内存块的保护.3.3 堆内存区管理块内存管理对频繁申请固定大小内存分配与释放提高了性能,但实际应用中也得考虑非定长内存分配与释放,对这种情况可用"堆内存区管理"的方式来实现.3.3.1 堆内存分配堆内存分配实际上是对原Vx Works内核内存分配函数me mPart A ll oc的一个封装,增加的调试信息附在被分配内存区的头部(不妨称为堆控制头),可包括如下一些信息:申请获得的地址,获取该内存空间的时间,申请该段内存的进程名,用户请求的内存大小,申请该段内存的操作所在的源程序文件名,行数,该段内存是否被破坏等等.要分配的实际内存大小包括调试信息头及为实现内存保护的一定字节量“保护墙”(如果采用“加墙”的内存保护方式,可采取前后都添加一定的字节空间的“前后墙”方式),因此堆分配的封装实现为:me mPart A l2 l oc(partid,用户申请内存大小+堆控制头大小+“前后墙”所占用的内存大小),实际返回给申请者的地址为me mPart A ll oc返回地址+堆控制头调试头大小+“前墙”尺寸,分配成功的同时需填写堆控制头中的相关调试统计信息.图4显示了墙厚度为8字节的堆分配情况(pBuf为申请者可用内存的起始地址):3.2.2 堆内存释放堆方式的内存释放,也是对原来Vx Works函数提供的me mPartFree(void3pB l ock)函数的一个简单封装,不过由于控制头和“保护墙”的存在,使用me mPartFree时应为me mPartFree(pB l ock-sizeof(控制头)-前墙尺寸),同时要检查该堆前后的“保护墙”有无操作溢出,并填写控制头中的相关调试统计信息,最后将要释放的指针pB l ock置为一无效值.3.3.3 堆内存调试信息查询通过利用原vx works内存分配机制及堆控制头的相关调试统计信息域可用于查询以下一些信息:申请时间、申请进程、占用地址、申请大小、申请行数、申请文件等等.3.3.4 堆使用情况统计如果要进行堆使用情况的统计,则需一用于统计所有堆分配释放情况的全局性数据结构.该结构包含诸如堆分配/释放失败的次数、曾经出现的分配峰值、当前的分配值等等,在堆的分配和释放时同时填写相应的统计域.这样,在需要时,可输出相应的统计信息. 第26卷第2期 何先波:一种基于Vx Works的内存管理封装层的设计与实现179 4 小 结基于Vx Works内存分配功能的块内存分配与堆内存分配封装方式在一定程度适应了通信产品应用领域对内存管理性能和安全的要求,实际的软件开发实践也证明了其有效性.但不同的嵌入式应用领域有不同的性能要求,如有的应用把节省内存作为首要考虑因素,本文给出的封装方式显然是不适用的.参考文献:[1] 汤子瀛,哲凤屏,汤小丹.计算机操作系统[M].西安:西安电子科技大学出版社,1996.[2] (美)WAY NE W.嵌入式计算系统设计原理[M].北京:机械工业出版社,1998.[3] JE AN J L.嵌入式系统构件[M].北京:机械工业出版社,2002.[4] KE I JRO A,ZE NG O F,J I N G DE C.A General Fra mework for Debugging[J].I EEE S oft w are,1991:14-20.[5] RUDOLPH E S.A Knowledge Based Pr ogram Debugging Syste m s[J].I EEE Soft w are,1987,20-23.[6] 何先波,钟乐海,芦冬昕.嵌入式操作系统封装层的设计与实现[J].计算机应用,2003,23(5):89-91.Desi gn and I mple ment ati on of the Encapsul ated Layeron M e mory Manage ment Based on Vx W orksHE Xian2Bo(Computer College,China W est Nor mal University,Nanchong637002,China)Abstract:Encap sulati on based on commercial e mbedded operating syste m in s pecific app licati on field is very neces2 paratively,the perf or mance and safety of me mory management in the p r ogra m design of communicati on p r oducts is es pecially i m portant.Based on me mory manage ment functi ons of Vx Works,the encap sulati on s oluti on, using bl ock me mory manage ment and heap me mory manage ment t o i m p r ove the perfor mance of all ocating and free2 ing me mory and using"adding wall"or"adding page"near all ocated me mory t o p r otect it fr om illegal writing,is p r oposed.The encap sulati on s oluti on adds more debugging infor mati on als o.W ith me mory encap sulated lay,Vx2 Works is more suitabe f or e mbedded s oft w are devel opment in co mmunicati on p r oduct app licati ons.,Key words:e mbedded operating syste m,operating syste m encap sulated layer,me mory manage ment,me mory p r o2 tecti on.。
嵌入式PowerPC上的TFFS文件系统的建立
嵌入式PowerPC上的TFFS文件系统的建立陈留国【摘要】本文主要介绍了TFFS文件系统结构,并以I28F128为例介绍在嵌入式操作系统VxWorks上建立TFFS文件系统步骤和VxWorks镜像加载的具体方法。
【期刊名称】《电子制作》【年(卷),期】2015(000)004【总页数】2页(P88-89)【关键词】TFFS;VxWorks【作者】陈留国【作者单位】中国电子科技集团公司第三十八研究所安徽合肥 230088【正文语种】中文可编程逻辑器件FPGA由于其固有的特性,兼有高性能、低功耗等特点,还可以支持多种通信协议和接口标准,其可编程功能使得它能够灵活应用于多种领域,特别是近些年发展的SOC技术,使FPGA的应用更加广泛。
VxWorks作为一种可裁减、高性能的嵌入式实时操作系统被广泛应用各种领域,而FLASH是嵌入式领域非常常见的, 基于flash构建的文件系统是嵌入式开发的一个理想选择。
本文中,主要介绍一种基于xilinx FPGA的嵌入式PowerPC上的TFFS文件系统的建立、Bootrom制作方法和VxWorks镜像加载方法。
图1是利用XC5VFX70T搭建的最小的系统的原理图。
XC5VFX70T超大规模FPGA内部总线为128位PLB总线,总线频率最高可达200MHz,可最多支持4路百/千兆网络控制以及30路串行(SI0)接口、内外存接口、和内嵌PPC440核CPU等功能。
为简化设计,对外接口我们采用1路百兆以太网,2路串口(其中一路用作调试用的终端显示),DDR2、FLASH则用做VxWorks运行的内存和外部存储设备。
电压转化模块产生FPGA、DDR2、FLASH、PHY所需的电压,时钟产生模块产生PowerPC的基本时钟100M。
FLASH采用StrataFlash系列flash,该flash是2005 年初INTEL 公司推出的在技术上有重大突破的产品, 它开创了在单个晶体管中存储两位数据的存储技术,该芯片容量为128Mbits,可设置成X16或者X8工作模式,在X16工作模式下,存储空间总共有127个Block,每个Block大小为128K,在X8工作模式下,存储空间有127个Block,每个Block大小为64K。
嵌入式操作系统VxWorks的TFFS文件系统的实现
电脑知识与技术本栏目责任编辑:谢媛媛开发研究与设计技术1引言近年来,嵌入式领域的发展日新月异,嵌入式产品也越来越多,应用越来越广泛,WindRiver公司的Vxworks操作系统是嵌入式领域比较常用的实时操作系统,它具有可裁减、易于移植的特点,在嵌入式领域广泛应用。
而FLASH是嵌入式领域很常用的一个存储芯片,基于flash构建自己的文件系统是嵌入式开发的一个理想选择。
我们在Flash上构建TFFS文件系统后,就可以方便的存储用户的应用程序。
2TFFS文件系统的组成TFFS由核心层(corelayer)和翻译层(translationlayer),MTD层(MTDlayer),SOCKET层(socketlayer)三个功能层组成。
我们在FLASH上建立文件系统后,就能象在window下操作硬盘一样,能进行拷贝,删除和建立等操作(如图1)。
图1TFFS文件系统组成图核心层(Corelayer):核心层主要起相互连接其他几层的功能。
同时它也可以进行碎片回收、定时器和其他系统资源的维护。
通常WindRiver公司将这部分内容以二进制文件提供。
翻译层主要实现TrueFFS和dosFs之间的高级交互功能。
它也包含了控制flash映射到块、wear-leveling、碎片回收和数据完整性所需的智能化处理功能。
目前有三种不同的翻译层模块可供选择。
选择哪一种层,要看你所用的flash介质是采用NOR-based,还是NAND-based,或者SSFDC-based技术而定。
Socket层则是提供TFFS和板卡硬件(如flash卡)的接口服务。
其名字来源于用户可以插入flash卡的物理插槽。
用来向系统注册socket设备,检测设备拔插,硬件写保护等。
MTD层(MemoryTechnologyDrivers)功能主要是实现对具体的flash进行读、写、擦、ID识别等驱动,并设置与flash密切相关的一些参数。
TFFS已经包含了支持Intel,AMD以及samsung部分flash芯片的MTD层驱动。
一种基于Flash的VxWorks操作系统快速引导方法设计
一种基于Flash的VxWorks操作系统快速引导方法设计肖二宁;张兴明;李晗;魏帅【摘要】Pointing to the condition that the embedded system is lack of NVRAM and the write& read speed request is not strict,a fast boot method of operation system based on Flash is designed on the platform of Vxworks operating system,the method uses NOR Flash storage for taking place of NVRAM to store boot information,and a 1+1 fault-tolerant mechanism is used. The test results show that it realizes the fast boot of operation system,and can effectively reduce the erase frequency, extend the service life of Flash,improves the system stability.%针对在嵌入式系统中缺少NVRAM并对读写速度要求不是很高的情况下,以VxWorks操作系统Workbench3.1为平台,设计了一种基于Flash的VxWorks操作系统快速引导方法,该方法通过用NOR Flash存储器代替NVRAM保存引导信息,并运用了1+1容错机制,经验证,该方法实现了VxWorks操作系统的快速引导,并有效降低了Flash的擦除频率,延长了Flash寿命,提高了系统的稳定性。
【期刊名称】《电子设计工程》【年(卷),期】2016(024)018【总页数】3页(P82-84)【关键词】Flash存储器;VxWorks;接口函数;快速引导【作者】肖二宁;张兴明;李晗;魏帅【作者单位】国家数字交换系统工程技术研究中心河南郑州 450000;国家数字交换系统工程技术研究中心河南郑州 450000;国家数字交换系统工程技术研究中心河南郑州 450000;国家数字交换系统工程技术研究中心河南郑州 450000【正文语种】中文【中图分类】TN02在嵌入式系统中,如交换机、路由器、各种PDA设备等,NVRAM一般用来保存操作系统配置信息,而Flash通常用来存储数据[1]。
基于NorFlash的TFFS文件系统移植
基于NorFlash的TFFS文件系统移植
王强
【期刊名称】《自动化应用》
【年(卷),期】2016(0)4
【摘要】因底层处理器为Sparc架构,所以只能使用Tornado2.0进行开发,但项目环境没有TFFS组件.本文针对该问题提出解决方案,把Tornado2.2中基于NandFlash的TFFS文件系统移植到到Tornado2.0环境中,并对Flash芯片与CPU地址线的连接、底层驱动的编写、文件系统配置文件的修改等进行不断调试、修改,最终移植成功.
【总页数】4页(P13-15,20)
【作者】王强
【作者单位】华北计算机系统工程研究所,北京100083
【正文语种】中文
【相关文献】
1.基于 VxWorks的 FLASH 之文件系统 TFFS分析 [J], 石改辉;武静;李兵
2.嵌入式PowerPC上的TFFS文件系统的建立 [J], 陈留国
3.嵌入式操作系统VxWorks的TFFS文件系统的实现 [J], 吴楠;郭政慧
4.基于SD卡的μC/FS文件系统移植研究 [J], 李家良;慕德俊
5.基于S3C6410的嵌入式Linux文件系统移植 [J], 郑明忠;樊水康
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VxWorks文件系统、Flash的TFFS设计与实现0 引言在VxWorks的应用系统中,基于flash的文件系统通常都采用DOS+FAT+FTL的结构。
一般情况下,磁盘文件系统大多是基于sector的文件系统,磁盘按照物理上分为柱面、磁盘、扇区,扇区是基于块的文件系统操作的基本存储单位,磁盘的容量都是根据这些数据计算出来的,每个扇区大小通常都是512bytes。
VxWorks文件系统中的DOSFS是MS-DOS兼容的文件系统,可基于块对物理介质进行操作。
由于Fish的物理特性,对Flash作基于块(不同于Flash 的擦除块)的操作必须由软件作封装实现,这就是TFFS所起的作用。
1 VxWorks文件系统的总体结构VxWorks文件系统的总体结构以及TFFS在整个文件系统的位置。
Tomado下的TFFS 文件系统是Tornado的一个可选组件,它可为种类繁多的Flash设备提供一个统一的块设备接口。
在Tornado2.2版本中自带的TFFS版本为2.0,在文件系统中,TFFS的功能相当于磁盘驱动,通过TFFS可使上层的DOSFS或RTll文件系统像操作普通的标准磁盘一样来操作Flash。
2 TFFS文件系统的分层图2所示为TFFS文件系统的分层图。
图中的Core Layer内核层可将其他层连接起来协同工作;翻译层主要实现DOS和TFFS之间的交互、管理文件系统和Flash各个物理块的关系,同时支持TFFS的各种功能,如磨损均衡、错误恢复等;MTD层执行底层的程序驱动(map、read、write、erase等);socket层的名称来源于可以插拔的socket 存储卡,主要提供与具体的硬件板相关的驱动。
3 FTL层分析FTL是TFFS文件系统的核心,它是PCMCIS的一项标准,意思是Flash Translation Laycr Specification,这种类型的文件系统是目前嵌入式系统中最流行的,很多公司都提供这种文件系统的相关解决方案。
PTL 为DOS BPB/FAT与Flash之间的中间层,FTL利用现成的基于块的文件系统(例如DOSFS)来实现应用层的操作,实质上就是在Flash设备上模拟磁盘块设备的实现,为基于块的文件系统提供统一的接口。
FTL通过以下几步来模拟磁盘驱动:首先是在Flash擦除块之外定义小的读写块(相当于磁盘扇区);其次是逻辑扇区(对块文件系统如DOSFS呈现的地址)和物理地址(Flash的实际地址)之间的转换;然后管理Flash,使得能在空闲的地方写入数据。
其核心就是将DOS上的扇区映射到Flash上去。
为了实现DOS层从逻辑上看扇区是连续的,可随时对任意bit读写操作,FTL必须提供对Flash 芯片的管理,包括向上层(DOS层)提供可以任意读写的操作接口,向下对Flash的擦除、写入、读取统一管理,同时还必须提供磨损均衡,以防止一个擦除块提前损坏。
3.1 FTL的启动过程分析在我们调用函数tffsDevCreate创建TFFS文件系统时,会以参数FL_MOUNT_VOLUME调用函数flcall→mountvolume→flmount→mountFTL,函数mountFTL是FTL层的加载函数人口,处理过程首先是初始化FTL,然后就可按下列步骤进行:(1)查找第一个合法的unit头信息合法性的判断依据是unit header头上的标志CISF..FTL100和部分头部的flag信息,由于bsp已把FS的相关信息注册到FTL的数据结构中,所以,FTL层可以找到第一块unit,并可以向后查,直到找到合法的unit为止。
(2)检验信息合法性将所有有用的信息都读出到内部数据结构中后,即可检验信息合法性。
由于unit header中的Unit ID和擦除次数都相同,所以整个文件系统的共用信息都可以从首先找到的头中读出来。
(3)给Mount每一个unit建立page表这是mount最重要的过程,对每个unit调用mountunit()函数,并在mountunit()函数中首先判断,如果是非法unit,则作为交换unit,然后对每个BAM选项进行处理,并对垃圾BAM、空闲BAM进行统计,如果是缓冲的BAM数据和交换page的VBM,则将此page的逻辑扇区信息记录到内存的page表中,以便后续映射访问查询使用,而对于非缓冲的BAM数据,则不作处理,另外,对于交换page的VBM,则进行记录。
考虑到上述过程,可见其系统中的page VBM和缓冲的数据BAM分布在各个unit的各个角落,需要将所有的VBM和缓冲数据BAM收集起来建立整个交换page表,这是FTL标准层设计时就要决定的。
(4)检验逻辑unit的完整性当所有的unit都mount完成后,每个逻辑unit都应存在,否则mount失败。
(5)判断并关闭交换page如果系统中已存在交换page,则对系统中存在的交换page进行关闭操作,以便后面检查page的完整性。
(6)检查page的完整性系统中的page表必须是完整的,这个表中包含有缓冲的数据BAM映射信息和更重要的page映射信息,因此,缺少任何一个,都将导致DOS的虚拟扇区无法映射到相应的逻辑扇区。
从上述过程可见,整个mount过程是将文件系统信息读入内存数据结构并检验的过程,这个Mount PTL过程完成后,mountvolume ()函数即将隐蔽的0扇区和DOS的启动扇区信息读入内存数据结构,这样,DOS就可以访问FTL底层扇区了。
3.2 TFFS的块映射图3中,FTL层将DOS上连续的扇区映射到Flash上某个R/W block块中,同时在某个位置记录一个映射表(称为MAP表),该表中记录了DOS的扇区映射到Flash中的哪个block,当DOS 要进行读操作时,FTL首先查询这个MAP,以获得映射信息,然后读取相应的block信息并返回给DOS,从而实现读映射。
当DOS需要写入操作时,可能存在将bit0修改为1的情况,于是FTL层将申请一个新的block块,并将新信息写入,然后修改map信息,记录这个DOS扇区已经重新映射了,从而实现写映射。
所以,从逻辑上看,FTL层就实现了DOS扇区的映射和FLASH的写入管理。
3.3 垃圾收集过程FTL格式化后,可用扇区将被不断申请使用,原有扇区被不断的废弃,系统中可用的free扇区越来越少,但这并不是由于上层DOS真的使用了这么多扇区,而是FTL为了方便管理、为了不需要每次擦除一块而付出的管理代价。
所以,当系统中的可用扇区少于用户要申请写入的扇区时,FTL层就必须解决这些垃圾问题,这个过程在FTL中称为垃圾回收(garbage collect)。
当FTL中的可用sector小于用户要申请的扇区时,系统将启动垃圾收集,但系统中有很多个unit,到底收集哪个unit呢?FTL会考虑磨损均衡,它将采用一个伪随机的算法来决定收集策略:即用4/256的几率选择磨损情况少的块来收集;252/256的几率则根据垃圾最多为第一条件,当垃圾一样时,判断磨损次数小的优先选择。
3.4 FFL创建的DOSTFFS的格式化函数需要调用tffsDevFormat来格式化,而不需要调用dosFsVolFormat来格式化;另外,在tffsDevFormat格式化参数中,需要传人的参数含有FAT个数参数,其原因是DOS是FTL层创建的,而不是在FTL基础上创建的,下面是TFFS的整个格式化过程:tffsDevFormat→flcall(FL_FORMAT_VOLUME)→formatVolume→Format→f ormatFTL;其中,函数formatFTL是执行FTL层格式化的操作函数,操作时,首先根据格式化参数和BSP参数对内部数据结构初始化;然后再对每个unit进行格式化,在擦除后,即可写入unitheader信息和控制BAM值;之后写入unit No;最后申请每个page的空间;上述formatFTL函数执行完以后,FTL就已经准备好,可以接受上层的扇区读写函数了(当然还没有内容可以读写)。
在函数formatVolume中,mount可进行卷操作,当内存的数据结构准备好后,FTL层即可调用函数flDosFormat来创建DOS。
其中首先创建隐藏扇区,以用于记录该卷的部分信息,然后分别创建MBR、FAT和ROOT目录;这样,DOS创建完成后,再执行dosFsDevCreat函数,当然就无须格式化,找到0扇区自然就找到了MBR,因为DOS是FTL创建的。
从更深层次讲,FTL层之所以创建DOS层,是因为只有FTL层才知道有哪些扇区是可以供DOS使用的,哪些扇区是DOS不能使用的(作为FTL层管理使用),也正是因为DOS层不了解FTL层的运作情况,所有的扇区映射关系都被FTL层隐蔽,因而导致DOS层无法在上层作出有利于Flash擦写等优化动作,如大文件写入时的字节数更新,FAT表更新等操作,都会严重浪费FTL层的映射关系运算。
4 基于M25P32 SPI Flash的TFFS设计对于TFFS的实现,涉及到config.h、sysTffs.c、tffsConifg.c、tffsMtd.c、Makefile几个文件的配置和修改,其中编译是通过建立一个downloadalbe的tomado工程,来把这几个.c源文件编译进去生成.pl文件提供给bsp工程,而后由bsp工程把.pl文件编译进去,从而生成bootable image。
4.1 Config.h 的相关配置要在vxworks映像中加入TFFS文件系统,需要加入相关的组件,虽然也可以在该文件中直接加入相应的配置宏,但很容易造成遗漏和有些需要依赖的宏没有定义或者冲突,本文采用的方法是建一个bootable的tornado工程,而后在这个工程中通过加入TFFS和DOSFS的相关组件来编译这个工程,从而生成一个prjParams.h文件,该文件里就包含了刚刚加入的组件对应的宏,因而,组件与组件之间依赖也是安全的,不会有任何冲突,最后再在Config.h中包含这个文件即可。
4.2 sysTffs.c文件的修改该文件用于提供socket层的bsp实现代码。
如果镜像文件包含TFFS相关组件,那么,系统启动时就会按照如下过程自动调用sysTffsInit()函数:usrRoot()→tffsDrv()→flInit()→flRegisterComponent()→sysTffslnit ()sysTffsInit ()函数会依次调用socket注册函数simmRegisterOfsl (),注册函数数量视需要构建的文件系统数量而定,本文构建了1个文件系统ofsl,并在simmRegisterOfsl()函数中对文件系统的基地址进行了设置,同时对FLSocket()结构体中的毁掉处理函数进行了挂接,挂接函数也在该文件中实现,如卡上电、断电、写保护等。