基于INTEL StrataFlash在VxWorks上构建TrueFFS文件系统

发布者:古宝奇缘最新更新时间:2012-05-21 来源: 微计算机信息关键字:实时操作系统  VxWorks  TFFS  文件系统 手机看文章 扫描二维码
随时随地手机看文章

一 前言

VxWorks是美国WindRiver公司于1983年推出的一种嵌入式实时操作系统(RTOS),它以突出的可靠性,实时性,可裁减性等特点被广泛应用于航空,航天,军事,通信,安防等领域。

在嵌入式系统中,通常用flash作为永久存储介质,用来存储系统引导程序、操作系统映像、用户应用程序以及系统的配置参数等。基于VxWorks 操作系统,在flash上建立TureFFS文件系统,可以使用户操作flash时,就像操作硬盘一样,支持文件的建立、拷贝、删除等操作。

StrataFlash系列flash是2005年初INTEL公司推出的在技术上有重大突破的产品,它开创了在单个晶体管中存储两位数据的存储技术,从而大大地降低了成本,一经推出,迅速被广泛采用。在其上构建TrueFFS文件系统,可以为其他开发者提供有益的借鉴。

二 TrueFFS文件系统介绍

TrueFFS文件系统为种类繁多的flash存储设备提供了统一的块设备接口,它具有可重入性、线程安全等特点。在TrueFFS的支持下,应用程序对flash设备的操作就好像对有DOS文件系统支持的硬盘设备的操作一样。

TrueFFS文件系统包括一个核心层(Core Layer)和三个功能层:转换层(Translation Layer)、驱动层(Memory Technology Driver (MTD) Layer)、套接层(Socket Layer),共四层。层次结构如图 1所示。

核心层的主要功能是使其他各层互相连接,为其他层的通信提供通道以及完成一些象碎片收集,定时器管理等全局任务。WindRiver公司通常以二进制代码的形式提供核心层模块,开发者不需对核心层进行任何修改。

转换层主要负责维护一个文件系统的逻辑块和flash中删除块之间的映射图。这个映射图主要是用来实现对flash的平衡磨损策略,以及进行错误恢复。所谓平衡磨损是指,flash的寿命通常是有限的,每个块的擦写次数大概在十万次左右(实际上要少的多),因此在擦写时不能一直对某一个块重复擦写,即使是对同一个数据改写时也是这样,一个数据改写前在这个块中存放,改写后可能就存放到另外一块了,而且flash是先写后删,这就可以在写入发生错误时进行错误恢复了。转换层也是以二进制代码的形式提供的。

驱动层是对不同种类的flash提供底层的操作,如映射(map),读(read),写(write),删(erase)等。构建TrueFFS文件系统的主要工作就是针对不同类型的flash芯片编写相应的驱动层代码。

套接层是提供TrueFFS和硬件之间的接口,提供访问特定硬件的访问进程。包括套接字注册,电源管理,写保护等。WindRiver公司为开发者提供一个套接层模板,需要针对特定的硬件进行修改。

三 INTEL StrataFlash系列FLASH上构建TrueFFS文件系统

本文以INTEL StrataFlash系列中常用的32Mbit 28F320J3A为例说明构建TrueFFS文件系统的过程。

1 修改相关系统文件

修改config.h文件,此文件一般存放在BSP文件夹中,在此文件中定义支持TrueFFS功能以及其他相关功能的宏,包括:

#define    INCLUDE_TFFS

#ifdef      INCLUDE_TFFS

#define    INCLUDE_DOSFS 

#define    INCLUDE_SHOW_ROUTINES

#endif 

修改sysTffs.c文件,此文件一般存放在BSP文件夹中,此文件定义哪个MTD驱动和转换层模块被包含到TrueFFS中,以及定义flash的基地址和大小,会有以下定义出现:

#define    INCLUDE_MTD_I28FJ3A

#define    INCLUDE_TL_FTL 

#define    FLASH_BASE_ADRS           0x10000000

