嵌入式系统中NAND Flash存储器上建立文件系统的方法
技术领域
本发明涉及Flash存储器的技术领域,具体涉及嵌入式系统中NAND Flash存储器上建立文件系统的方法。
背景技术
嵌入式系统使用可擦写非易失Flash存储器存储代码和数据。文件系统屏蔽了物理存储器的技术细节,把所管理的信息组织成文件形式,从而增加了程序的可移植性和可维护性,便于用户有效管理大量的数据,所以Flash存储器上建立文件系统具有普遍的实际意义。目前在通用计算机上已有不少成熟的文件系统,如Dos下的FAT文件系统,Windows NT下的NTFS文件系统及Unix、Linux文件系统,但上述文件系统不适合直接用于嵌入式系统,主要问题有:首先嵌入式系统的应用环境远比计算机恶劣,通用文件系统对于可靠性的设计考虑不足;其次通用文件系统基于资源丰富的计算机平台和慢速的磁盘驱动器,经常使用耗费大量资源的缓存等技术,这与嵌入式系统中资源有限的情况完全不同;第三点源自NAND Flash的固有特性,NAND Flash存储器由若干块组成,块由若干页组成,而页则包含一定数量字节的存储单元和若干冗余字节。Flash存储器的读操作与磁盘一致,但写操作与磁盘不同,通用文件系统对此没有相应的专门设计。Flash存储器文件所占用的存储空间基本单位是块,数据写操作必须在空白区块或者擦除后区块中进行,擦除要求以块Block为单位进行(将OXFF写入待擦除的存储器快),写操作按页Page方式进行(一次必须写入一个Page),Flash存储器的擦除次数是有限的(100000次),Flash存储器上建立文件系统时必须考虑Flash存储器的固有特性,要避免某些块过度擦除导致存储介质的磨损失效。
目前,大容量Flash存储器上的文件系统有JFFS2、YAFFS和TyueFFs三种,这三种基于日志结构的文件系统需占用较多的资源。DOS FAT文件系统历史悠久、技术成熟、结构可靠、系统资源开销小,易于在中小型、中低端嵌入式系统的Flash存储器上实现。针对嵌入式系统工作环境的特点,基于Flash存储器的固有特性,本发明对DOS FAT文件系统进行相应的改进,提出一种嵌入式系统中NAND Flash存储器的文件系统,除了提供数据管理功能外,注重提高文件系统的可靠性,并通过FRT、FAT表存储区块的磨损均衡机制延长存储器寿命。
发明内容
本发明的目的是提供一种嵌入式系统中NAND Flash存储器上建立文件系统的方法。
它是采用链接页方法管理存储空间的单级目录文件系统,单级目录文件系统的文件登记表、文件分配表应用浮动地址方式存储,RAM内存中的文件登记表和文件分配表变化,实时在线以增量形式写入Flash存储器增量文件登记表和增量文件分配表;单级目录文件系统中文件登记表和文件分配表的相关信息同时写入相关Flash数据区块页面的冗余字节内,作为单级目录文件系统的备份。
所述的单级目录文件系统由系统信息与引导程序区、指向FRT表的浮动地址指针表、文件登记表、增量文件登记表、文件分配表、增量文件分配表和数据区组成;文件登记表、增量文件登记表、文件分配表、增量文件分配表以可移动的数据形式存储,通过系统信息与引导程序区和指向文件登记表的浮动地址指针表寻址;文件登记表、增量文件登记表、文件分配表、增量文件分配表存储地址变更时,将新地址写入指向文件登记表的浮动地址指针表,根据文件登记表、增量文件登记表、文件分配表、增量文件分配表四表擦除次数,移动上述四表至新的Flash存储块,释放四表的原存储块作为数据存储块,并不再承担四表存储块功能。
所述的单级目录文件系统从Flash复制到RAM中运行时,不仅修改RAM内存中的文件登记表和文件分配表,同时将修改内容以增量形式写入Flash存储器中增量文件登记表和增量文件分配表,故障时以此增量信息恢复Flash存储器中的文件登记表和文件分配表,文件登记表和文件分配表更新时,遵循先写后擦原则。
所述的单级目录文件系统利用Flash存储器每个页面冗余的字节,写入文件系统的文件编号、文件名、生成或最后修改时间、该文件的上一个块地址、下一个块地址的相关信息,作为Flash存储器文件系统文件登记表和文件分配表的冗余备份。
本发明与背景技术相比,具有的有益效果是:
DOS FAT文件系统历史悠久、技术成熟、结构简单、系统资源开销小,改进的DOS FAT文件系统移植至Flash存储器上,较现有的JFFS2、YAFFS和TYUEFFS文件系统具有明显的经济技术优势,在中小型、中低端嵌入式系统中其经济技术优势尤为明显。将固定存储地址的FRT和FAT改进成可移动的存储地址,为Flash存储器建立了一种磨损均衡机制,解决了传统FRT和FAT固定存储地址,因该存储器区块的频繁擦写,导致存储器过早磨损失效的难题。在Flash存储器的增量文件登记表ΔFRT和增量文件分配表ΔFAT中,实时记录RAM内存的FRT和FAT变化,提供了文件系统的故障恢复机制;利用Flash存储器每个页面冗余的字节,写入文件系统的相关信息,作为Flash存储器文件登记表FRT和文件分配表FAT的冗余备份,进一步提高了文件系统的可靠性。
附图说明
图1是本发明的单级目录文件系统结构示意图;
图2是本发明的文件登记表,文件分配表移动存储示意图(图中省略增量文件登记表、增量文件分配表);
图3是K9F6408UOM Flash存储器结构示意图;
图4是本发明的单级目录文件系统运行原理图。
具体实施方式
如图1所示,嵌入式系统中NAND Flash存储器上建立文件系统的方法是采用链接页方法管理存储空间的单级目录文件系统,单级目录文件系统的文件登记表FRT 3、文件分配表FAT 5应用浮动地址方式存储,RAM内存中的文件登记表FRT 3和文件分配表FAT 5变化,实时在线以增量形式写入Flash存储器增量文件登记表ΔFRT 4和增量文件分配表ΔFAT 6;单级目录文件系统中文件登记表FRT 3和文件分配表FAT 5的相关信息同时写入相关Flash数据区块页面的冗余字节内,作为单级目录文件系统的备份。
单级目录文件系统由系统信息和引导程序区、指向FRT的浮动地址指针表PFRT、文件登记表FRT(1-N)、增量文件登记表ΔFRT(1-N)、文件分配表FAT(1-N)、增量文件分配表ΔFAT(1-N)和数据区七部分组成。系统信息和引导程序占据Flash第一区块,记录存储器类型、容量、结构(如包含多少块、每块包含多少页、每页的存储容量和冗余容量)版本号等重要信息;引导程序将FRT、FAT,按需加载到RAM内存;Flash第一区块写入浮动地址指针表PFRT的首地址,浮动地址指针表PFRT逐次写入FRT和ΔFRT的首地址。FRT存放每个文件的文件代号、文件名、文件长度、文件属性以及该文件的存储链在FAT的入口等。FAT存放Flash存储器上所有区块的占用与空闲状况以及每个文件的存储结构。数据区用于存放数据。
如图2所示,所述的单级目录文件系统由系统信息与引导程序区1、指向文件登记表FRT 3的浮动地址指针表PFRT 2、文件登记表FRT 3、增量文件登记表ΔFRT 4、文件分配表FAT 5、增量文件分配表ΔFAT 6和数据区7组成;文件登记表FRT 3、增量文件登记表ΔFRT 4、文件分配表FAT 5、增量文件分配表ΔFAT 6以可移动的数据形式存储,通过系统信息与引导程序区1和指向文件登记表FRT 3的浮动地址指针表PFRT 2寻址;文件登记表FRT 3、增量文件登记表ΔFRT 4、文件分配表FAT 5、增量文件分配表ΔFAT 6存储地址变更时,将新地址写入指向文件登记表FRT 3的浮动地址指针表PFRT 2,根据文件登记表FRT 3、增量文件登记表ΔFRT 4、文件分配表FAT 5、增量文件分配表ΔFAT 6四表擦除次数,移动上述四表至新的Flash存储块,释放四表的原存储块作为数据存储块,并不再承担四表存储块功能。
文件系统运行时需要不断地修改文件登记表FRT(1-N)和文件分配表FAT(1-N)的内容,如果将FRT、FAT固定在一个Flash存储块上,该存储块势必过早磨损失效,并导致文件系统的崩溃。因此,两表所在存储块的擦除次数达到某一阀值时,将FRT和FAT复制到空闲存储块,同时进行数据校验;校验成功后,在浮动地址指针表PFRT预留的文件首址指针页中写入新的FRT和ΔFRT首地址。
如图3所示,K9F6408UOM是三星公司推出的一款NAND Flash存储器芯片。芯片共有1024块,每块分为16页,每页528个字节,其中16个字节冗余,因此容量为1024*16*(512+16)字节=(8M+256K)字节。在数据区存储块每个页面冗余的16个字节中,写入文件编号、文件名,生成或最后修改时间、该文件上一个块的地址、下一个块地址等信息,作为FRT和FAT的冗余备份。一旦Flash存储器的FRT和FAT出现故障时,扫描分散在数据区的FRT和FAT冗余信息恢复文件系统。
如图4所示,所述的单级目录文件系统从Flash复制到RAM中运行时,不仅修改RAM内存中的文件登记表FRT 3和文件分配表FAT 5,同时将修改内容以增量形式写入Flash存储器中增量文件登记表ΔFRT 4和增量文件分配表ΔFAT 6,故障时以此增量信息恢复Flash存储器中的文件登记表FRT 3和文件分配表FAT 5,文件登记表FRT 3和文件分配表FAT 5更新时,遵循先写后擦原则。所述的单级目录文件系统利用Flash存储器每个页面冗余的字节,写入文件系统的文件编号、文件名、生成或最后修改时间、该文件的上一个块地址、下一个块地址的相关信息,作为Flash存储器文件系统文件登记表FRT 3和文件分配表FAT 5的冗余备份。
引导程序将文件系统加载至嵌入式系统的RAM内存。嵌入式系统运行时,RAM内存中的FRT和FAT修改内容实时写入Flash存储器ΔFRT和ΔFAT空白页。意外发生时,根据Flash存储器的增量信息恢复FRT和FAT。系统正常结束时,将RAM内存中的FRT和FAT表写入文件系统保留的FRT和FAT表暂存区块,校验成功后,擦除文件系统的FRT和FAT暂存表,拷贝两表暂存区块的FRT和FAT,并记录FRT和FAT表存储区块擦除次数,最后再擦除暂存区块;最后再将FRT和FAT信息写入数据区存储块每个页面的冗余字节中。