嵌入式文件系统

嵌入式文件系统存储介质一般是Flash芯片,常用的嵌入式文件系统比较出名的有CramfsJFFSYaffs三种文件系统。Flash芯片是嵌入式系统中广泛采用的主流存储器,主要特点是按整体/扇区擦除和按字节编程、低功耗、高密度、小体积。Flash分为Nor型和Nand型:Nor型速度快,价格高,地址线与数据线分开,可以像SRAM一样连在数据线上;Nand型单元尺寸是Nor型的一半,生产简单,价格低廉。

嵌入式Flash文件系统要求

1、掉电安全。
2、平均使用。Flash存储扇区的擦除次数都有限制。文件系统对Flash的使用必须充分的考虑该特性,最好均匀使用Flash的每个扇区,以延长Flash的使用寿命。
3、高效垃圾回收。各种存储器在分配使用一段时间后,会出现空缺和碎片数据,这就需要进行垃圾回收以保证存储器空间高效使用。Flash存储器以扇区为单位,垃圾回收也应该以扇区为单位,嵌入式Flash文件系统回收要先移动扇区数据,再擦除整个扇区。

Linux文件系统三个层次

1、上层用户空间的应用程序对文件系统的系统调用;
2、虚拟文件系统VFS;
3、挂载到VFS中的各种实际文件系统。

常用文件系统

ROMFS

是常用的一种文件系统,简单紧凑,只读,不支持动态擦写保存。按顺序存放所有文件数据,所以这种文件系统格式支持应用程序以XIP(芯片内执行)方式运行,在系统运行时,可以获得可观的RAM节省空间。UCLinux通常采用ROMFS文件系统。

Cramfs

Linus Torvalds开发的一种可读文件系统。每一页被单独压缩,可以随机访问,压缩比高达2:1。压缩存储,运行时解压。不支持XIP方式运行,所有应用程序都要求被复制到RAM里运行,因为存储的原因,所以不会消耗太多内存。

速度快,效率高。只读特性有利于保护文件系统免受破坏,但是只读使得无法扩充。Cramfs镜像文件通常放在Flash中,但是也能放在别的文件系统里,使用loopback设备可以把它安装到别的文件系统里。使用mkCramfs工具可以创建Cramfs镜像文件。

特点:

1、采用实时解压方式,但解压缩的时候有延迟;
2、Cramfs的数据都是经过处理、打包的,对其进行写操作有一定的困难,所以不支持写操作,这个特性刚好适合嵌入式应用中使用Flash存储文件系统的场合;
3、在Cramfs中文件最大不能超过16MB;
4、支持组标志,但是mkCramfs只将低8位保存下来,因为只有这8位是有效的;
5、支持硬链接;
6、Cramfs的目录中没有...这两项,因此Cramfs中的目录的链接数通常也仅有一个;
7、Cramfs中不会保存文件的时间戳信息,当然正在使用的文件由于inode保存在内存中,因此其时间可以暂时的变为更新时间,但是不会保存到Cramfs中;
8、当前版本的Cramfs只支持PAGE_CACHE_SIZE4096KB的内核,因此如果发现Cramfs不能正常读写的时候,可以检查一下内核参数设置。

Ramfs/Tmpfs

Ramfs也是Linus Torvalds开发的,Ramfs把所用文件都放在RAM里运行,通常存放一些临时或经常要修改的数据。不像ramdisk的固定大小,Ramfs的大小可调。

Tmpfs是基于内存的文件系统,因为它驻留在RAM中,所以读写都在RAM中,因此读写瞬间完成。文件系统大小可变。

JFFS2

RedHat基于JFFS开发的闪存文件系统。可读可压缩的日志型文件系统,提供崩溃/掉电安全保护,使用了基于哈希表的日志节点结构,加快了对节点操作速度,支持数据压缩,提供“写平衡”支持,是目前最流行的文件系统。缺点是:文件系统已满,或者接近于满时,JFFS2运行变慢,因为碎片收集的问题。

Yaffs

JFFS2类似的闪存文件系统,专为嵌入式系统使用Nand型闪存而设计的一种日志文件系统。比JFFS2少了一个功能,因此速度更快,对内存要求比较小。自带Nand芯片驱动,提供了直接访问文件系统的API。用户可以直接对文件系统操作。相反,JFFS2Nand闪存上表现得并不稳定,更适合Nor闪存。

NFS

SUN公司发展并推出的,是一个RPC service

参考文章

嵌入式Linux文件系统及其存储机制分析
嵌入式根文件系统的移植和制作详解
嵌入式文件系统

相关推荐