由 于嵌入式系统自身存在一些特殊要求使得一些传
统的文件系统 (如FAT、EXT2等) 并不十分适合。专
用的嵌入式文件系统应有一些自身的特性如文件系统
面对的储存介质特殊性、文件系统应具有的跨平台的安
全性以及整个系统的实时性等。本 文介绍了3种源
码开放的嵌入式文件系统Cramfs、JFFS2、YAFFS2
详细分析比较了这3种文件系统的主要性能并根据分
析结果指出了各自的适 用领域 
 Cramfs、JFFS2、YAFFS2是3种性能优越专用于嵌入式系
统的文件系统。本文通过对这3种文件系统的设计原理和主要性
能进行分析与比较归 纳出各自的选型依据据和适用领域。
 
三种文件系统的介绍 Cramfs         Cramfs是Linux的创始人Linus Torvalds开发的一种只读
文件系统采用了zlib压缩压缩比一般可以达到12但仍
可以做到高效的随机读取。在Linux系统中通常把不需 要经
常修改的目录压缩存放在系统引导时再将压缩文件解开。
Cramfs并不需要一次性地把文件系统的所有内容都解压到内存
中而只是在系统需要访问某 个位置的数据时马上计算出该数据在Cramfs中的位置将其解压缩到内存之中然后通过对
内存的访问来获取需要读取的数据。
  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内存。
  Flash内存 Flash设备特点
        相对于传统储存介质Flash内存具有如下优点  
˙ 可靠性高采用Flash为储存介质可以确保100万次以上的
可靠写入  
˙ 储存速度快写入∕读取均可接近1Mb/s  
˙ 使用方便具有很强的环境适应能力。
 
        但是由于其制造制程的问题还存在以下缺点  
˙ 读取和写入以页为单位擦除以块为单位  
˙ 易出现随机坏块  
˙ 块与块之间使用不均衡会导致寿命问题。
  NOR Flash和NAND Flash
        基于NOR技术的Flash内存是最早出现的Flash内存它
具有以下特点  
˙ 程序和数据可存放在同一芯片上拥有独立的数据总线和地址
总线支持快速随机读取允许系统直接从Flash中读取程序代码并执行而无需先将程序代码下载至RAM中再执行  
˙ 可以单字节或单字程序化但必须以块为单位进行擦除操作。
 
        由于NOR Flash内存的擦除和程序化速度较慢而块尺寸
又比较大因此擦除和程序化操作所花费的时间很长。目前
NOR Flash内存大多只用于储存嵌入式系统的启动程序代码。
 
        NAND Flash内存可以顺序读取储存单元的内容由于制
程上的进步其容量越来越大单位价格越来越便宜正逐步成
为Flash内存的主流。NAND Flash内存具有以下特点
˙ 以页为单位进行读写操作以块为单位进行擦除操作页大小
为512字节或2048字节每页不仅有  
数据区还有几十字节的空闲区。  
˙ 数据、地址采用同一总线接口串行读取。  
˙ 芯片尺寸小接脚少单位成本低。  
˙ 芯片内含有失效块并且在使用过程中可能会出现随机坏块。  
       
        表1 比较了这两种Flash内存的性能参数。
   三种嵌入式文件系统主要性能分析与比较         数据安全、运行速度、占用资源、使用范围等是嵌入式文
件系统的主要性能指针。下面从这几个方面入手对这三种嵌入
式文件系统进行分析与比较。
  数据安全         当前的嵌入式系统主要使用固态Flash芯片作为储存设备。
由于Flash设备自身的特点以及嵌入式系统工作环境的复杂多
样性如何保证数据的安全是嵌入 式文件系统首先要考虑的问
题。数据安全主要包括数据冗余和掉电保护等部分。
  资料冗余
        提高数据安全性的最有效措施是增加数据的冗余而数据的大量冗余又给维护资料一致性
带来困难。对此应进行合理取舍在尽量降低冗余的前提下确保数据的安全性和可靠性。  
        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资 料。
  掉电保护         掉电保护的目的是在系统意外失去供电的情况下保证
系统运行状态的确定性以及记录数据的完整性当系统供电恢复
后现场数据可以及时恢复避免系统产生 混乱。很多文件系
统出于运行速度考虑在程序运行过程中常将数据暂存在
SDRAM中一旦系统意外掉电往往会造成数据丢失。
 
        Cramfs文件系统将文件系统内容解压到内存中由于其不
能写入文件系统的内容无法更改因此不存在掉电保护的问题。
 
        JFFS2是一种日志结构文件系统因此不论电源以何种方
式在哪个时刻停止供电JFFS2都能保持数据完整性。当系统
遭受不正常断电后重新启动 时JFFS2自动将系统恢复到断电
前最后一个稳定状态。需要注意的是文件系统在最后一个稳定
状态之后发生的任何改变都无法进行恢复。
 
        YAFFS2是一种类日志文件系统可以在意外掉电重启后
自动提供可靠的数据记录防止文件系统的崩溃。它使用独立的
日志文件跟踪文件系统内容的变化。举 例来说当应用程序需
要写Flash的某一页时它首先修改的是存放于文件日志中的一
块镜像只有当日志中的镜像复制到文件系统中后数据才真实
地写到该 页上。当发生意外掉电重启后YAFFS2没有像JFFS2
那样使用旧文件完全代替新写文件而是选择用新文件完全代替旧的文件或者已写部分使用新文 件未写部分使用旧文件。
这种方式增强了掉电时未完全写入文件的安全性能特别是当意
外掉电发生在数据区时意外掉电时的文件几乎被完好地保存下
来。
  运行速度         运行速度可以从以下几个方面考察文件系统挂载速度