#define    FLASH_SIZE                             0x00400000

修改sysLib.c文件,此文件一般存放在BSP文件夹中,在数组sysPhysMemDesc[]中加入FLASH_BASE_ADRS、 FLASH_SIZE所指定的地址段,MMU属性设为VM_STATE_WRITABLE和VM_STATE_CACHEABLE_NOT等。[page]

修改tffsConfig.c文件,此文件一般存放在src\drv\tffs文件夹中,可以拷贝到BSP文件夹中,在 MTDidentifyRoutine mtdTable[]中把定义的宏INCLUDE_MTD_I28FJ3A和MTD识别函数关联起来:

#ifdef  INCLUDE_MTD_I28FJ3A

           i28fj3aMtdIdentify,

#endif 

系统在调用tffsdev()函数安装flash的MTD驱动时会调用这个表项来查找并识别flash设备。

2 MTD驱动程序组成

在MTD驱动中,最重要的函数是i28fj3aMtdIdentify()函数,可以把它看作是MTD的初始化函数。它负责读取芯片制造商和设备的ID 号,INTEL公司的代码是0x0089,28F320J3A的设备代码是0x0016。然后对FLFlash结构的成员进行初始化。FLFlash结构定义在target\h\tffs\FLFlash.h中:

typedef  struct  tFlash  FLFlash;

struct tFlash {

FlashType              type;      

long                      erasableBlockSize; 

        long                      chipSize;

int                         noOfChips;

int                         interleaving;

int                         flags;

void                      *mtdVars;

FLSocket                     *socket;

void  FAR0           *(*map)(FLFlash *, CardAddress, int);

FLStatus               (*read)(FLFlash *, CardAddress, void FAR1 *, int, int);

FLStatus               (*write)(FLFlash *, CardAddress, const void FAR1 *, int, int);

FLStatus               (*erase)(FLFlash *, int, int);

void                      (*setPowerOnCallback)(FLFlash *);

};

其中,type指flash的设备类型;erasableBlockSize指flash可擦除块的大小,单位为字节;chipsize指flash存储容量,单位为字节;noOfChips指构成flash存储阵列的存储器的片数;interleaving指存储阵列的交叉存取参数,必须为2的整数幂,用于定义在一个存储芯片上,两个字节连续媒体的地址差异;socket是指向FLSocket结构的指针,这个FLSocket结构含有指向socket 层函数的指针和数据。当注册socket驱动时,该FLSocket结构中涉及的函数将被安装。

map是指向flash映射函数的指针,该函数将flash映射到内存的一个区域。read是指向flash读函数的指针。write是指向 flash写函数的指针。erase是指向flash擦除函数的指针。setPowerOnCallback是指TFFS在flash设备上电后应当执行一个函数以便挂接该设备,setPowerOnCallback成员就是指向这个函数的指针,许多flash存储设备不需要此函数。

在MTD驱动中最重要的两个函数是write和erase。write的过程一般是这样的,写入前首先要对扇区解锁,如果是进行改写,需要把待改写扇区的数据读出来,修改相应的部分,然后擦除扇区,接着再写入写命令,写入数据;如果是写入空扇区,直接写命令、写数据就可以了,最后判断数据是否写完。为了确保写入成功,写完数据后要进行数据的比较。对flash的erase操作是按照扇区进行的,擦除前首先要对扇区解锁,然后写入擦除建立和扇区擦除命令,擦除成功后,内容应为0xFFFF。为了确保擦除成功,擦完后也要进行数据比较。

当VxWorks内核支持TFFS文件系统,在启动时,usrRoot()函数将会调用tffsdev()进行TFFS设备初始化,调用tffsdev()的目的是注册套接组件驱动程序。

在使用TFFS之前首先要调用tffsdevcreate()创建此设备,经过一系列的调用,最后运行flidentifyflash(),这个函数按照 sysTffs.c中宏所指定的flash,调用识别函数i28fj3aMtdIdentify()进行识别,来确认究竟是那种flash接入了系统,并向FLFLash数据结构注册MTD驱动中的读、写、擦除、映射等flash操作函数。

