嵌入式文件系统的存储介质一般是Flash芯片。常用的嵌入式文件系统是比较知名的三种文件系统:Cramfs、JFFS、Yaffs。闪存芯片是嵌入式系统中广泛使用的主流存储器。其主要特点是整/扇区擦除、字节编程、低功耗、高密度、体积小。Flash分为Nor型和Nand型:Nor型速度快,价格高,地址线和数据线分开,可以像SRAM一样接数据线;Nand型单元尺寸是Nor型的一半,生产容易,价格低廉。嵌入式Flash文件系统要求1.断电安全。2.平均使用。Flash存储扇区的擦除次数是有限的。文件系统使用Flash必须充分考虑这个特性。Flash的各个扇区最好均匀使用,以延长Flash的使用寿命。3.高效的垃圾收集。各种内存分配使用一段时间后,会出现空缺和碎片化的数据,这就需要垃圾回收来保证内存空间的高效使用。闪存是以扇区为单位的,垃圾回收也应该以扇区为单位。嵌入式Flash文件系统恢复必须先移动扇区数据,然后擦除整个扇区。Linux文件系统分为三个层次1.上层用户空间的应用程序对文件系统的系统调用;2.虚拟文件系统VFS;3、VFS挂载的各种实际文件系统。常用文件系统ROMFS是一种常用的文件系统。简单紧凑,只读,不支持动态擦除和保存。所有的文件数据都是顺序存储的,所以这种文件系统格式支持应用程序运行在XIP(片内执行)模式下,系统运行时可以获得可观的RAM空间。UCLinux通常使用Romfs文件系统。CramfsLinusTorvalds开发的可读文件系统。每个页面单独压缩,可以随机访问,压缩比高达2:1。压缩存储,运行时解压。不支持XIP模式,需要将所有应用程序复制到RAM中才能运行。因为存储,所以不会消耗太多内存。快速高效。只读特性有利于保护文件系统免受损坏,但只读使其无法扩展。Cramfs镜像文件通常放在Flash中,但也可以放在其他文件系统中,可以使用loopback设备安装到其他文件系统中。使用mkCramfs工具创建Cramfs镜像文件。特点:1.采用实时解压,但解压有延迟;2、Cramfs数据经过处理打包,写入难度大,不支持写操作。该特性恰好适用于嵌入式应用中使用Flash存储文件系统的场合;3、Cramfs中文件大小最大不能超过16MB;4.支持groupflags,但是mkCramfs只保存低8位,因为只有这8位有效;5、支持硬链接;6.没有。因为文件的inode存放在内存中,所以可以暂时将其时间改为更新时间,但不会保存在Cramfs中;8、当前版本的Cramfs只支持PAGE_CACHE_SIZE为4096KB的内核,所以如果发现Cramfs无法正常读写,此时可以查看内核参数设置。Ramfs/TmpfsRamfs也是由LinusTorvalds开发的。Ramfs在RAM中运行所有文件,通常存储一些临时或经常修改的数据。与固定大小的ramdisk不同,Ramfs的大小是可调的。Tmpfs是一个基于内存的文件系统。因为驻留在RAM中,读写都在RAM中,所以读写都是瞬间完成的。文件系统大小是可变的。JFFS2是RedHat基于JFFS开发的flash文件系统。可读可压缩的日志文件系统,提供crash/power-off安全保护,采用基于哈希表的日志节点结构,加速节点运行,支持数据压缩,提供“写平衡”支持,目前最流行的文件系统。缺点是:当文件系统满了,或者接近满的时候,JFFS2因为垃圾回收的问题运行的比较慢。类似于Yaffs和jffs2的flash文件系统,是为嵌入式系统设计的日志文件系统,使用Nand型闪存。它比jffs2少了一项功能,因此速度更快且需要的内存更少。自带Nand芯片驱动,提供API直接访问文件系统。用户可以直接对文件系统进行操作。相反,Jffs2在Nand闪存上不稳定,更适合Nor闪存。NFS由SUN开发推出,是一种RPC服务。参考文章嵌入式Linux文件系统及其存储机制浅析嵌入式根文件系统移植制作详解嵌入式文件系统