读文件速度写文件速度等。这里预设的储存介质是NAND
Flash。
 
        一般而言压缩的、只读的文件系统在启动时需要将文件
系统解压到SDRAM中这在一定程度上会减缓文件系统挂载速
度。但是Cramfs文件系统在设计 时充分考虑了系统挂载的时
间并没有一次性地把文件系统的所有内容都解压到内存中而
只是在系统需要访问某个位置的数据时迅速计算出该数据在
Cramfs中的位置将其解压缩到内存之中再进行访问操作。
由于其读文件速度只是找出文件地址以及访问内存的操作所以
无论是挂载速度还是读文 件速度 Cramfs文件系统都比
JFFS2和YAFFS2文件系统要快。
 
        JFFS2文件系统的挂载可以分为以下几个步骤进行  
1. 检查每个节点CRC校验码的合法性在内存中为每个节点每个节点分配必需的相关的结构  
2. 扫瞄每个i节点的物理节点链表建立链接  
3. 释放扫瞄过程中使用的临时信息。
 
        可以看出这个过程还是很复杂的更重要的是在JFFS2
文件系统被挂载时需要对整个Flash储存区域进行扫瞄这就
耗费了大量的时间因此 JFFS2文件系统的开机速度非常缓慢。
与JFFS2相比YAFFS2减少了一些功能挂载时只需扫瞄Flash
内存的空闲区根据从OOB备份资 料区中读取的yaffs_tags
信息判读是文件头页面还是资料页面再根据相应信息在内存中
为每个文件建立一个对应的yaffs_object对 象。由于YAFFS2
在系统加载时只需扫瞄各个页面的OOB区即可建立起整个文
件系统的结构而不需要像JFFS2那样扫瞄整个Flash设备
因此大 大加快了文件系统的启动速度。但是YAFFS2仍然要
求对整个Flash设备所有页的空闲进行扫瞄这就导致当Flash
设备储存空间变大时系统扫瞄 时间会直线上升。
 
        在文件系统运行时JFFS2需要维护几个链表来管理擦写
块。根据擦写块上的内容一个擦写块可能会在不同的链表上。
具体来说当一个擦写块上都是合法 valid的节点时它会
在clean_list上当一个擦写块包含至少一个过时obsolete
的节点时它会在dirty_list上当 一个擦写块被擦写完毕并被写入Cleanmarker节点后它会在free_list上。正是以这些
链表为基础 JFFS2文件系统才可以实现垃圾回收、损耗平衡
等性能。文件系统挂载时YAFFS2在内存中建立一个层次结构
的索引可以看作是一个文件树。树的最底 层指向实际存放文
件的页面高层则是一层层的索引目录。文件树是通过一个联合
结构的节点来实现的。联合结构是固定大小32字节当它
处于最底层时 由16个2字节入口来查找页面ID当处于其
它层时由8个4字节指针指向其它更低层的节点。每个文件对
应一个文件树便于检索。在以NAND Flash为储存介质的嵌入
式系统中YAFFS2的文件读写性能都优于JFFS2。
  占用资源         在嵌入式系统中内存和外部内存资源匮乏需要节约使
用。因此占用的内存和外部内存资源量也是衡量嵌入式文件系统
的一个重要指针。
 
        如果使用RAMDISK方式运行文件系统那么在系统运行
之后首先要把Flash上的映像文件解压到内存中才可以开始
运行程序。这样同样的程序代码 不仅在外部内存中占据了空
间而且由于解压缩还在内存中占用了更大的空间。Cramfs
虽然是一个压缩式的文件系统但前面已介绍过它并不需要一
次性地将所有内容解压到内存之中。由于其对文件内容的压缩因此无论是外部内存还是内存 Cramfs都比JFFS2和YAFFS2
占用更少的资源。
 
        JFFS2将文件系统的数据和原数据以节点的形式储存在
Flash上其冗余数据只是节点头部的CRC校验码并且在储
存时对节点的数据进行了压缩。与之 相比YAFFS2不仅储存
了页数据的ECC校验码并且没有Flash设备OOB区储存数
据而是用来储存页节点信息。其映像也是由若干个页面组成
没 有对数据进行压缩因此YAFFS2文件系统映像大大超过了
JFFS2文件系统映像。实验表明普通YAFFS2映像的大小约
为同样JFFS2映像大小的 2倍。当文件系统在内存中运行时
JFFS2在内存中定义了若干链表YAFFS2在内存中为每个文
件创建一个文件树。尽管为每个文件建立一个文件 树需要消耗
掉不少的内存但是比起维护JFFS2所需的链表消耗的内存
还是少一些。在实际运行中YAFFS2占用的内存要小于JFFS2
文件系 统。
  使用范围         要使用Cramfs或JFFS2文件系统离不开MTD驱动程
