嵌入式Linux文件系统及其存储机制分析

嵌入式系统与通用PC机不一样,通常没有硬盘这样的存储设备而是使用Flash闪存芯片、小型闪存卡等专为嵌入式系统设计的存储装置
 下面说下关于嵌入式系统中经常使用的存储设备及其管理机制以及经常使用的基于 FLASH的文件系统类型~~~~~

  1.嵌入式系统存储设备及其管理机制分析html

  构建适用于嵌入式系统的Linux文件系统,必然会涉及到两个关键点,一是文件系统类型的选择,它关系到文件系统的读写性能、尺寸大小;另外一个就是根文件系统内容的选择,它关系到根文件系统所能提供的功能及尺寸大小。linux

  嵌入式设备中使用的存储器是像Flash闪存芯片、小型闪存卡等专为嵌入式系统设计的存储装置。Flash是目前嵌入式系统中普遍采用的主流存 储器,它的主要特色是按总体/扇区擦除和按字节编程,具备低功耗、高密度、小体积等优势。目前,Flash分为NOR, NAND两种类型。编程

  NOR型闪存能够直接读取芯片内储存的数据,于是速度比较快,可是价格较高。NOR型芯片,地址线与数据线分开,因此NOR型芯片能够像 SRAM同样连在数据线上,对NOR芯片能够“字”为基本单位操做,所以传输效率很高,应用程序能够直接在Flash内运行,没必要再把代码读到系统RAM 中运行。它与SRAM的最大不一样在于写操做须要通过擦除和写入两个过程。安全

  NAND型闪存芯片共用地址线与数据线,内部数据以块为单位进行存储,直接将NAND芯片作启动芯片比较难。NAND闪存是连续存储介质,适合 放大文件。擦除NOR器件时是以64-128KB的块进行的,执行一个写入/擦除操做的时间为5s;擦除NAND器件是以8-32KB的块进行的,执行相 同的操做最多只须要4ms。NAND Rash的单元尺寸几乎是NOR器件的一半,因为生产过程更为简单,NAND结构能够在给定的模具尺寸内提供更高的容量,也就相应地下降了价格。NOR flash占据了容量为1―16MB闪存市场的大部分,而NAND flash只是用在8―128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储。寿命(耐用性),在NAND闪存中每一个 块的最大擦写次数是一百万次,而NOR的擦写次数是十万次。NAND存储器除了具备10比1的块擦除周期优点,典型的NAND块尺寸要比NOR器件小8 倍,每一个NAND存储器块在给定的时间内的删除次数要少一些。工具

  全部嵌入式系统的启动都至少须要使用某种形式的永久性存储设备,它们须要合适的驱动程序,当前在嵌入式Linux中有三种经常使用的块驱动程序能够选择。oop

  ● Blkmem驱动层性能

  Blkmem驱动是为uclinux专门设计的,也是最先的一种块驱动程序之一,如今仍然有不少嵌入式Linux操做系统选用它做为块驱动程, 尤为是在uClinux中。它相对来讲是最简单的,并且只支持创建在NOR型Flash和RAM中的根文件系统。使用Blkmem驱动,创建Flash分 区配置比较困难,这种驱动程序为Flash提供了一些基本擦除/写操做。优化

   RAMdisk驱动层spa

  RAMdisk驱动层一般应用在标准Linux中无盘工做站的启动,对Flash存储器并不提供任何的直接支持, RAM disk就是在开机时,把一部分的内存虚拟成块设备,而且把以前所准备好的档案系统映像解压缩到该RAM disk环境中。当在Flash中放置一个压缩的文件系统,能够将文件系统解压到RAM,使用RAM disk驱动层支持一个保持在RAM中的文件系统。操作系统

  ● MTD驱动层

  为了尽量避免针对不一样的技术使用不一样的工具,以及为不一样的的技术提供共同的能力,Linux内核归入了MTD子系统(memory Technology Device)。它提供了一致且统一的接口,让底层的MTD芯片驱动程序无缝地与较高层接口组合在一块儿。JFFS2, Cramfs, YAFFS等文件系统均可以被安装成MTD块设备。MTD驱动也能够为那些支持CFI接口的NOR型Flash提供支持。虽然MTD能够创建在RAM上, 但它是专为基于Flash的设备而设计的。MTD包含特定Flash芯片的驱动程序,开发者要选择适合本身系统的Flash芯片驱动。Flash芯片驱动 向上层提供读、写、擦除等基本的操做,MTD对这些操做进行封装后向用户层提供MTD char和MTD block类型的设备。MTD char类型的设备包括/dev/mtd0, /dev/mtdl等,它们提供对Flash原始字符的访问。MTD block类型的设备包括/dev/mtdblock0,/dev/mtdblock1等,MTD block设备是将Flash模拟成块设备,这样能够在这些模拟的块设备上建立像Cramfs, JFFS2等格式的文件系统。

  MTD驱动层也支持在一块Flash上创建多个Flash分区,每个分区做为了一个MTD block设备,能够把系统软件和数据等分配到不一样的分区上,同时能够在不一样的分区采用不用的文件系统格式。这一点很是重要,正是因为这一点才为嵌入式系 统多文件系统的创建提供了灵活性。

  2. 基于Flash的文件系统

  鉴于Flash存储介质的读写特色,传统的Linux文件系统己经不适合应用在嵌入式系统中,像Ext2fs文件系统是为像IDE那样的块设备 设计的,这些设备的逻辑块是512字节、1024字节等大小,没有提供很好的扇区擦写支持,不支持损耗平衡,没有掉电保护,也没有特别完美的扇区管理,这 不太适合于扇区大小因设备类型而划分的闪存设备。基于这样的缘由,产生了不少专为Flash设备而设计的文件系统,常见的专用于闪存设备的文件系统以下:

  ● Romfs

  传统型的Romfs文件系统是最常使用的一种文件系统,它是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存;它按顺序存放全部的文件 数据,因此这种文件系统格式支持应用程序以XIP方式运行,在系统运行时,能够得到可观的RAM节省空间。uClinux系统一般采用Romfs文件系 统。

  ● Cramfs

  Cramfs是Linux的创始人Linus Torvalds开发的一种可压缩只读文件系统在Cramfs文件系统中,每一页被单独压缩,能够随机页访问,其压缩比高达2:1,为嵌入式系统节省大量 的Flash存储空间。Cramfs文件系统以压缩方式存储,在运行时解压缩,因此不支持应用程序以XIP方式运行,全部的应用程序要求被拷到RAM里去 运行,但这并不表明比Ramfs需求的RAM 空间要大一点,由于Cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一会儿就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没 有读取的部分不分配内存空间,当咱们读取的档案不在内存时, Cramfs文件系统自动计算压缩后的资料所存的位置,再即时解压缩到RAM中。另外,它的速度快,效率高,其只读的特色有利于保护文件系统免受破坏,提 高了系统的可靠性;可是它的只读属性同时又是它的一大缺陷,使得用户没法对其内容对进扩充。Cramfs映像一般是放在Flash中,可是也能放在别的文 件系统里,使用loopback设备能够把它安装别的文件系统里。使用mkcramfs工具能够建立Cramfs映像。

  ● Ramfs/Tmpfs

  Ramfs也是Linus Torvalds开发的,Ramfs文件系统把全部的文件都放在RAM里运行,一般是Flash系统用来存储一些临时性或常常要修改的数据,相对于 ramdisk来讲,Ramfs的大小能够随着所含文件内容大小变化,不像ramdisk的大小是固定的。Tmpfs是基于内存的文件系统,由于 tmpfs驻留在RAM 中,因此写/读操做发生在RAM 中。tmpfs文件系统大小可随所含文件内容大小变化,使得可以最理想地使用内存;tmpfs驻留在RAM,因此读和写几乎都是瞬时的。tmpfs的一个 缺点是当系统从新引导时会丢失全部数据。

  ● JFFS2

  JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,因此 JFFS2也能够用在Linux,uCLinux中。JFFS文件系统最先是由瑞典Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是一个可读写的、压缩的、日志型文件系统,并提供了 崩溃/掉电安全保护,克服了JFFS的一些缺点:使用了基于哈希表的日志节点结构,大大加快了对节点的操做速度;支持数据压缩;提供了“写平衡”支持;支 持多种节点类型;提升了对闪存的利用率,下降了内存的消耗。这些特色使JFFS2文件系统成为目前Flash设备上最流行的文件系统格式,它的缺点就是当 文件系统已满或接近满时,JFFS2运行会变慢,这主要是由于碎片收集的问题。

  ● YAFFS

  YAFFS/YAFFS2是一种和JFFSx相似的闪存文件系统,它是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。和 JFFS2相比它减小了一些功能,因此速度更快,并且对内存的占用比较小。此外,YAFFS自带NAND芯片的驱动,而且为嵌入式系统提供了直接访问文件 系统的API,用户能够不使用Linux中的MTD与VFS,直接对文件系统操做。YAFFS2支持大页面的NAND设备,而且对大页面的NAND设备作 了优化。JFFS2在NAND闪存上表现并不稳定,更适合于NOR闪存,因此相对大容量的NAND闪存,YAFFS是更好的选择。

  在具体的嵌入式系统设计中可根据不一样目录存放的内容不一样以及存放的文件属性,肯定使用何种文件系统。
相关文章
相关标签/搜索