您的位置 首页 电子

玩转Linux,先把文件体系搞懂

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

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

  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) 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 闪存会消耗很多时刻。

  (2) yaffs : Yet Another Flash File System

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

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

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

  (3) Cramfs : Compressed ROM File System

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

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

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

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

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

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

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

  (4) Romfs

  传统型的 Romfs 文件体系是一种简略的、紧凑的、只读的文件体系,不支撑动态擦写保存,按次序寄存数据,因此支撑运用程序以 XIP(eXecute In Place ,片内运转 ) 方法运转,在体系运转时,节约 RAM 空间。 uC linux 体系一般选用 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) 层,不能格式化,能够创立多个,在创立时能够指定其最大能运用的内存巨细。 ( 实践上, 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 ,用于保护设备文件。

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

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部