序层的支持。MTDMemory Technology Device是Linux中
的一个储存设备通用界面层。虽然也可以建立在RAM上但它
是专为基于Flash的设备而设计的。MTD包含特定Flash 芯片的驱动程序 Flash芯片驱动向上层提供读、写、擦除等基本
的Flash操作方法。MTD对这些操作进行封装后向用户层提供
MTD char和MTD block类型的设备。MTD char类型的设备包
括/dev/mtd0等可以对Flash的原始字符访问MTD block类
型的设备包括/dev/mtdblock0等将Flash模拟成块设备这样
就可以在这些块设备上创建Cramfs或JFFS2等格式的文 件系
统。在对用户层的界面上 Cramfs或JFFS2文件系统还需要
操作系统VFS虚拟文件系统的支持。 
 
        同样YAFFS2文件系统支持使用MTD驱动层和VFS层
这也是一般在嵌入式Linux或者μClinux操作系统中使用
YAFFS2文件系统的常用 方法。除此之外YAFFS2还带有
NAND Flash芯片驱动并为嵌入式系统提供了直接访问文件系
统的API用户可以不使用Linux中的MTD和VFS直接对文
件进行操作。图1 为嵌入式系统的文件系统结构。
  
        YAFFS2中的YAFFS2 Direct提供了直接的文件系统界
面因此在那些没有VFS层的嵌入式系统中也可使用YAFFS2。
YAFFS2文件系统的使用范围要比Cramfs和 JFFS2文件系统
广泛但是需要注意的是YAFFS2只能用在NAND Flash储存
设备上。
  结论         这3种嵌入式文件系统在嵌入式系统中的应用非常广泛
但是又具有各自的特点。表2 比较了3种文件系统的主要性能
并归纳出各自最适用的领域。
  
具体分析如下  
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作为储存设备的
嵌入式系统中。
 
        针对具体应用可以在考察各种文件系统特点的基础上
选择更适合自身系统的一种文件系统解决方案。比如在许多以
NAND Flash为储存介质的应用系统中都用到「Cramfs
YAFFS2」文件系统。以Cramfs作为根文件系统既提高了启
动速度也能保护根文件不 受破坏使用YAFFS2作为用户文
件系统在保证用户可以自由读写文件的基础上提高了文件系
统的安全性和运行速度不失为一种优良的嵌入式文件系统解
决方案。 

由 于嵌入式系统自身存在一些特殊要求使得一些传

统的文件系统 (如FAT、EXT2等) 并不十分适合。专

用的嵌入式文件系统应有一些自身的特性如文件系统

面对的储存介质特殊性、文件系统应具有的跨平台的安

全性以及整个系统的实时性等。本 文介绍了3种源

码开放的嵌入式文件系统Cramfs、JFFS2、YAFFS2

详细分析比较了这3种文件系统的主要性能并根据分

析结果指出了各自的适 用领域 

 Cramfs、JFFS2、YAFFS2是3种性能优越专用于嵌入式系

统的文件系统。本文通过对这3种文件系统的设计原理和主要性

能进行分析与比较归 纳出各自的选型依据据和适用领域。

 

三种文件系统的介绍 Cramfs         Cramfs是Linux的创始人Linus Torvalds开发的一种只读

文件系统采用了zlib压缩压缩比一般可以达到12但仍

可以做到高效的随机读取。在Linux系统中通常把不需 要经

常修改的目录压缩存放在系统引导时再将压缩文件解开。

Cramfs并不需要一次性地把文件系统的所有内容都解压到内存

中而只是在系统需要访问某 个位置的数据时马上计算出该数据在Cramfs中的位置将其解压缩到内存之中然后通过对

内存的访问来获取需要读取的数据。

  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内存。

  Flash内存 Flash设备特点

        相对于传统储存介质Flash内存具有如下优点  

˙ 可靠性高采用Flash为储存介质可以确保100万次以上的

可靠写入  

˙ 储存速度快写入∕读取均可接近1Mb/s  

˙ 使用方便具有很强的环境适应能力。

 

        但是由于其制造制程的问题还存在以下缺点  

˙ 读取和写入以页为单位擦除以块为单位  

˙ 易出现随机坏块  

˙ 块与块之间使用不均衡会导致寿命问题。

  NOR Flash和NAND Flash

        基于NOR技术的Flash内存是最早出现的Flash内存它

具有以下特点  

˙ 程序和数据可存放在同一芯片上拥有独立的数据总线和地址

总线支持快速随机读取允许系统直接从Flash中读取程序代码并执行而无需先将程序代码下载至RAM中再执行  

˙ 可以单字节或单字程序化但必须以块为单位进行擦除操作。

 

        由于NOR Flash内存的擦除和程序化速度较慢而块尺寸

又比较大因此擦除和程序化操作所花费的时间很长。目前

NOR Flash内存大多只用于储存嵌入式系统的启动程序代码。

 

        NAND Flash内存可以顺序读取储存单元的内容由于制

程上的进步其容量越来越大单位价格越来越便宜正逐步成

为Flash内存的主流。NAND Flash内存具有以下特点

˙ 以页为单位进行读写操作以块为单位进行擦除操作页大小

为512字节或2048字节每页不仅有  

数据区还有几十字节的空闲区。  

˙ 数据、地址采用同一总线接口串行读取。  

˙ 芯片尺寸小接脚少单位成本低。  

˙ 芯片内含有失效块并且在使用过程中可能会出现随机坏块。  

       

        表1 比较了这两种Flash内存的性能参数。

   三种嵌入式文件系统主要性能分析与比较         数据安全、运行速度、占用资源、使用范围等是嵌入式文

件系统的主要性能指针。下面从这几个方面入手对这三种嵌入

式文件系统进行分析与比较。

  数据安全         当前的嵌入式系统主要使用固态Flash芯片作为储存设备。

