嵌入式文件系统——Cramfs、JFFS2和YAFFS2概述
来源:互联网 发布:中铁ca根证书 知乎 编辑:程序博客网 时间:2024/06/05 01:58
文件系统概述
所谓文件系统,实际上就是在一个具体的存储设备上任何文件的组织和目录。这个设备可能是各种RAM、NAND FLASH、NOR FLASH等DOC设备,还有以NAND FLASH为基础的各种存储卡等。目前,针对不同的设备和应用有很多文件系统可供选择,例如EXT2、TEMPFS、RAMDISK、CRAMFS、JFFS1/2、YAFFS1/2、XFS等。除此之外,还有很多供应商提供的商用文件系统。
随着32位CPU价格不断下跌,片上存储设备的容量相比越来越大,越来越多的嵌入式系统开始应用各种嵌入式操作系统。一般在嵌入式领域,只要应用到操作系统的必然会需要一个,甚至是多个文件系统。
由于嵌入式系统自身存在一些特殊要求,使得一些传统的文件系统 (如FAT、EXT2 等) 并不十分适合。专用的嵌入式文件系统应有一些自身的特性,如文件系统面对的储存介质特殊性、文件系统应具有的跨平台的安全性,以及整个系统的实时性等。Cramfs、 JFFS2、YAFFS2是3种性能优越,专用于嵌入式系统的文件系统。
CRAMFS文件系统
CRAMFS意为「compressed ROM file system,压缩只读闪存盘档案系统」,是一种开放式的 Linux 档案系统,是Linux的创始人Linus Torvalds开发的一种只读文件系统,采用了zlib压缩, 压缩比一般可以达到1:2,但仍可以做到高效的随机读取。
CRAMFS文件系统是专门针对闪存设计的只读压缩的文件系统,其容量上限为256M,采用zlib压缩,文件系统类型可以是EXT2或EXT3。如果使用RAMDISK方式来使用文件系统,那么在系统运行之后,首先得把flash上的映像文件全部解压到ram中,构造ramdisk环境,才可以运行程序,但有一个致命的弱点,在正常情下,同样的代码不仅在flash占用了空间,而且还在ram中占用极大的空间,这违背了嵌入式中节省资源的原则。cramfs文件系统并不需要一次性地将文件系统中的所有内容解压到ram中,而只是当系统需要访问某个位置的数据时,马上计算出该数据在cramfs中的位置,将其解压到ram中,然后通过内存访问来获取数据,cramfs中的解压缩之后的内存中的数据存放位置都是由cramfs文件系统本身来管理,用户并不需要实现过程,因此增加了透明度,给开发人员节约了时间。
在嵌入式的环境之下,内存和外存资源都需要节约使用。如果使用RAMDISK方式来使用文件系统,那么在系统运行之后,首先要把外存(Flash)上的映像文件解压缩到内存中,构造起RAMDISK环境,才可以开始运行程序。但是它也有很致命的弱点。在正常情况下,同样的代码不仅在外存中占据了空间(以压缩后的形式存在),而且还在内存中占用了更大的空间(以解压缩之后的形式存在),这违背了嵌入式环境下尽量节省资源的要求。
使用 cramfs就是一种解决这个问题的方式。cramfs是一个压缩式的文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存之中,而只是在系统需要访问某个位置的数据的时侯,马上计算出该数据在cramfs中的位置,将其实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数据。cramfs中的解压缩以及解压缩之后的内存中数据存放位置都是由cramfs文件系统本身进行维护的,用户并不需要了解具体的实现过程,因此这种方式增强了透明度,对开发人员来说,既方便,又节省了存储空间。
cramfs拥有以下一些特性:
- 采用实时解压缩方式,但解压缩的时侯有延迟。
- cramfs的数据都是经过处理、打包的,对其进先写操作有一定困难。所以cramfs不支持写操作,这个特性刚好适合嵌入式应用中使用Flash存储文件系统的场合。
- 在cramfs中,文件最大不能超过16MB。
- 支持组标识(gid),但是mkcramfs只将gid的低8位保存下来,因此只有这8位是有效的。
- 支持硬链接。但是cramfs并没有完全处理好,硬链接的文件属性中,链接数仍然为1.
- cramfs的目录中,没有“.”和“..”这两项。因此,cramfs中的目录的链接数通常也仅有一个。
- cramfs中,不会保存文件的时间戳(timestamps)信息。当然,正在使用的文件由于inode保存在内存中,因此其时间可以暂时地变更为最新时间,但是不会保存到cramfs文件系统中去。
- 当前版本的cramfs只支持PAGE_CACHE_SIZE为4096的内核。
JFFS2文件系统
JFFS意为「Journaling Flash File System」,该文件系统是瑞典Axis通信公司开发的一种基于Flash内存的日志文件系统。
该公司于1999年在GNU/Linux上发行了第一版JFFS文件系统,后来经过Redhat公司的发展,现在已经发行了第二个版本的JFFS2,其全部程序代码都是可供研究开发的。它在设计时充分考虑了嵌入式系统中Flash内存的读写特性,确保在系统掉电时,正在读写的文件不受影响;同时,其储存策略以及抗疲劳性等方面也在第一版的基础上进行了改进。目前,JFFS2广泛应用于嵌入式系统中,尤其是嵌入式μClinux操作系统中。
YAFFS2文件系统
YAFFS意为「Yet Another Flash File System」,是目前唯一一个专门为NAND Flash 设计的文件系统。
它采用了类日志结构,结合NAND Flash的特点,提供了损耗平衡和掉电保护机制,可以有效地避免意外掉电对文件系统一致性和完整性的影响。Aleph One公司于2002年5月发布了第一版YAFFS程序代码,用户可以很方便地在网站上下载到。第一版的YAFFS只支持每页512字节的NAND Flash。
YAFFS2是YAFFS的升级版,即支持每页512字节的NAND Flash内存,也支持每页2048字节的NAND Flash内存。
三种文件系统特点
Cramfs
Cramfs文件系统是一种只读文件系统,文件系统内容不可更改,设计思想遵循「只储存最少的信息」;甚至没有时间戳之类的信息,除了数据包的CRC校验信息外,几乎没有别的数据冗余。
JFFS2
JFFS2文件系统是典型的日志结构的文件系统,它储存的数据是日志式数据信息。JFFS2在Flash上只有两种类型的数据实体:j.ffs2_raw_inode和jffs2_raw dirent。前者包含文件的管理信息,后者用于描述文件在文件系统中的位置。真正的数据信息就保持在jffs2_raw_inode节点的后面,大部分管理的信息都是在系统挂载之后建立起来的。两种数据实体有着公共的文件头结构jffs2 _ unknown_node。在这个结构里,有个jint32 _t类型的hdr_crc变量,它代表文件头部中其它域的CRC校验值。这说明JFFS2文件系统使用的是CRC循环冗余校验码。
YAFFS2
YAFFS2文件系统是一种类日志文件系统,专用于NAND型Flash设备。其储存数据 的基本单位是chunk,相当于Flash的页。Chunk中的数据包括两部分:一部分是数据区,占用Flash的一页;另一部分是文件信息及冗余数据区,占用Flash页的OOB区。其冗余数据主要是ECC校验资料,对于小页(每页512字节)的Flash,每页有6字节的ECC数据;对于大页(每页2048字节)的Flash,每页有24字节的ECC资料。
- 嵌入式文件系统——Cramfs、JFFS2和YAFFS2概述
- 嵌入式 CRAMFS + YAFFS2文件系统的制作和注意事项
- Cramfs、JFFS2、YAFFS2
- 嵌入式系统文件系统概述及对比分析(包含jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs)
- jffs2文件系统——概述
- jffs2文件系统——概述 .
- Cramfs、JFFS2、YAFFS2全面对比
- 制作CRAMFS + YAFFS2文件系统
- 制作CRAMFS + YAFFS2文件系统
- 嵌入式文件系统 jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs
- 嵌入式系统文件系统比较 jffs2, yaffs, cramfs, romfs, ramdisk,
- 嵌入式系统文件系统比较 jffs2, yaffs, cramfs, romfs, ramdisk,
- 嵌入式: jffs2,yaffs2,logfs,ubifs文件系统性能分析
- 嵌入式: jffs2,yaffs2,logfs,ubifs文件系统性能分析
- 嵌入式: jffs2,yaffs2,logfs,ubifs文件系统性能分析
- 嵌入式:Linux jffs2,yaffs2,logfs,ubifs文件系统性能分析
- 嵌入式: jffs2,yaffs2,logfs,ubifs文件系统性能分析
- 嵌入式: jffs2,yaffs2,logfs,ubifs文件系统性能分析
- 天猫schema模式下发布商品
- 安卓首页实现广告循环播放广播
- 双十二最大赢家 乐视手机成发展最快国产品牌
- MYSQL性能优化
- 【jQuery】使用remove()和empty()方法删除元素
- 嵌入式文件系统——Cramfs、JFFS2和YAFFS2概述
- Hibernate中的分页显示查询结果
- OC 学习 习题 更多
- python科学计算库安装
- powercmd有内存泄漏
- 94,autorelease的介绍
- 双十二最大赢家 乐视手机成发展最快国产品牌
- Redis的常用命令及高级应用
- 安装Perl语言模块