您的位置 首页 基础

全部皆文件,嵌入式领域中各种文件体系的介绍

Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virt

  Linux支撑多种文件体系,包含ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件体系 进行一致办理,Linux引入了虚拟文件体系VFS(Virtual File System),为各类文件体系供给一个一致的操作界面和运用编程接口。

  Linux发动时,第一个有必要挂载的是根文件体系;若体系不能从指定设备上挂载根文件体系,则体系会犯错而退出发动。之后能够主动或手动挂载其他的文件体系。因此,一个体系中能够一同存在不同的文件体系。

  不同的文件体系类型有不同的特色,因此依据存储设备的硬件特性、体系需求等有不同的运用场合。在嵌入式Linux运用中,首要的存储设备为 RAM(DRAM, SDRAM)和ROM(常选用FLASH存储器),常用的根据存储设备的文件体系类型包含:jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs等。

  1.1. 根据FLASH的文件体系

  Flash(闪存)作为嵌入式体系的首要存储前言,有其自身的特性。Flash的写入操作只能把对应方位的1修正为0,而不能把0修正为1(擦 除Flash便是把对应存储块的内容康复为1),因此,一般状况下,向Flash写入内容时,需求先擦除对应的存储区间,这种擦除是以块(block)为 单位进行的。

  闪存首要有NOR和NAND两种技能(简略比较见附录)。Flash存储器的擦写次数是有限的,NAND闪存还有特其他硬件接口和读写时序。因 此,有必要针对Flash的硬件特性规划契合运用要求的文件体系;传统的文件体系如ext2等,用作Flash的文件体系会有许多坏处。

  在嵌入式Linux下,MTD(Memory Technology Device,存储技能设备)为底层硬件(闪存)和上层(文件体系)之间供给一个一致的笼统接口,即Flash的文件体系都是根据MTD驱动层的(拜见上 面的Linux下的文件体系结构图)。运用MTD驱动程序的首要长处在于,它是专门针对各种非易失性存储器(以闪存为主)而规划的,因此它对Flash有 更好的支撑、办理和根据扇区的擦除、读/写操作接口。

  趁便一提,一块Flash芯片能够被划分为多个分区,各分区能够选用不同的文件体系;两块Flash芯片也能够合并为一个分区运用,选用一个文件体系。即文件体系是针关于存储器分区而言的,而非存储芯片。

  1.1.1. jffs2

  JFFS文件体系最早是由瑞典Axis Communications公司根据Linux2.0的内核为嵌入式体系开发的文件体系。JFFS2是RedHat公司根据JFFS开发的闪存文件系 统,开端是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件体系,所以JFFS2也能够用在Linux, uCLinux中。

  Jffs2: 日志闪存文件体系版别2 (Journalling Flash FileSystem v2)

  首要用于NOR型闪存,根据MTD驱动层,特色是:可读写的、支撑数据紧缩的、根据哈希表的日志型文件体系,并供给了溃散/掉电安全保护,供给“写平衡”支撑等。缺陷首要是当文件体系已满或挨近满时,由于废物搜集的联系而使jffs2的运转速度大大怠慢。

  现在jffs3正在开发中。关于jffs系列文件体系的运用具体文档,可参阅MTD补丁包中mtd-jffs-HOWTO.txt。

  jffsx不适合用于NAND闪存首要是由于NAND闪存的容量一般较大,这样导致jffs为保护日志节点所占用的内存空间敏捷增大,另 外,jffsx文件体系在挂载时需求扫描整个FLASH的内容,以找出一切的日志节点,树立文件结构,关于大容量的NAND闪存会耗费很多时刻。

  1.1.2. yaffs

  yaffs/yaffs2(Yet Another Flash File System)是专为嵌入式体系运用NAND型闪存而规划的一种日志型文件体系。与jffs2比较,它减少了一些功用(例如不支撑数 据紧缩),所以速度更快,挂载时刻很短,对内存的占用较小。其他,它仍是跨渠道的文件体系,除了Linux和eCos,还支撑WinCE, pSOS和ThreadX等。

  yaffs/yaffs2自带NAND芯片的驱动,而且为嵌入式体系供给了直接拜访文件体系的API,用户能够不运用Linux中的MTD与VFS,直接对文件体系操作。当然,yaffs也可与MTD驱动程序合作运用。

  yaffs与yaffs2的首要差异在于,前者仅支撑小页(512 Bytes) NAND闪存,后者则可支撑大页(2KB) NAND闪存。一同,yaffs2在内存空间占用、废物收回速度、读/写速度等方面均有大幅进步。

  1.1.3. ubifs

  无排序区块图像文件体系(Unsorted Block Image File System, UBIFS)是用于固态硬盘存储设备上,并与LogFS相互竞争,作为JFFS2的后继文件体系之一。真实开端开发于2007年,并于2008年10月第一次参加安稳版别于Linux中心2.6.27版。

  UBIFS最早在2006年由IBM与Nokia的工程师Thomas Gleixner,Artem Bityutskiy所规划,专门为了处理MTD(Memory Technology Device)设备所遇到的瓶颈。由于Nand Flash容量的暴升,YAFFS等皆无法再去操控Nand Flash的空间。UBIFS经过子体系UBI处理与MTD device之间的动作。与JFFS2相同,UBIFS 建构于MTD device 之上,因此与一般的block device不兼容。

  JFFS2运转在MTD设备之上,而UBIFS则只能作业于UBI volume之上。也能够说,UBIFS触及了三个子体系:

  1. MTD 子体系, 供给对flash芯片的拜访接口, MTD子体系供给了MTD device的概念,比方/dev/mtdx,MTD能够认为是raw flash

  2. UBI subsystem,为flash device供给了wear-leveling和 volume management功用; UBI作业在MTD设备之上,供给了UBI volume;UBI是MTD设备的高层次表明,对上层屏蔽了一些MTD不得不处理的问题,比方wearing以及坏块办理

  3. UBIFS文件体系,作业于UBI之上

  以下是UBIFS的一些特色:

  可扩展性:UBIFS对flash 尺度有着很好的扩展性; 也便是说mount时刻,内存耗费以及I/O速度都不依靠与flash 尺度(关于内存耗费并不是彻底精确的,可是依靠性十分的低); UBIFS能够很好的习惯GB flashes; 当然UBI自身还有扩展性的问题,无论如何 UBI/UBIFS都比JFFS2的可扩展性好,此外假如UBI成为瓶颈,还能够经过晋级UBI而不需改动UBIFS

  快速mount:不像JFFS2,UBIFS在mount阶段不需求扫描整个文件体系,UBIFS mount介质的时刻只是毫秒级,时刻不依靠与flash的尺度;可是UBI的初始化时刻是依靠flash的尺度的,因此有必要把这个时刻考虑在内

  write-back 支撑: 回写或许叫推迟写更精确些吧,同JFFS2的write-through(当即写入内存)比较能够明显的进步文件体系的吞吐量。

  反常unmount习惯度:UBIFS是一个日志文件体系能够忍受忽然掉电以及unclean重启; UBIFS 经过replay 日志来康复unclean unmount,在这种状况下replay会耗费一些时刻,因此mount时刻会略微添加,可是replay进程并不会扫描整个flash介质,所以UBIFS的mount时刻大概在几分之一秒。

  快速I/O – 即便咱们disable write-back(能够在unmount时运用-o sync mount选项), UBIFS的功能依然挨近JFFS2; 记住,JFFS2的同步I/O是十分惊人的,由于JFFS2不需求在flash上保护indexing data结构, 所以就没有因此而带来的担负; 而UBIFS恰恰是有index数据的。 UBIFS之所以够快是由于UBIFS提交日志的方法:不是把数据从一个当地移动到其他一个方位,而只是把数据的地址加到文件体系的index,然后挑选不同的eraseblock作为新的日志块,此外还有multi-headed日志方法等技巧。

  on-the_flight compression – 存储在flash介质上的数据是紧缩的;一同也能够灵敏的针对单个文件来翻开封闭紧缩; 例如,或许需求针对某个特定的文件翻开紧缩,或许或许缺省方法下支撑紧缩,可是对多媒体文件则封闭紧缩。

  可康复性 – UBIFS能够从index损坏后康复; UBIFS中的每一片信息都有一个header来描绘,因此能够经过扫描这个flash介质来重构文件体系,这点和JFFS2十分相似;想像一下,假如你擦出了FAT文件体系的FAT表,那么关于FAT FS是丧命的过错,可是假如擦除UBIFS的index,你人然能够重构文件体系,当然这需求一个特定的用户空间程序来做这个康复

  完整性 – UBIFS经过写checksum到flash 介质上来确保数据的完整性,UBIFS不会无视损坏文件数据或meta-data; 缺省的状况,UBIFS只是查看meta-data的CRC,可是你能够经过mount选项,强制进行data CRC的查看

  ubifs具体介绍

  1.1.4. Cramfs

  Cramfs(Compressed ROM File System)是Linux的创始人 Linus Torvalds参加开发的一种只读的紧缩文件体系。它也根据MTD驱动程序。

  在cramfs文件体系中,每一页(4KB)被独自紧缩,能够随机页拜访,其紧缩比高达2:1,为嵌入式体系节约很多的Flash存储空间,使体系可经过更低容量的FLASH存储相同的文件,然后下降体系本钱。

  Cramfs文件体系以紧缩方法存储,在运转时解紧缩,所以不支撑运用程序以XIP方法运转,一切的运用程序要求被拷到RAM里去运转,但这并 不代表比Ramfs需求的RAM空间要大一点,由于Cramfs是选用分页紧缩的方法寄存档案,在读取档案时,不会一会儿就耗用过多的内存空间,只针对目 前实践读取的部分分配内存,尚没有读取的部分不分配内存空间,当咱们读取的档案不在内存时,Cramfs文件体系主动核算紧缩后的材料所存的方位,再即时 解紧缩到RAM中。

  其他,它的速度快,效率高,其只读的特色有利于保护文件体系免受损坏,进步了体系的可靠性。

  由于以上特性,Cramfs在嵌入式体系中运用广泛。

  可是它的只读特点一同又是它的一大缺陷,使得用户无法对其内容对进扩大。

  Cramfs映像一般是放在Flash中,可是也能放在其他文件体系里,运用loopback 设备能够把它装置其他文件体系里。

  (5) Romfs

  传统型的Romfs文件体系是一种简略的、紧凑的、只读的文件体系,不支撑动态擦写保存,按次序寄存数据,因此支撑运用程序以 XIP(eXecute In Place,片内运转)方法运转,在体系运转时,节约RAM空间。uClinux体系一般选用Romfs文件体系。

  其他文件体系:fat/fat32也可用于实践嵌入式体系的扩展存储器(例如PDA, Smartphone, 数码相机等的SD卡),这首要是为了更好的与最盛行的Windows桌面操作体系相兼容。ext2也能够作为嵌入式Linux的文件体系,不过将它用于 FLASH闪存会有许多坏处。

  1.2.   根据RAM的文件体系

  1.2.1. Ramdisk

  Ramdisk是将一部分固定巨细的内存当作分区来运用。它并非一个实践的文件体系,而是一种将实践的文件体系装入内存的机制,而且能够作为根 文件体系。将一些常常被拜访而又不会更改的文件(如只读的根文件体系)经过Ramdisk放在内存中,能够明显地进步体系的功能。

  在Linux的发动阶段,initrd供给了一套机制,能够将内核映像和根文件体系一同载入内存。

  1.2.2. ramfs/tmpfs

  Ramfs是Linus Torvalds开发的一种根据内存的文件体系,作业于虚拟文件体系(VFS)层,不能格式化,能够创立多个,在创立时能够指定其最大能运用的内存大 小。(实践上,VFS本质上可当作一种内存文件体系,它一致了文件在内核中的表明方法,并对磁盘文件体系进行缓冲。)

  Ramfs/tmpfs文件体系把一切的文件都放在RAM中,所以读/写操作发生在RAM中,能够用ramfs/tmpfs来存储一些临时性或常常要修正的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也进步了数据读写速度。

  Ramfs/tmpfs相关于传统的Ramdisk的不同之处首要在于:不能格式化,文件体系巨细可随所含文件内容巨细改变。

  Tmpfs的一个缺陷是当体系从头引导时会丢掉一切数据。

  1.2.3. NFS

  NFS网络文件体系(Network File System)是由Sun开发并发展起来的一项在不同机器、不同操作体系之间经过网络共享文件的技能。在嵌入式Linux体系的开发调试阶段,能够使用该技能在主机上树立根据NFS的根文件体系,挂载到嵌入式设备,能够很方便地修正根文件体系的内容。

  以上评论的都是根据存储设备的文件体系(memory-based file system),它们都可用作Linux的根文件体系。实践上,Linux还支撑逻辑的或伪文件体系(logical or pseudo file system),例如procfs(proc文件体系),用于获取体系信息,以及devfs(设备文件体系)和sysfs,用于保护设备文件。

  ²   附录:NOR闪存与NAND闪存比较

  NOR FLASH

  NAND FLASH

  接口时序同SRAM,易运用

  地址/数据线复用,数据位较窄

  读取速度较快

  读取速度较慢

  擦除速度慢,以64-128KB的块为单位

  擦除速度快,以8-32KB的块为单位

  写入速度慢(由于一般要先擦除)

  写入速度快

  随机存取速度较快,支撑XIP(eXecute In Place,芯片内履行),适用于代码存储。在嵌入式体系中,常用于寄存引导程序、根文件体系等。

  次序读取速度较快,随机存取速度慢,适用于数据存储(如大容量的多媒体运用)。在嵌入式体系中,常用于寄存用户文件体系等。

  单片容量较小,1-32MB

  单片容量较大,8-128MB,进步了单元密度

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/158383.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部