由于Flash设备自身的特点以及嵌入式系统工作环境的复杂多

样性如何保证数据的安全是嵌入 式文件系统首先要考虑的问

题。数据安全主要包括数据冗余和掉电保护等部分。

  资料冗余

        提高数据安全性的最有效措施是增加数据的冗余而数据的大量冗余又给维护资料一致性

带来困难。对此应进行合理取舍在尽量降低冗余的前提下确保数据的安全性和可靠性。  

        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资 料。

  掉电保护         掉电保护的目的是在系统意外失去供电的情况下保证

系统运行状态的确定性以及记录数据的完整性当系统供电恢复

后现场数据可以及时恢复避免系统产生 混乱。很多文件系

统出于运行速度考虑在程序运行过程中常将数据暂存在

SDRAM中一旦系统意外掉电往往会造成数据丢失。

 

        Cramfs文件系统将文件系统内容解压到内存中由于其不

能写入文件系统的内容无法更改因此不存在掉电保护的问题。

 

        JFFS2是一种日志结构文件系统因此不论电源以何种方

式在哪个时刻停止供电JFFS2都能保持数据完整性。当系统

遭受不正常断电后重新启动 时JFFS2自动将系统恢复到断电

前最后一个稳定状态。需要注意的是文件系统在最后一个稳定

状态之后发生的任何改变都无法进行恢复。

 

        YAFFS2是一种类日志文件系统可以在意外掉电重启后

自动提供可靠的数据记录防止文件系统的崩溃。它使用独立的

日志文件跟踪文件系统内容的变化。举 例来说当应用程序需

要写Flash的某一页时它首先修改的是存放于文件日志中的一

块镜像只有当日志中的镜像复制到文件系统中后数据才真实

地写到该 页上。当发生意外掉电重启后YAFFS2没有像JFFS2

那样使用旧文件完全代替新写文件而是选择用新文件完全代替旧的文件或者已写部分使用新文 件未写部分使用旧文件。

这种方式增强了掉电时未完全写入文件的安全性能特别是当意

外掉电发生在数据区时意外掉电时的文件几乎被完好地保存下

来。

  运行速度         运行速度可以从以下几个方面考察文件系统挂载速度

读文件速度写文件速度等。这里预设的储存介质是NAND

Flash。

 

        一般而言压缩的、只读的文件系统在启动时需要将文件

系统解压到SDRAM中这在一定程度上会减缓文件系统挂载速

度。但是Cramfs文件系统在设计 时充分考虑了系统挂载的时

间并没有一次性地把文件系统的所有内容都解压到内存中而

只是在系统需要访问某个位置的数据时迅速计算出该数据在

Cramfs中的位置将其解压缩到内存之中再进行访问操作。

由于其读文件速度只是找出文件地址以及访问内存的操作所以

无论是挂载速度还是读文 件速度 Cramfs文件系统都比

JFFS2和YAFFS2文件系统要快。

 

        JFFS2文件系统的挂载可以分为以下几个步骤进行  

1. 检查每个节点CRC校验码的合法性在内存中为每个节点每个节点分配必需的相关的结构  

2. 扫瞄每个i节点的物理节点链表建立链接  

3. 释放扫瞄过程中使用的临时信息。

 

        可以看出这个过程还是很复杂的更重要的是在JFFS2

文件系统被挂载时需要对整个Flash储存区域进行扫瞄这就

耗费了大量的时间因此 JFFS2文件系统的开机速度非常缓慢。

与JFFS2相比YAFFS2减少了一些功能挂载时只需扫瞄Flash

内存的空闲区根据从OOB备份资 料区中读取的yaffs_tags

信息判读是文件头页面还是资料页面再根据相应信息在内存中

为每个文件建立一个对应的yaffs_object对 象。由于YAFFS2

在系统加载时只需扫瞄各个页面的OOB区即可建立起整个文

件系统的结构而不需要像JFFS2那样扫瞄整个Flash设备

因此大 大加快了文件系统的启动速度。但是YAFFS2仍然要

求对整个Flash设备所有页的空闲进行扫瞄这就导致当Flash

设备储存空间变大时系统扫瞄 时间会直线上升。

 

        在文件系统运行时JFFS2需要维护几个链表来管理擦写

块。根据擦写块上的内容一个擦写块可能会在不同的链表上。

具体来说当一个擦写块上都是合法 valid的节点时它会

在clean_list上当一个擦写块包含至少一个过时obsolete

的节点时它会在dirty_list上当 一个擦写块被擦写完毕并被写入Cleanmarker节点后它会在free_list上。正是以这些

链表为基础 JFFS2文件系统才可以实现垃圾回收、损耗平衡

等性能。文件系统挂载时YAFFS2在内存中建立一个层次结构

的索引可以看作是一个文件树。树的最底 层指向实际存放文

件的页面高层则是一层层的索引目录。文件树是通过一个联合

结构的节点来实现的。联合结构是固定大小32字节当它

处于最底层时 由16个2字节入口来查找页面ID当处于其

它层时由8个4字节指针指向其它更低层的节点。每个文件对

应一个文件树便于检索。在以NAND Flash为储存介质的嵌入

式系统中YAFFS2的文件读写性能都优于JFFS2。

  占用资源         在嵌入式系统中内存和外部内存资源匮乏需要节约使

用。因此占用的内存和外部内存资源量也是衡量嵌入式文件系统