3 TFFS操作方法

在使用TFFS前,要用shell命令tffsDevFormat对flash设备进行格式化,并用usrTffsConfig命令把flash设备挂接上DOS设备名,接着就可以用此设备名对flash设备进行操作了。支持的命令包括:ls,copy,remove等常用命令。

还可以通过修改DEFAULT_BOOT_LINE中的参数,将TFFS作为一个启动设备。将boot device改为tffs=0,0 ,将file name 改为/tffs0/VxWroks,就可以把系统启动起来了。

四 结论

在基于VxWorks的嵌入式系统中支持TrueFFS文件系统,可以将VxWorks操作系统映像、应用程序、系统配置等以文件的形式存放到flash 上,与系统的引导程序bootrom分开。这样可以支持用户的在线升级,当应用程序和系统配置需要更新时,直接以文件的形式拷贝到flash中就可以了,非常方便。当然,支持TrueFFS文件系统是有少量存储空间的开销,但这和使用TrueFFS文件系统所获得的好处相比是微乎其微的。本文作者的创新点是为新推出的Intel StrataFlash系列flash编写了驱动程序,并在其上构建了TrueFFS文件系统。

参考文献

[1] VxWorks 5.5 Programmer’s Guide.  WindRiver Systems,Inc

[2] Intel StrataFlash Memory(J3) Datasheet.  Intel Corporation

[3] 王明飞,张效义,李鸥,邢明. VxWorks下MPC860的中断处理机制及其应用. 微计算机信息,2005,3:1~2页

[4] 李方敏.  《VxWorks高级程序设计》.  清华大学出版社.  2004.5

[5] 陈智育,温彦军,陈琪.  《VxWorks程序开发实践》.  人民邮电出版社.  2004.5

关键字:实时操作系统  VxWorks  TFFS  文件系统 引用地址:基于INTEL StrataFlash在VxWorks上构建TrueFFS文件系统

上一篇:基于Small RTOS51的光电效应实验系统
下一篇:基于Intel PXA272的Bootloader的设计与实现

推荐阅读最新更新时间:2024-05-02 22:04

