嵌入式系统中的线性flash文件系统设计

嵌入式系统中的线性flash文件系统设计

ID:11083570

大小:60.00 KB

页数:6页

时间:2018-07-09

嵌入式系统中的线性flash文件系统设计_第1页
嵌入式系统中的线性flash文件系统设计_第2页
嵌入式系统中的线性flash文件系统设计_第3页
嵌入式系统中的线性flash文件系统设计_第4页
嵌入式系统中的线性flash文件系统设计_第5页
资源描述:

《嵌入式系统中的线性flash文件系统设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、嵌入式系统中的线性Flash文件系统设计

2、第1内容显示中摘要:设计一种能够在典型嵌入式环境下应用的线性文件系统,为嵌入式系统Flash空间的管理提供一种非常有效的手段。它包装和通用文件系统类似的API接口,设计的实现独立于实时操作系统(RTOS)和具体的Flash典型,可方便移植到不同的嵌入式应用中。在嵌入式系统中,为了便于对闪存(Flash)空间进行管理,会采用文件的形式来访问Flash。目前,可以购买到的Flash文件系统一般都是兼容DOS的文件系统(FlashFileSystem,FFS),这对需

3、要一个具有复杂的目录层次,并且DDS文件兼容的系统来说是必要的;但是对大多数的嵌入式应用来说,这种文件系统太过奢侈。笔者在参与嵌入式系统项目的时候,设计了一种线性文件系统,它适用于大多数的嵌入式应用对Flash文件系统的需求。线性文件系统设计基于三个目标:一是提供给应用程序通过文件名而不是物理地址访问系统Flash的能力;二是文件系统的设计独立于实时操作系统(RTOS),这样可以很容易移植到不同的嵌入式应用中;三是设计统一的底层接口,适应不同的Flash类型。本文设计的线性文件系统为典型的嵌入式系统提供

4、了所需的类文件系统能力。需要注意的是,本文件系统不支持复杂的Flash扇区擦写次数均衡算法,没有目录层次,并且和其它的文件系统不兼容。1线性文件系统线性文件系统的设计思路是这样的:文件分为文件头和文件数据区两个部分,每个文件按照顺序存放在Flash中,以单向链表来链接文件。文件的起始部分是文件头,包含文件的属性、指向下一个文件头的指针、文件头和文件数据区的32位循环冗余校验和(CRC32)等。文件头用一个32位的字来表示文件属性,每位表示一种属性,如数据文件或者是可执行文件,是否已删除的文件等,具体可以

5、根据应用的需要来定义文件的属性;文件头和文件数据区维护独立的CRC32校验,使文件系统能更精确检测文件的完整性。文件的起始地址没有特殊需求,分配给文件系统的Flash大小限制了文件的大小。另外,线性文件系统作为嵌入式系统的一个功能模块,它为应用程序提供与标准文件系统类似的API接口,如:read()、ouseg(this)">在第一个文件创建之前,必须进行初始化,将所有分配给文件系统的Flash空间擦除。当创建第一个文件时,起始位置从文件系统的起始地址开始,文件头指针指向下一个空文件的起始位置(链表尾部

6、);第二个文件的位置从当前的链表尾部开始,同时文件头中的链表指针指向新的尾部。删除文件时,仅仅是简单地把文件头的标识位中的活动文件标识位置0,表示删除。这样,在经过多次删除之后,就有必要运行碎片整理模块来进行文件系统Flash空间的碎片整理。碎片整理模块还需要在文件系统Flash空间尾部留一个扇区来数据备份,以便当碎片整理被打断时(如下电或者复位)可以恢复文件系统。这个保留的扇区称空闲扇区。它必须放在文件系统空间之后,这样可以保证文件系统的所有文件在所占用的Flash空间是连续的。整个文件空间的分配如图

7、1所示。阴影部分是文件头,数据结构如下:structhdr{unsignedshorthdrsize;/*文件头字节数*/longfilsize;/*文件头版本*/longfilsize;/*文件大小*/longflags;/*描述文件的标识*/unsignedlongfilcrc;/*文件数据的CRC32的值*/unsignedlonghdrcec;/*文件的最后修改时间*/structhdr*next;/*指向下一个文件头的指针*/charname[NAMESIZE];/*文件名*/charinfo

8、[INFOSIZE];/*文件描述信息*/};碎片整个记录区包含两种数据类型:碎片整理文件头信息表defraghdr和文件区扇区整理前后的CRC值备份表sectorcre。具体的地址分配从空闲扇区的起始地址减1开始,往前分配文件系统扇区数乘以4字节作为sectorcrc的空间;从sectorcrc起始地址减1开始,往前分配活动文件个数乘以64字节作为碎片整理文件头信息表。这两个结构定义如下:structdefraghdr{structhdr*ohdr;/*文件头的原始位置指针*/structhdr*ne

9、xtfile;/*指向下一个文件的指针*/longfilsize;/*文件大小*/unsignedlongcrc;/*这个头的CRC32值*/unsignedlongohdrcrc;/*原始文件头CRC32值的拷贝*/longidx;/*碎片整理表头的索引*/longnesn;/*新的文件尾的扇区号*/longneso;/*新的文件尾的扇区偏移量*/char*nda;/*新的文件起始地址*/charfname[NAMESIZE];/*文件名

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。