的一个重要指针。

 

        如果使用RAMDISK方式运行文件系统那么在系统运行

之后首先要把Flash上的映像文件解压到内存中才可以开始

运行程序。这样同样的程序代码 不仅在外部内存中占据了空

间而且由于解压缩还在内存中占用了更大的空间。Cramfs

虽然是一个压缩式的文件系统但前面已介绍过它并不需要一

次性地将所有内容解压到内存之中。由于其对文件内容的压缩因此无论是外部内存还是内存 Cramfs都比JFFS2和YAFFS2

占用更少的资源。

 

        JFFS2将文件系统的数据和原数据以节点的形式储存在

Flash上其冗余数据只是节点头部的CRC校验码并且在储

存时对节点的数据进行了压缩。与之 相比YAFFS2不仅储存

了页数据的ECC校验码并且没有Flash设备OOB区储存数

据而是用来储存页节点信息。其映像也是由若干个页面组成

没 有对数据进行压缩因此YAFFS2文件系统映像大大超过了

JFFS2文件系统映像。实验表明普通YAFFS2映像的大小约

为同样JFFS2映像大小的 2倍。当文件系统在内存中运行时

JFFS2在内存中定义了若干链表YAFFS2在内存中为每个文

件创建一个文件树。尽管为每个文件建立一个文件 树需要消耗

掉不少的内存但是比起维护JFFS2所需的链表消耗的内存

还是少一些。在实际运行中YAFFS2占用的内存要小于JFFS2

文件系 统。

  使用范围         要使用Cramfs或JFFS2文件系统离不开MTD驱动程

序层的支持。MTDMemory Technology Device是Linux中

的一个储存设备通用界面层。虽然也可以建立在RAM上但它

是专为基于Flash的设备而设计的。MTD包含特定Flash 芯片的驱动程序 Flash芯片驱动向上层提供读、写、擦除等基本

的Flash操作方法。MTD对这些操作进行封装后向用户层提供

MTD char和MTD block类型的设备。MTD char类型的设备包

括/dev/mtd0等可以对Flash的原始字符访问MTD block类

型的设备包括/dev/mtdblock0等将Flash模拟成块设备这样

就可以在这些块设备上创建Cramfs或JFFS2等格式的文 件系

统。在对用户层的界面上 Cramfs或JFFS2文件系统还需要

操作系统VFS虚拟文件系统的支持。 

 

        同样YAFFS2文件系统支持使用MTD驱动层和VFS层

这也是一般在嵌入式Linux或者μClinux操作系统中使用

YAFFS2文件系统的常用 方法。除此之外YAFFS2还带有

NAND Flash芯片驱动并为嵌入式系统提供了直接访问文件系

统的API用户可以不使用Linux中的MTD和VFS直接对文

件进行操作。图1 为嵌入式系统的文件系统结构。

  

        YAFFS2中的YAFFS2 Direct提供了直接的文件系统界

面因此在那些没有VFS层的嵌入式系统中也可使用YAFFS2。

YAFFS2文件系统的使用范围要比Cramfs和 JFFS2文件系统

广泛但是需要注意的是YAFFS2只能用在NAND Flash储存

设备上。

  结论         这3种嵌入式文件系统在嵌入式系统中的应用非常广泛

但是又具有各自的特点。表2 比较了3种文件系统的主要性能

并归纳出各自最适用的领域。

  

具体分析如下  

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作为储存设备的

嵌入式系统中。

 

        针对具体应用可以在考察各种文件系统特点的基础上

选择更适合自身系统的一种文件系统解决方案。比如在许多以

NAND Flash为储存介质的应用系统中都用到「Cramfs

YAFFS2」文件系统。以Cramfs作为根文件系统既提高了启

动速度也能保护根文件不 受破坏使用YAFFS2作为用户文

件系统在保证用户可以自由读写文件的基础上提高了文件系

统的安全性和运行速度不失为一种优良的嵌入式文件系统解

决方案。

由 于嵌入式系统自身存在一些特殊要求使得一些传

统的文件系统 (如FAT、EXT2等) 并不十分适合。专

用的嵌入式文件系统应有一些自身的特性如文件系统

面对的储存介质特殊性、文件系统应具有的跨平台的安

全性以及整个系统的实时性等。本 文介绍了3种源

码开放的嵌入式文件系统Cramfs、JFFS2、YAFFS2

详细分析比较了这3种文件系统的主要性能并根据分

析结果指出了各自的适 用领域

Cramfs、JFFS2、YAFFS2是3种性能优越专用于嵌入式系

统的文件系统。本文通过对这3种文件系统的设计原理和主要性

能进行分析与比较归 纳出各自的选型依据据和适用领域。

三种文件系统的介绍 Cramfs         Cramfs是Linux的创始人Linus Torvalds开发的一种只读

文件系统采用了zlib压缩压缩比一般可以达到12但仍

可以做到高效的随机读取。在Linux系统中通常把不需 要经

常修改的目录压缩存放在系统引导时再将压缩文件解开。

Cramfs并不需要一次性地把文件系统的所有内容都解压到内存

中而只是在系统需要访问某 个位置的数据时马上计算出该数据在Cramfs中的位置将其解压缩到内存之中然后通过对

内存的访问来获取需要读取的数据。

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内存。

Flash内存 Flash设备特点

相对于传统储存介质Flash内存具有如下优点

˙ 可靠性高采用Flash为储存介质可以确保100万次以上的

