嵌入式文件系统存储介质一般是Flash芯片,常用的嵌入式文件系统比较出名的有Cramfs文件系统,JFFS文件系统和Yaffs文件系统
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,支持组标志(gid)。但是mkCramfs只将低8位保存下来,因为只有这8位是有效的
5,支持硬链接。但是Cramfs并没有完全出来好,硬链接的文件属性中,链接数仍然为1
6,Cramfs的目录中,没有"."和".."这两项。因此,Cramfs中的目录的链接数通常也仅有一个
7,Cramfs中,不会保存文件的时间戳信息。当然,正在使用的文件由于inode保存在内存中,因此其时间可以暂时的变为更新时间,但是不会保存的Cramfs中
8,当前版本的Cramfs只支持PAGE_CACHE_SIZE为4096KB的内核。因此,如果发现Cramfs不能正常读写的时候,可以检查一下内核参数设置
Ramfs/Tmpfs
Ramfs也是Linus Torvalds开发的,Ramfs把所用文件都放在RAM里运行,通常存放一些临时或经常要修改的数据。不像ramdisk的固定大小,Ramfs的大小可调。
Tmpfs是基于内存的文件系统,因为它驻留在RAM中,所以读写都在RAM中,因此读写瞬间完成。文件系统大小可变。但是重新引导数据丢失
JFFS2
是RedHat基于JFFS开发的闪存文件系统。可读,可压缩的日志型文件系统,提供崩溃/掉电安全保护,使用了基于哈希表的日志节点结构,加快了对节点操作速度,支持数据压缩,提供“写平衡”支持,是目前最流行的文件系统。缺点是:文件系统已满,或者接近于满时,JFFS2运行变慢,因为碎片收集的问题
Yaffs
和jffs2类似的闪存文件系统,专为嵌入式系统使用Nand型闪存而设计的一种日志文件系统。比jffs2少了一个功能,因此速度更快,对内存要求比较小。自带Nand芯片驱动,提供了直接访问文件系统的API。用户可以直接对文件系统操作。相反,Jffs2在Nand闪存上表现得并不稳定,更适合Nor闪存
NFS
是SUN公司发展并推出的。是一个RPC service