嵌入式文件系统

嵌入式文件系统

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

  2. 分区特点
    一块Flash芯片可以被划分为多个分区,各分区可以采用不同的文件系统;两块Flash芯片也可以合并为一个分区使用,采用一个文件系统。
    即文件系统是针对于存储器分区而言的,而非存储芯片。

  3. 分类
    3.1 基于flash的文件系统
    3.1.1 jffs2
    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闪存会耗费大量时间.
3.1.2 yaffs
yaffs/yaffs2 是专门为 NAND Flash 设计的嵌入式文件系统。它是日志结构的文件系统,提供了损耗平衡和掉电保护,
可以有效地避免意外掉电对文件系统一致性和完整性的影响。与jffs2相比,它减少了一些功能(例如不支持数据压缩),
所以速度更快,挂载时间很短,对内存的占用较小。它是跨平台的文件系统,除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。
yaffs/yaffs2 的优缺点如下:
优点:
专门针对 NAND Flash,软件结构得到优化,速度快。
使用硬件的 spare area 区域存储文件组织信息,启动时只需扫描组织信息,启动比较快。
采用多策略垃圾回收算法,能够提高垃圾回收的效率和公平性,达到损耗平衡的目的。
缺点:
没有采用压缩的文件格式。当包含的内容相同时, yaffs2 镜像文件要比 jffs2 镜像文件大。
3.1.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 设备可以把它安装别的文件系统里。
3.1.4 Romfs
传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,
因而支持应用程序以XIP(eXecute In Place,片内运行)方式运行,在系统运行时,节省RAM空间。uClinux系统通常采用Romfs文件系统。
3.1.5 其他文件系统
fat/fat32也可用于实际嵌入式系统的扩展存储器(例如PDA,Smartphone, 数码相机等的SD卡),这主要是为了更好的与Windows桌面操作系统相兼容。
ext2也可以作为嵌入式Linux的文件系统,不过将它用于 FLASH闪存会有诸多弊端。

3.2 基于内存的文件系统
	3.2.1 Ramdisk

Ramdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。
将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。
在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。
3.2.2 ramfs/tmpfs
Ramfs是LinusTorvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。
(实际上,VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。)
Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,
例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。
Ramfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。
Tmpfs的一个缺点是当系统重新引导时会丢失所有数据。
3.3 基于网络的文件系统
NFS是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。在嵌入式Linux系统的开发调试阶段,
可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。
以上讨论的都是基于存储设备的文件系统(memory-basedfile system),它们都可用作Linux的根文件系统。
3.4 伪文件系统
实际上,Linux还支持逻辑的或伪文件系统(logical orpseudo file system),例如procfs(proc文件系统),
用于获取系统信息,以及devfs(设备文件系统)和sysfs,用于维护设备文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值