可靠写入

˙ 储存速度快写入∕读取均可接近1Mb/s

˙ 使用方便具有很强的环境适应能力。

但是由于其制造制程的问题还存在以下缺点

˙ 读取和写入以页为单位擦除以块为单位

˙ 易出现随机坏块

˙ 块与块之间使用不均衡会导致寿命问题。

NOR Flash和NAND Flash

基于NOR技术的Flash内存是最早出现的Flash内存它

具有以下特点

˙ 程序和数据可存放在同一芯片上拥有独立的数据总线和地址

总线支持快速随机读取允许系统直接从Flash中读取程序代码并执行而无需先将程序代码下载至RAM中再执行

˙ 可以单字节或单字程序化但必须以块为单位进行擦除操作。

由于NOR Flash内存的擦除和程序化速度较慢而块尺寸

又比较大因此擦除和程序化操作所花费的时间很长。目前

NOR Flash内存大多只用于储存嵌入式系统的启动程序代码。

NAND Flash内存可以顺序读取储存单元的内容由于制

程上的进步其容量越来越大单位价格越来越便宜正逐步成

为Flash内存的主流。NAND Flash内存具有以下特点

˙ 以页为单位进行读写操作以块为单位进行擦除操作页大小

为512字节或2048字节每页不仅有

数据区还有几十字节的空闲区。

˙ 数据、地址采用同一总线接口串行读取。

˙ 芯片尺寸小接脚少单位成本低。

˙ 芯片内含有失效块并且在使用过程中可能会出现随机坏块。

表1 比较了这两种Flash内存的性能参数。

三种嵌入式文件系统主要性能分析与比较         数据安全、运行速度、占用资源、使用范围等是嵌入式文

件系统的主要性能指针。下面从这几个方面入手对这三种嵌入

式文件系统进行分析与比较。

数据安全         当前的嵌入式系统主要使用固态Flash芯片作为储存设备。

由于Flash设备自身的特点以及嵌入式系统工作环境的复杂多

样性如何保证数据的安全是嵌入 式文件系统首先要考虑的问

题。数据安全主要包括数据冗余和掉电保护等部分。

资料冗余

提高数据安全性的最有效措施是增加数据的冗余而数据的大量冗余又给维护资料一致性

带来困难。对此应进行合理取舍在尽量降低冗余的前提下确保数据的安全性和可靠性。

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资 料。

掉电保护         掉电保护的目的是在系统意外失去供电的情况下保证

系统运行状态的确定性以及记录数据的完整性当系统供电恢复

后现场数据可以及时恢复避免系统产生 混乱。很多文件系

统出于运行速度考虑在程序运行过程中常将数据暂存在

SDRAM中一旦系统意外掉电往往会造成数据丢失。

Cramfs文件系统将文件系统内容解压到内存中由于其不

能写入文件系统的内容无法更改因此不存在掉电保护的问题。

JFFS2是一种日志结构文件系统因此不论电源以何种方

式在哪个时刻停止供电JFFS2都能保持数据完整性。当系统

遭受不正常断电后重新启动 时JFFS2自动将系统恢复到断电

前最后一个稳定状态。需要注意的是文件系统在最后一个稳定

状态之后发生的任何改变都无法进行恢复。

YAFFS2是一种类日志文件系统可以在意外掉电重启后

自动提供可靠的数据记录防止文件系统的崩溃。它使用独立的

日志文件跟踪文件系统内容的变化。举 例来说当应用程序需

要写Flash的某一页时它首先修改的是存放于文件日志中的一

块镜像只有当日志中的镜像复制到文件系统中后数据才真实

地写到该 页上。当发生意外掉电重启后YAFFS2没有像JFFS2

那样使用旧文件完全代替新写文件而是选择用新文件完全代替旧的文件或者已写部分使用新文 件未写部分使用旧文件。

这种方式增强了掉电时未完全写入文件的安全性能特别是当意

外掉电发生在数据区时意外掉电时的文件几乎被完好地保存下

来。

运行速度         运行速度可以从以下几个方面考察文件系统挂载速度

读文件速度写文件速度等。这里预设的储存介质是NAND

Flash。

一般而言压缩的、只读的文件系统在启动时需要将文件

系统解压到SDRAM中这在一定程度上会减缓文件系统挂载速

度。但是Cramfs文件系统在设计 时充分考虑了系统挂载的时

间并没有一次性地把文件系统的所有内容都解压到内存中而

只是在系统需要访问某个位置的数据时迅速计算出该数据在

Cramfs中的位置将其解压缩到内存之中再进行访问操作。

由于其读文件速度只是找出文件地址以及访问内存的操作所以

无论是挂载速度还是读文 件速度 Cramfs文件系统都比

JFFS2和YAFFS2文件系统要快。

JFFS2文件系统的挂载可以分为以下几个步骤进行

1. 检查每个节点CRC校验码的合法性在内存中为每个节点每个节点分配必需的相关的结构

2. 扫瞄每个i节点的物理节点链表建立链接

3. 释放扫瞄过程中使用的临时信息。

可以看出这个过程还是很复杂的更重要的是在JFFS2

文件系统被挂载时需要对整个Flash储存区域进行扫瞄这就

耗费了大量的时间因此 JFFS2文件系统的开机速度非常缓慢。

与JFFS2相比YAFFS2减少了一些功能挂载时只需扫瞄Flash

