Cramfs、JFFS2、YAFFS2的全面对比
Cramfs、JFFS2、YAFFS2的全面对比http://blog.csdn.net/daofengdeba/article/details/7721340
由于嵌入式系统自身存在一些特殊要求,使得一些传统的文件系统(如FAT、EXT2等) 并不十分适合。专用的嵌入式文件系统应有一些自身的特性,如文件系统面对的储存介质特殊性、文件系统应具有的跨平台的安全性,以及整个系统的即时性等。本文介绍了3种源码开放的嵌入式文件系统Cramfs、JFFS2、YAFFS2,详细分析比较了这3种文件系统的主要性能,并根据分析结果指出了各自的适用领域。
资料安全
Cramfs文件系统是一种只读文件系统,文件系统内容不可更改,设计思想遵循「只储存最少的信息」;甚至没有时间戳之类的信息,除了资料包的CRC校验信息外,几乎没有别的资料冗余。
JFFS2文件系统是典型的日志结构的文件系统,它储存的资料是日志式资料信息。JFFS2在Flash上只有两种类型的资料实体:j.ffs2_raw_inode和jffs2_raw dirent。前者包含文件的管理信息,后者用于描述文件在文件系统中的位置。真正的资料信息就保持在jffs2_raw_inode节点的后面,大部分管理的信息都是在系统挂载之后建立起来的。两种资料实体有着公共的文件头结构jffs2 _ unknown_node。在这个结构里,有个jint32 _t类型的hdr_crc变量,它代表文件头部中其他域的CRC校验值。这说明JFFS2文件系统使用的是CRC循环冗余校验码。[文件管理信息 + 文件在文件系统中的位置 + 真正的资料]
YAFFS2文件系统是一种类日志文件系统,专用于NAND型Flash设备。其储存资料的基本单位是chunk,相当于Flash的页。Chunk中的资料包括两部分:一部分是资料区,占用Flash的一页;另一部分是文件信息及冗余资料区,占用Flash页的OOB区。其冗余资料主要是ECC校验资料,对于小页(每页512位元组)的Flash,每页有6位元组的ECC资料;对于大页(每页2048位元组)的Flash,每页有24位元组的ECC资料。[专用于nand, 真正的资料放在flash页, 文件信息和冗余资料放在Flash页的OOB区]
掉电保护:
1.检查每个节点CRC校验码的合法性,在记忆体中为每个节点每个节点分配必需的相关的结构;
2.扫瞄每个i节点的物理节点链表,建立链接;
3.释放扫瞄过程中使用的临时信息。
体来说,当一个擦写块上都是合法(valid)的节点时,它会在clean_list上;当一个擦写块包含至少一个过时(obsolete)的节点时,它
会在dirty_list上;当一个擦写块被擦写完毕,并被写入Cleanmarker节点后,它会在free_list上。正是以这些链表为基础,
JFFS2文件系统才可以实现垃圾回收、损耗平衡等性能。文件系统挂载时YAFFS2在记忆体中建立一个层次结构的索引,可以看作是一个文件树。树的最底层指向实际存放文件的页面,高层则是一层层的索引目录。文件树是通过一个联合结构的节点来实现的。联合结构是固定大小(32位元组),当它处于最底层时, 由16个2位元组入口来查找页面ID;当处于其它层时,由8个4位元组指针指向其他更低层的节点。每个文件对应一个文件树,便于检索。在以NAND
Flash为储存介质的嵌入式系统中,YAFFS2的文件读写性能都优于JFFS2。[YAFFS2比JFFS2启动速度快,读写性能也更优]


