原文:https://blog.csdn.net/li_wen01/article/details/80090624

嵌入式linux系统中常用的文件系统:

闪存主要有NOR和NAND两种技术;因为Flash存储器的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序,于是就出现了专门针对FLASH的文件系统。比较常用的有jffs2,yaffs2,logfs,ubifs。传统的文件系统如ext2、ext3、ntfs等都是针对机械式硬盘设计的,用作Fash文件系统会很多的弊端。

在嵌入式Linux下,MTD(MemoryTechnology Device,存储技术设备)为底层硬件(闪存)和上层(文件系统)之间提供一个统一的抽象接口,即Flash的文件系统都是基于MTD驱动层。使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器(以闪存为主)而设计的,因而它对Flash有更好的支持、管理和基于扇区的擦除、读/写操作接口。另外,一块Flash芯片可以被划分为多个分区,各分区可以采用不同的文件系统;两块Flash芯片也可以合并为一个分区使用,采用一个文件系统。即文件系统是针对于存储器分区而言的,而非存储芯片。根据存储设备的不同,可以将嵌入式文件系统划分为三大类:基于flash的文件系统,基于内存的文件系统,基于网络的文件系统。

(一)基于flash的文件系统

(1) jffs2:Journalling Flash FileSystem

JFFS文件系统最早是由瑞典AxisCommunications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。
    JFFS2(Journalling Flash FileSystem 日志闪存文件系统版本2) 是 RedHat 的 David Woodhouse 在 JFFS 基础上改进的文件系统,是用于微型嵌入式设备的原始闪存芯片的实际文件系统。 JFFS2 文件系统是日志结构化的可读写的文件系统,所以JFFS2也可以用在Linux,uCLinux中。JFFS2 的优缺点如下:
优点:
    使用了压缩的文件格式。最重要的特性是可读写操作。
缺点:
    JFFS2 文件系统挂载时需要扫描整个 JFFS2 文件系统,因此当 JFFS2 文件系统分区增大时,挂载时间也会相应的变长。使用 JFFS2 格式可能带来少量的 Flash 空间的浪费。这主要是由于日志文件的过度开销和用于回收系统的无用存储单元,浪费的空间大小大致是若干个数据段。 JFFS2 的另一缺点是当文件系统已满或接近满时, JFFS2 运行速度会迅速降低。这是因为垃圾收集的问题。

注意:
    (1)日志结构文件系统并不采用本地更新的方式,而是采用异步更新的方式,即当某个数据块需要更新时,先找一个新块将新数据写入,再将旧块擦除。不过旧数据并不马上在闪存中擦除,而是以日志方式作为历史记录保存下来,这为文件系统的恢复操作打下了基础.

(2)不适合用于NAND闪存的主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大,另外jffs文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间.

(2)yaffs:Yet Another Flash File System
    yaffs/yaffs2 是专门为 NAND Flash 设计的嵌入式文件系统。它是日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外掉电对文件系统一致性和完整性的影响,。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。它是跨平台的文件系统,除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。
yaffs/yaffs2 的优缺点如下:
优点:
    专门针对 NAND Flash,软件结构得到优化,速度快。
    使用硬件的 spare area 区域存储文件组织信息,启动时只需扫描组织信息,启动比较快。
    采用多策略垃圾回收算法,能够提高垃圾回收的效率和公平性,达到损耗平衡的目的。
缺点:
    没有采用压缩的文件格式。当包含的内容相同时, yaffs2 镜像文件要比 jffs2 镜像文件大。

注意:
    yaffs与yaffs2的主要区别在于,前者仅支持小页(512 Bytes)NAND闪存,后者则可支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。

(3)Cramfs:Compressed ROM File System
    Cramfs是Linux的创始人 LinusTorvalds参与开发的一种只读的压缩文件系统。它也基于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空间。uClinux系统通常采用Romfs文件系统。
    其他文件系统:fat/fat32也可用于实际嵌入式系统的扩展存储器(例如PDA,Smartphone, 数码相机等的SD卡),这主要是为了更好的与Windows桌面操作系统相兼容。ext2也可以作为嵌入式Linux的文件系统,不过将它用于 FLASH闪存会有诸多弊端。

(二)基于RAM的文件系统

(1)Ramdisk

Ramdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。
    在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。

(2)ramfs/tmpfs
    Ramfs是LinusTorvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。(实际上,VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。)
    Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。
    Ramfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。
    Tmpfs的一个缺点是当系统重新引导时会丢失所有数据。

(三)网络文件系统NFS (Network File System)

NFS是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。

以上讨论的都是基于存储设备的文件系统(memory-basedfile system),它们都可用作Linux的根文件系统。实际上,Linux还支持逻辑的或伪文件系统(logical orpseudo file system),例如procfs(proc文件系统),用于获取系统信息,以及devfs(设备文件系统)和sysfs,用于维护设备文件。