内存的空闲区根据从OOB备份资 料区中读取的yaffs_tags

信息判读是文件头页面还是资料页面再根据相应信息在内存中

为每个文件建立一个对应的yaffs_object对 象。由于YAFFS2

在系统加载时只需扫瞄各个页面的OOB区即可建立起整个文

件系统的结构而不需要像JFFS2那样扫瞄整个Flash设备

因此大 大加快了文件系统的启动速度。但是YAFFS2仍然要

求对整个Flash设备所有页的空闲进行扫瞄这就导致当Flash

设备储存空间变大时系统扫瞄 时间会直线上升。

在文件系统运行时JFFS2需要维护几个链表来管理擦写

块。根据擦写块上的内容一个擦写块可能会在不同的链表上。

具体来说当一个擦写块上都是合法 valid的节点时它会

在clean_list上当一个擦写块包含至少一个过时obsolete

的节点时它会在dirty_list上当 一个擦写块被擦写完毕并被写入Cleanmarker节点后它会在free_list上。正是以这些

链表为基础 JFFS2文件系统才可以实现垃圾回收、损耗平衡

等性能。文件系统挂载时YAFFS2在内存中建立一个层次结构

的索引可以看作是一个文件树。树的最底 层指向实际存放文

件的页面高层则是一层层的索引目录。文件树是通过一个联合

结构的节点来实现的。联合结构是固定大小32字节当它

处于最底层时 由16个2字节入口来查找页面ID当处于其

它层时由8个4字节指针指向其它更低层的节点。每个文件对

应一个文件树便于检索。在以NAND Flash为储存介质的嵌入

式系统中YAFFS2的文件读写性能都优于JFFS2。

占用资源         在嵌入式系统中内存和外部内存资源匮乏需要节约使

用。因此占用的内存和外部内存资源量也是衡量嵌入式文件系统

的一个重要指针。

如果使用RAMDISK方式运行文件系统那么在系统运行

之后首先要把Flash上的映像文件解压到内存中才可以开始

运行程序。这样同样的程序代码 不仅在外部内存中占据了空

间而且由于解压缩还在内存中占用了更大的空间。Cramfs

虽然是一个压缩式的文件系统但前面已介绍过它并不需要一

次性地将所有内容解压到内存之中。由于其对文件内容的压缩因此无论是外部内存还是内存 Cramfs都比JFFS2和YAFFS2

占用更少的资源。

JFFS2将文件系统的数据和原数据以节点的形式储存在

Flash上其冗余数据只是节点头部的CRC校验码并且在储

存时对节点的数据进行了压缩。与之 相比YAFFS2不仅储存

了页数据的ECC校验码并且没有Flash设备OOB区储存数

据而是用来储存页节点信息。其映像也是由若干个页面组成

没 有对数据进行压缩因此YAFFS2文件系统映像大大超过了

JFFS2文件系统映像。实验表明普通YAFFS2映像的大小约

为同样JFFS2映像大小的 2倍。当文件系统在内存中运行时

JFFS2在内存中定义了若干链表YAFFS2在内存中为每个文

件创建一个文件树。尽管为每个文件建立一个文件 树需要消耗

掉不少的内存但是比起维护JFFS2所需的链表消耗的内存

还是少一些。在实际运行中YAFFS2占用的内存要小于JFFS2

文件系 统。

使用范围         要使用Cramfs或JFFS2文件系统离不开MTD驱动程

序层的支持。MTDMemory Technology Device是Linux中

的一个储存设备通用界面层。虽然也可以建立在RAM上但它

是专为基于Flash的设备而设计的。MTD包含特定Flash 芯片的驱动程序 Flash芯片驱动向上层提供读、写、擦除等基本

的Flash操作方法。MTD对这些操作进行封装后向用户层提供

MTD char和MTD block类型的设备。MTD char类型的设备包

括/dev/mtd0等可以对Flash的原始字符访问MTD block类

型的设备包括/dev/mtdblock0等将Flash模拟成块设备这样

就可以在这些块设备上创建Cramfs或JFFS2等格式的文 件系

统。在对用户层的界面上 Cramfs或JFFS2文件系统还需要

操作系统VFS虚拟文件系统的支持。

同样YAFFS2文件系统支持使用MTD驱动层和VFS层

这也是一般在嵌入式Linux或者μClinux操作系统中使用

YAFFS2文件系统的常用 方法。除此之外YAFFS2还带有

NAND Flash芯片驱动并为嵌入式系统提供了直接访问文件系

统的API用户可以不使用Linux中的MTD和VFS直接对文

件进行操作。图1 为嵌入式系统的文件系统结构。

YAFFS2中的YAFFS2 Direct提供了直接的文件系统界

面因此在那些没有VFS层的嵌入式系统中也可使用YAFFS2。

YAFFS2文件系统的使用范围要比Cramfs和 JFFS2文件系统

广泛但是需要注意的是YAFFS2只能用在NAND Flash储存

设备上。

结论         这3种嵌入式文件系统在嵌入式系统中的应用非常广泛

但是又具有各自的特点。表2 比较了3种文件系统的主要性能

并归纳出各自最适用的领域。

具体分析如下

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作为储存设备的

嵌入式系统中。

针对具体应用可以在考察各种文件系统特点的基础上

选择更适合自身系统的一种文件系统解决方案。比如在许多以

NAND Flash为储存介质的应用系统中都用到「Cramfs

YAFFS2」文件系统。以Cramfs作为根文件系统既提高了启

