嵌入式操作系统VxWorks中TFFS文件系统的构建
发布时间:2008/5/27 0:00:00 访问次数:363
摘要:目前的嵌入式系统多使用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文件系统结构简介
tornado的trueffs是和vxworks兼容的一种m-systems flite实现方式,版本为2.0。它为种类繁多的flash存储设备提供了统一的块设备接口,并且具有可重入、线程安全的特点,支持大多数流行的cpu构架。有了tornado的trueffs,应用程序对flash存储设备的读写就好象它们对拥有ms-dos文件系统的磁碟设备的操作一样。
如图1所示,trueffs由核心层(core layer)和三个功能层,翻译层(translation layer),mtd层(mtd layer),socket层(socket layer)组成。
核心层(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中。即:
#define include_mtd_mx29lv /* mx29lv160bt mtd driver */
#define include_tl_ftl /* ftl translation layer */
#define flash_base_adrs 0x2a10000 /* flash memory base address */
#undef flash_size
#define flash_size 0x001f0000 /*flash memory size,2m(parameter block) */
其他无关的mtd driver包含头都#undef掉,同时定义flash在系统中的基地址和大小。另外,还必须编辑syslib.c中的sysphysmemdesc[ ]数组,将flash基地址和大小加入到mmu中,以供将来访问flash,否则访问flash会失败。如果bsp目录下没有systffs
摘要:目前的嵌入式系统多使用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文件系统结构简介
tornado的trueffs是和vxworks兼容的一种m-systems flite实现方式,版本为2.0。它为种类繁多的flash存储设备提供了统一的块设备接口,并且具有可重入、线程安全的特点,支持大多数流行的cpu构架。有了tornado的trueffs,应用程序对flash存储设备的读写就好象它们对拥有ms-dos文件系统的磁碟设备的操作一样。
如图1所示,trueffs由核心层(core layer)和三个功能层,翻译层(translation layer),mtd层(mtd layer),socket层(socket layer)组成。
核心层(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中。即:
#define include_mtd_mx29lv /* mx29lv160bt mtd driver */
#define include_tl_ftl /* ftl translation layer */
#define flash_base_adrs 0x2a10000 /* flash memory base address */
#undef flash_size
#define flash_size 0x001f0000 /*flash memory size,2m(parameter block) */
其他无关的mtd driver包含头都#undef掉,同时定义flash在系统中的基地址和大小。另外,还必须编辑syslib.c中的sysphysmemdesc[ ]数组,将flash基地址和大小加入到mmu中,以供将来访问flash,否则访问flash会失败。如果bsp目录下没有systffs