1. Cramfs是最早的一种嵌入式文件系统,它只储存了最少的信息,对文件内容进行了压缩,运行速度比较
快。但是由于其不能写入,不支援超过16 MB大小的文件,因此广泛地应用于储存空间小、文件系统内容
较少并且不需要用户写入的嵌入式系统中。
2. JFFS2是一种较早的Flash专用文件系统。目前已有很多JFFS2应用于μClinux以及嵌入式Linux的例子。事
实上,它已经成为新版Linux中的一种标准文件系统。
同时它对NOR Flash和NAND Flash提供支援,针对两种Flash设备共同的特性,提供掉电保护和损耗平衡等
功能,可供用户读写,十分适合于同时用到这两种Flash设备的嵌入式系统。
3. YAFFS2是专为NAND Flash设计的文件系统,它充分考虑了NAND Flash设备的特性,支援ECC校验,提
供掉电保护和损耗平衡功能,运行和挂载速度都比JFFS2要快。它支援作业系统广泛,包括常见的嵌入
式Linux、WinCE、μClinux。由于它提供Direct界面,因此稍加修改也可使用在没有作业系统的嵌入式
系统中。目前,被广泛应用于使用NAND Flash作为储存设备的嵌入式系统中。
Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。
1. 基于FLASH的文件系统
(1) Jffs2: 日志闪存文件系统版本2 (Journalling Flash FileSystem v2)
(2) yaffs:Yet Another Flash File System
(3) Cramfs:Compressed ROM File System
Cramfs映像通常是放在Flash中,但是也能放在别的文件系统里,使用loopback 设备可以把它安装别的文件系统里。
(4) Romfs
传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以 XIP(eXecute In Place,片内运行)方式运行,在系统运行时,节省RAM空间。uClinux系统通常采用Romfs文件系统。
其他文件系统:fat/fat32也可用于实际嵌入式系统的扩展存储器(例如PDA, Smartphone, 数码相机等的SD卡),这主要是为了更好的与最流行的Windows桌面操作系统相兼容。ext2也可以作为嵌入式Linux的文件系统,不过将它用于 FLASH闪存会有诸多弊端。
2. 基于RAM的文件系统
(1) Ramdisk
Ramdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根 文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。
在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。
(2)ramfs/tmpfs
Ramfs是Linus Torvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。
Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。
Ramfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。
Tmpfs的一个缺点是当系统重新引导时会丢失所有数据。
3. 网络文件系统NFS (Network File System)
NFS是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。
以上讨论的都是基于存储设备的文件系统(memory-based file system),它们都可用作Linux的根文件系统。实际上,Linux还支持逻辑的或伪文件系统(logical or pseudo file system),例如procfs(proc文件系统),用于获取系统信息,以及devfs(设备文件系统)和sysfs,用于维护设备文件。
不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统 需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为 RAM(DRAM, SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs等。
Cramfs、JFFS2、YAFFS2的全面对比的更多相关文章
- 嵌入式: jffs2,yaffs2,logfs,ubifs文件系统性能分析
在嵌入式领域,FLASH是一种常用的存储介质,由于其特殊的硬件结构,所以普通的文件系统如ext2,ext3等都不适合在其上使用,于是就出现了专门针对FLASH的文件系统,比较常用的有jffs2,yaf ...
- 转:嵌入式: jffs2,yaffs2,logfs,ubifs文件系统性能分析
原文地址: http://blog.chinaunix.net/uid-23381466-id-3411483.html. 在嵌入式领域,FLASH是一种常用的存储介质,由于其特殊的硬件结构,所以普通 ...
- u-boot-2010.09移植(B)
前面我们的u-boot只是在内存中运行,要想在nandflash中运行,以达到开机自启的目的,还需作如下修改 一.添加DM9000网卡支持 1.修改board/fl2440/fl2440.c中的boa ...
- 嵌入式linux加载引导内核和根文件系统的方法
总体来说,嵌入式Linux内核和根文件的引导与PC机差不多.嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NAN ...
- TI Davinci DM6446开发攻略——根文件系统的裁剪和移植
一.补充文件系统知识 Linux根文件系统是存放tool软件.lib文件.script(脚本).配置文件.其他特殊文件.自己开发的应用程序的地方.嵌入式linux的根文件系统rootfs就像windo ...
- 基于Linux的嵌入式文件系统构建与设计
摘 要:Linux是当今一种十分流行的嵌入式操作系统.由于其具有执行效率高.占用空间小.实时性能优良和可扩展性强等特点,因此被广泛应用于工业控制领域.该文对其文件系统进行了简单的介绍,结合嵌入式系统应 ...
- linux内核(二)内核移植(DM365-DM368开发攻略——linux-2.6.32的移植)
一.介绍linux-2.6.32: Linux-2.6.32的网上介绍:增添了虚拟化内存 de-duplicacion.重写了 writeback 代码.改进了 Btrfs 文件系统.添加了 ATI ...
- OWASP固件安全性测试指南
OWASP固件安全性测试指南 固件安全评估,英文名称 firmware security testing methodology 简称 FSTM.该指导方法主要是为了安全研究人员.软件开发人员.顾问. ...
- Linux学习 :Uboot, Kernel, 根文件系统初步分析
1.U-Boot启动内核的过程可以分为两个阶段: 1)第一阶段的功能 硬件设备初始化 加载U-Boot第二阶段代码到RAM空间 设置好栈 跳转到第二阶段代码入口 2)第二阶段的功能 初始化本阶段使用的 ...
随机推荐
- Multiwii 代码解读
GPS部分 GPS_angle[ROLL] = (nav[LON]*cos_yaw_x - nav[LAT]*sin_yaw_y) /10;GPS_angle[PITCH] = (nav[LON ...
- TCP的阻塞和重传
TCP的阻塞和重传 TCP的阻塞和重传机制 网络拥堵 现在网络上大部分的网络请求都是以TCP的方式进行传输的了.网络链路是固定的,各种链路情况也是不一样的.网络拥堵一直是TCP协议设计和使用的时候尽力 ...
- HDU 5054 Alice and Bob
#include <cstdio> int main(){ int n,m,x,y; while(~scanf("%d%d%d%d",&n,&m,&am ...
- ArcMAp对线要素进行平滑处(打断)
一:工具简单介绍 -- ArcMAp10.1的高级编辑工具中提供了对线/面要素进行概括/平滑处理的工具. 概括工具.平滑工具分别例如以下:(首先得开启编辑状态 --- 才干够对要素的属性进行更改).选 ...
- SMACSS:一个关于CSS的最佳实践-1.Overview
什么是SMACSS? SMACSS(发音"smacks"),全称Scalable and Modular Architecture for CSS.顾名思义,SMACSS是一个可扩 ...
- 最大流之sap算法
若有向图G = (V , E)满足下列条件: 1.有且仅有一个顶点S,它的入度为 0 ,这个顶点称为源点. 2.有且仅有一个顶点T,它的出度为 0 ,这个顶点称为汇点. 3.每一条弧都有一个非负数,叫 ...
- js正则语法
整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$".只能输入至少n位的数 ...
- PHP练习项目笔记之COOKIES
主要是在登录和退出的时候,设置cookies.来保存登录和安全退出 1:在登录页面设置 //设置cookies的值 _setcookies($_rows['tg_username'], $_rows[ ...
- Windows下安装Apache2.4+PHP5.4+Mysql5.7
注:文中所写的安装过程均在Win7 x86下通过测试,提供的百度云下载链接均为32位安装包,如需Apache和PHP的64位安装包请从官网下载! 一.安装Apache2.4.12 Apache官方下载 ...
- Python BeautifulSoup中文乱码问题的2种解决方法
解决方法一: 使用python的BeautifulSoup来抓取网页然后输出网页标题,但是输出的总是乱码,找了好久找到解决办法,下面分享给大家首先是代码 from bs4 import Beautif ...