动速度也能保护根文件不 受破坏使用YAFFS2作为用户文

件系统在保证用户可以自由读写文件的基础上提高了文件系

统的安全性和运行速度不失为一种优良的嵌入式文件系统解

决方案。

Cramfs、JFFS2、YAFFS2全面对比的更多相关文章

  1. 嵌入式: jffs2,yaffs2,logfs,ubifs文件系统性能分析

    在嵌入式领域,FLASH是一种常用的存储介质,由于其特殊的硬件结构,所以普通的文件系统如ext2,ext3等都不适合在其上使用,于是就出现了专门针对FLASH的文件系统,比较常用的有jffs2,yaf ...

  2. 转:嵌入式: jffs2,yaffs2,logfs,ubifs文件系统性能分析

    原文地址: http://blog.chinaunix.net/uid-23381466-id-3411483.html. 在嵌入式领域,FLASH是一种常用的存储介质,由于其特殊的硬件结构,所以普通 ...

  3. u-boot-2010.09移植(B)

    前面我们的u-boot只是在内存中运行,要想在nandflash中运行,以达到开机自启的目的,还需作如下修改 一.添加DM9000网卡支持 1.修改board/fl2440/fl2440.c中的boa ...

  4. Cramfs、JFFS2、YAFFS2的全面对比

    Cramfs.JFFS2.YAFFS2的全面对比http://blog.csdn.net/daofengdeba/article/details/7721340 由于嵌入式系统自身存在一些特殊要求,使 ...

  5. 嵌入式linux加载引导内核和根文件系统的方法

    总体来说,嵌入式Linux内核和根文件的引导与PC机差不多.嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NAN ...

  6. TI Davinci DM6446开发攻略——根文件系统的裁剪和移植

    一.补充文件系统知识 Linux根文件系统是存放tool软件.lib文件.script(脚本).配置文件.其他特殊文件.自己开发的应用程序的地方.嵌入式linux的根文件系统rootfs就像windo ...

  7. 基于Linux的嵌入式文件系统构建与设计

    摘 要:Linux是当今一种十分流行的嵌入式操作系统.由于其具有执行效率高.占用空间小.实时性能优良和可扩展性强等特点,因此被广泛应用于工业控制领域.该文对其文件系统进行了简单的介绍,结合嵌入式系统应 ...

  8. linux内核(二)内核移植(DM365-DM368开发攻略——linux-2.6.32的移植)

    一.介绍linux-2.6.32: Linux-2.6.32的网上介绍:增添了虚拟化内存 de-duplicacion.重写了 writeback 代码.改进了 Btrfs 文件系统.添加了 ATI ...

  9. OWASP固件安全性测试指南

    OWASP固件安全性测试指南 固件安全评估,英文名称 firmware security testing methodology 简称 FSTM.该指导方法主要是为了安全研究人员.软件开发人员.顾问. ...

随机推荐

  1. 文本与二进制关于\n的问题

    文本文件中: text = open(path, "r");windows中的换行符\n,在文件中windows在存储的时候会将它看成\r\n存储,用r在读取大小时会忽略\r的大小 ...

  2. 模仿spring-aop的功能,利用注解搭建自己的框架。

    入JAVA坑7月有余,也尝试自己手动搭建框架,最近对spring aop的这种切面很着迷,为此记录下自己目前搭出来的小小的demo,后续有时间也会继续改进自己的demo.望大神们不吝赐教. 主要还是运 ...

  3. apache 限制IP访问

    <Directory "/var/www"> Options All AllowOverride None Order Deny,Allow Deny From all ...

  4. ABP官方文档翻译 3.5 规约

    规约 介绍 示例 创建规范类 使用仓储规约 组合规约 讨论 什么时候使用? 什么时候不使用? 介绍 规约模式是一种特别的软件设计模式,通过使用布尔逻辑将业务规则链接起来重新调配业务规则.(维基百科). ...

  5. Restful、Jersey和JAX-RS

     一:MVC与SpringMVC MVC:是一种思想,是一种设计模式 SpringMVC:是一个框架,实现了MVC这种思想. 之前:写JSP页面,比较繁琐.eg:在页面显示用户列表,我们会在JSP页面 ...

  6. BZOJ 4108: [Wf2015]Catering [上下界费用流]

    4108: [Wf2015]Catering 题意:有一家装备出租公司收到了按照时间顺序排列的n个请求. 这家公司有k个搬运工.每个搬运工可以搬着一套装备按时间顺序去满足一些请求.一个搬运工从第i个请 ...

  7. pip install 提示"no previously-included directories found matching"及"no previously-included files matching found anywhere in distribution",且偶发无法关联安装 PyPI 库的故障

    环境描述: Python 2.7.5 CentOS-7.2   报错现象: (1).在虚拟环境下运行 pip install 命令安装 PyPI 第三方库,出现类似如下告警. Running setu ...

  8. mongodb window安装配置

    下载mongodb安装包 1. https://www.mongodb.org/dl/win32/x86_64-2008plus-ssl?_ga=2.233271640.711265466.15193 ...

  9. gitlab10.0安装手记

    + +exec chpst -e /opt/gitlab/etc/gitlab-workhorse/env -P \ + -U git \ + -u git \ + /opt/gitlab/embed ...

  10. nodejs开启服务器端口

    var http = require('http'); var server = http.createServer(function(req, res) { res.writeHead(200, { ...