嵌入式文件系统

(结合工程实践选题调研分析同类软件产品)

一.文件系统简介

      在计算机中,文件系统是命名文件及放置文件的逻辑存储和恢复的系统。通俗的来说文件系统管理着很多文件也就是数据,这些数据又是存储在磁盘上的,因此实质上文件系统是管理磁盘的软件系统。一方面文件系统对磁盘空间进行统一规划,另外一方面文件系统提供给普通用户人性化的接口,通过更加形象的方式将磁盘中的数据展示给用户。

     现如今被大家PC机上所常用的操作系统如Windows、Linux都有文件系统,文件都被放置进目录(Windows中的文件夹)或子目录,在树状结构中你希望的位置中。除了PC机上挂载的本地文件系统,如Ext4、XFS、FAT32和Btrfs等文件系统之外,还有一些文件系统弥补了这些文件系统只能在本地进行磁盘格式化、使用的“缺陷”,例如分布式文件系统和集群文件系统,他们通过实现多个客户端同时访问同一服务端来解决资源共享的问题。

     本篇文章将针对嵌入式文件系统做详细介绍!

 

二.嵌入式文件系统

     嵌入式文件系统由桌面文件系统发展而来,但由于嵌入式设备工作环境的多样性,对文件系统的稳定性、安全性等方面有了更高的要求。因此嵌入式文件系统虽然继承了通用文件系统的组织结构,同时又有着自己的一些特点:

  •    文件系统占用资源应尽可能小
  •    满足可移动和便于携带的需求
  •    满足断电后的数据完整性保护
  •    支持多种存储设备、可伸缩、可剪裁、可移植等特点

 

     如下图所示,Linux 文件系统结构由 4 层组成,自上到下分别是用户层、内核层、驱动层和硬件层。用户层为用户提供一个操作接口,内核层实现了各种文件系统,驱动层是块设备的驱动程序,硬件层是嵌入式系统使用的几种存储器。 

     为了对各类文件系统进行统一管理,Linux 引入了虚拟文件系统 VFS,为各类文件系统提供统一的操作和API。

     在嵌入式 Linux 应用中,主要的硬件存储设备为 RAM(DRAM,SDRAM)和 ROM(常采用 Flash 存储器)。

嵌入式文件系统_第1张图片 

     注:MTD(Memeory Technology Device,存储技术设备):针对Flash做的底层驱动程序)

 

     根据存储设备的不同,可以将嵌入式文件系统划分为三大类:基于flash的文件系统,基于内存的文件系统,基于网络的文件系统。

 

     1.基于FLASH的文件系统

     闪存主要有NOR和NAND两种技术,比较常用的文件系统有jffs2,yaffs2,logfs,ubifs。传统的文件系统如ext2、ext3、ntfs等都是针对机械式硬盘设计的,用作Fash文件系统会很多的弊端。

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

 

     -- jffs2:Journalling Flash FileSystem

     jffs2是一个开放源码的项目,是用于微型嵌入式设备的原始闪存芯片的实际文件系统。其功能就是管理在MTD设备上实现的日志型文件系统,主要用于NOR型闪存,基于MTD驱动层。jffs2文件系统是可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。

 

 

     -- yaffs:Yet Another Flash File System

     yaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。当然,yaffs也可与MTD驱动程序配合使用。缺点就是没有采用压缩的文件格式,当包含的内容相同时, yaffs2 镜像文件要比jffs2 镜像文件大。

 

     -- Cramfs:Compressed ROM File System

     它也基于MTD驱动程序。在cramfs文件系统中,每一页(4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。

     Cramfs在嵌入式系统中应用广泛,但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。

 

     -- Romfs

     传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以XIP(eXecute In Place,片内运行)方式运行,在系统运行时,节省RAM空间。uClinux系统通常采用Romfs文件系统。

  其他文件系统:fat/fat32也可用于实际嵌入式系统的扩展存储器(例如PDA, Smartphone, 数码相机等的SD卡),这主要是为了更好的与最流行的Windows桌面操作系统相兼容。ext2也可以作为嵌入式Linux的文件系统,不过将它用于FLASH闪存会有诸多弊端。

 

     2.基于RAM的文件系统

     -- Ramdisk

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

 

     -- Ramfs/Tmpfs

     Ramfs文件系统工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。(实际上,VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。)

     Ramfs/Tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用Ramfs/Tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。

     Ramfs/Tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。Tmpfs还有一个缺点是当系统重新引导时会丢失所有数据。

 

     3.网络文件系统

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

 

     嵌入式文件系统大部分都是开源的资源,开发者们都可以从不同的渠道获取学习或者开发。生活中离不开嵌入式设备,随着各种新技术的到来,以及大众对技术不断更迭的期望,对嵌入式设备的文件系统也提出了更高的要求,例如更低功耗,更高安全等,期待嵌入式的下一个10年、20年!

 

 

参考文档:

http://www.elecfans.com/emb/20190402898910.html

https://blog.csdn.net/dhy5261302/article/details/64906612

你可能感兴趣的:(嵌入式文件系统)