参考文档:

https://blog.csdn.net/firstlai/article/details/50631278

http://blog.chinaunix.net/uid-26833883-id-4574720.html
---------------------

嵌入式linux系统中常用的文件系统相关推荐

  1. YAFFS2文件系统在嵌入式LINUX系统中的应用

    YAFFS2文件系统在嵌入式LINUX系统中的应用 2011-03-31 19:59 181人阅读 评论(0) 收藏 举报 1.文件系统简述 随着32位CPU价格不断下跌,片上存储设备的容量相比越来越 ...

  2. Linux系统中常用命令行命令、快捷键、创建长路径的快捷键

    Linux系统中常用命令行命令.快捷键.创建长路径的快捷键 1.常用Linux命令: 1.1 文件和目录: cd /home 进入 '/home' 目录 cd - 返回上一级目录 cd -/- 返回上 ...

  3. 嵌入式Linux系统中打印机驱动的移植

    一.开发环境 硬件环境:DM365 打印机型号:HP P1007 虚拟机系统:Red Hat Enterprise Linux 5 交叉编译环境:Ti交叉编译环境安装包 二.详细步骤 1.下载Ghos ...

  4. 嵌入式linux系统中设备驱动程序

    嵌入式linux系统中设备驱动程序是内核的一部分,完成对设备初始.读写操作和控制等功能.驱动程序隐藏了 硬件设备的具体细节,对不同的设备提供一致的接口,这些接口通过file_Operation结构来定 ...

  5. 适用于linux的解压工具,Linux系统中常用的压缩和解压缩工具

    Linux系统中常用的压缩和解压缩工具 压缩:以时间换空间的一种操作: 压缩的原理:标记和替换: 压缩比:压缩之前与压缩之后的文件大小的比值:其中:纯文本文件的压缩比较大,视频.图像等文件压缩比小 能 ...

  6. Linux中常用的几个压缩工具,Linux系统中常用的压缩和解压缩工具

    Linux系统中常用的压缩和解压缩工具 压缩:以时间换空间的一种操作: 压缩的原理:标记和替换: 压缩比:压缩之前与压缩之后的文件大小的比值:其中:纯文本文件的压缩比较大,视频.图像等文件压缩比小 能 ...

  7. Linux系统中常用软件的安装(os7)

    # Linux系统中常用软件的安装(os7) 文章目录 1 `JDK`安装 2 `tomcat`安装 (1) 解压缩tomcat.tar.gz (2) 运行tomcat/bin/startup.sh ...

  8. linux下efs加密技术,在Linux系统中的加密文件系统应用(EFS)

    在Linux系统中的加密文件系统应用(EFS) 开源系统在企业中尤其是在服务器的构建和数据存储中得到了普遍的应用和推广,其安全问题得到了大家的关注.基于这些考虑,开源系统在数据安全方面提供了许多优秀和 ...

  9. Linux系统中常用操作命令

    常用指令 ls        显示文件或目录      -l          列出文件详细信息l(list)      -a         列出当前目录下所有文件及目录,包括隐藏的a(all) m ...

最新文章

  1. 安装Synchronization service (Project Server 2007) 时出现 MSMQ 错误的解决
  2. C++ 计算并输出三角形的面积
  3. elk示例-精简版2
  4. HYSBZ 1588 营业额统计 平衡二叉树模板
  5. Linux使用sendmail发送邮件
  6. JAVA中dot的用法_Java 方法
  7. 存储过程中SELECT INTO的使用
  8. 三角形外接圆圆心计算公式
  9. 什么是接触电流怎么测?
  10. 达梦8基础对象操作管理
  11. Kernel 日志缓存大小修改
  12. 基于单片机的led阅读灯方案
  13. 怎么样做能让站点文章收录更快一些呢
  14. 中国惠普前总裁孙振耀的毕生经验之谈
  15. 网络数据包转发过程详解
  16. 关于UDP双向通信原理解释与范例
  17. 【学习笔记】MacOS快捷键
  18. SAP 采购发票校验之 后续贷记 MIRO <转载>
  19. 前向传播算法(Forward propagation)与反向传播算法(Back propagation)
  20. 高德地图上线全国最全小客车、货车限行提醒功能

热门文章

  1. 劳保鞋批发,你找对地方了吗?
  2. 使用neon构建Nodejs的Rust addon简单示例
  3. 操作系统实验·Linux进程通信与内存管理
  4. WebGL入门(十六)-三维视图模型原理,视点、视线、观察点、上方向
  5. 现场审计实施系统--导入财务数据后进行调整
  6. HTML 4文档类型,html中不同的文档类型是什么?它们是什么意思?
  7. vivo android8公测,vivo官方宣布Funtouch OS 4.0开始公测
  8. thinkphp6使用自定义异常类
  9. Flutter我来啦
  10. 基于canvas 2D实现微信小程序自定义组件-环形进度条