在Flash上运行传统的文件系统,如ext2等,但是这类文件系统没有考虑Flash存储器的物理特性和使用特点。例如,Flash存储器中各个块的最大擦除次数是有限的,如果能够均匀地使用各个块,就能延长∏ash的整体寿命,这就需要磨损均衡的功能;为了提高Flash存储器的利用率,还应该有对存储空间的碎片收集功能;在嵌入式系统中,要考虑出现系统意外掉电的情况,所以文件系统应该有掉电保护的功能,保证系统在出现意外掉电时也不会丢失数据。
Linux支持多种Flash文件系统,常用的主要包括:
(1)Romfs,是一个只读的文件系统,它是最早支持Flash的文件系统。Romfs是一种基于块设备的文件系统,它是只读的,非常小巧。在Linux中,它属于默认的为嵌入式系统定制的文件系统。在Romfs文件系统中,文件中的所有数据都是顺序存储的,可以方便ARM、ColdFire等嵌入式处理器程序的运行。
Romfs为根文件系统,需要读写的var和/ tmp目录采用Ramfs。
(2)Cramfs,是2.4系列Linux内核提供的一种新的文件系统。它是一种压缩的、只读的文件系统。它主要的优势是所有存储的文件都是压缩的,而且这些文件只是在被访间到的时候才解压到RAM中,而不在访问之列的文件并没有被解压到RAM中。这样,Cramfs能有效减少Flash和RAM的占用量,但不足之处是需要的指令比较多,不支持XIP特性。
(3)JFFS(Journaling Hash File System),是专门针对嵌入式系统中Hash存储器的特性而设计的一种日志文件系统。它是基于Nor-Flash开发的文件系统,它最大的特点是支持对Flash的直接读写。
(4)JFFS2,是在JFFS的基础之上开发的,它采用了成熟稳定的MTD技术,因此要比JFFS稳定。和JFFS相比,JFFS2支持更多节点类型,提高了磨损均衡和碎片收集的能力,增加了对硬链接的支持。JFFS2还增加了数据压缩功能,这更利于在容量较小的Flash中使用。
和传统的Linux文件系统如ext2相比,JFFS2处理擦除和读写操作的效率更高,并且具有完善的掉电保护功能,使存储的数据更加安全。在嵌入式系统中使用JFFS2文件系统的缺点很少,只是当文件系统快要满时,JFFS2会放慢运行速度,这是由于碎片收集的原因导致的。
如表所示是几种常用的文件系统,其中Ext2和Ext3文件系统是在Linux中常用的文件系统。
表 常用文件系统的表现
JFFS2在Linux中有两面三刀种使用方式,一种是作为根文件系统,另一种是作为普通文件系统在系统启动后被挂载,通常选用后一种方面军式。
Linux下采用的文件系统构成如图所示。
图 Linux下的文件系统构成