基于Small RTOS51的数据采集器设计
摘要:介绍如何运用Small RTOS51多任务操作系统进行嵌入式控制器的软件设计。首先介绍Small RTOS51多任务操作系统,然后介绍基于该操作系统进行数据采集器软件系统的设计。 关键词:Small RTOS51 多任务操作系统 数据采集器 引 言   随着嵌入式系统的发展,嵌入式软件设计向软件平台靠近,单片机软件设计不再是单一线程结构方式,而是逐步采用多任务的设计思想。实时内核也称为实时操作系统或RTOS。它使得实时应用程序的设计、扩展和维护变得更容易,不需要大的改动就可以增加新的功能。通过应用程序分割成若干独立的任务,RTOS使得应用程序的设计过程大为简化。使用可剥夺性内核时,所有时间要求苛刻的事件都得到了尽可能快
[嵌入式]
基于RTOS与DSPs的微机保护装置
1 引言   我国电力系统的微机型保护得到迅速发展,已在电力系统得到了广泛应用。从早期的8位机,到现在16/32位机,性能得到了提高,运算能力也大大加强了。    微机保护 的性能及其可靠性取决于软、硬件,因此软件的编写和硬件的选择是一项关键性的工作。我们在编写软件时,通常先画好流程图,然后按着流程图来编程,一般是一个无限循环,循环中调用相应的函数(子程序)完成相应的操作(称为后台行为或任务级);用中断来处理随机事件(称为前台行为或中断级)。程序流程如图1所示。任务的响应时间取决于后台循环执行的时间(在不同的状态或运行方式下,执行时间不同),程序经过某一点的时间不能确定,程序修改了,循环时序就受到影响。这种编程方法,使得程
[模拟电子]
基于<font color='red'>RTOS</font>与DSPs的微机保护装置
基于ARM7核处理器VxWorks系统BSP设计
摘要:该文主要介绍了SAMSUNG公司的基于ARM7TDMI核S3C4510B微处理器,并详细介绍了利用该处理器所设计的嵌入式系统以及VxWorks操作系统下BSP(Board Supported Package)的开发。 关键词:ARM7TDMI S3C4510B VxWorks BSP 1 介绍 S3C4510B是三星公司推出的针对嵌入式应用的16/32 位嵌入式处理器,该微控制器专为以太网通信系统的集线器和路由器而设计,具有低成本和高性能的特点, S3C4510B中内置了ARM公司设计的16/32位ARM7TDMI处理器, 可以执行32位的ARM指令,也可执行16位的THUMB指令, 并集成了多种外围部件,主
[应用]
VxWorks环境下基于Zinc的通信
1 引言   VxWorks是美国Wind River Systems公司开发的一种嵌入式实时操作系统,它以高性能可剪裁的微内核以及友好的用户开发环境在嵌入式实时操作系统领域占有重要的地位。   在很多实时应用场合(如嵌入式地理信息系统) ,需要在VxWorks环境下设计图形用户界面(GUI) 。VxWorks提供了两种开发图形用户界面的组件:WindML (Wind多媒体库)和Zinc。WindML为图形、图象和声音应用程序的开发提供了基本技术,并且提供了为定制设备开发标准化驱动程序的框架。 Zinc是以WindML为基础的, Zinc是为应用创建图形用户界面提供框架的可扩展的面向对象的类库。Zinc为实现复杂的图形用户界面
[嵌入式]
ARM7系统中实现CF卡存储的文件系统设计
随着微控制器性能的不断提高,嵌入式应用越来越广泛。但是目前市场上的大型商用嵌入式实时系统,价格昂贵,而且都针对特定的硬件平台。对于中小型系统开发,购买商用实时系统并不划算。 目前我们正着手将嵌入式系统软件应用于汽车卫星导航仪系统的一步开发。传统的嵌入式应用并不包括文件系统,而我们要实现的文件系统需要在车辆导航系统中实现地图数据文件的读写。因此它既要支持与MS-DOS兼容的文件系统也要支持其它类型的文件系统。 另一方面,从数码相机到MP3播放机,从掌上电脑到数码摄像机,CF(CompactFlash)卡由于具有体积小、兼容性强、价格相对低廉等诸多优点,在数码设备上的应用越来越广泛。但若想在CF卡与PC之间传递数据,通常不得不
[单片机]
ARM7系统中实现CF卡存储的<font color='red'>文件系统</font>设计
OK6410启动自动挂载nfs文件系统
①通过命令启动和停止ubuntu服务器的nfs 服务: 在命令行下运行: /etc/init.d/nfs restart 使用这个命令可以停止 nfs 服务: /etc/init.d/nfs stop 检查nfs服务器是否开启: service nfs status 重启对应的2个服务: service portmap restart service nfs restart 检查防火墙看是否屏蔽了nfs端口 service iptables stop service iptables status ②设置ubuntu待挂载目录的权限: sudo vi /etc/exports 添
[单片机]
Linux2.6.32移植到MINI2440(3)支持yaffs2文件系统
开发环境: 主机:fedora 14 虚拟机:vmware workstation 10 交叉编译工具:arm-linux-gcc 4.3.2 开发板:mini2440(2m nor ,64m sdram,256m nand) 一、获取yaffs2源码 我这里是从友善之臂的光盘里有一个压缩包,不过是zip格式的,可以在windows下解压,然后直接拷贝里面的yaffs2到虚拟机里面。 也可以使用git直接输入:git clonegit://www.aleph1.co.uk/yaffs2 我这里没有成功,也安装了git了,git –version显示1.7.3.1版本,错误提
[单片机]
Linux2.6.32移植到MINI2440(3)支持yaffs2<font color='red'>文件系统</font>
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved