嵌入式文件系统基础知识
对于嵌入式系统来说,除了一个嵌入式内核之外,还需要一个嵌入式文件系统来管理和存储数据和程序。目前,嵌入式 Linux 操作系统支持很多种文件系统,具体使用哪种文件系统,需要根据存储介质、访问速度、存储容量等来选择。嵌入式文件系统 Linux 支持多种文件系统,包括 ext2、ext3、ext4、vfat、ntfs、iso9660、jffs、yaffs、romfs、cramfs 和 n...
对于嵌入式系统来说,除了一个嵌入式内核之外,还需要一个嵌入式文件系统来管理和存储数据和程序。目前,嵌入式 Linux 操作系统支持很多种文件系统,具体使用哪种文件系统,需要根据存储介质、访问速度、存储容量等来选择。
嵌入式文件系统
Linux 支持多种文件系统,包括 ext2、ext3、ext4、vfat、ntfs、iso9660、jffs、yaffs、romfs、cramfs 和 nfs 等等。为了对各类文件系统进行统一管理,Linux 引入了虚拟文件系统 VFS,为各类文件系统提供统一的操作和 API。
Linux 文件系统结构由 4 层组成,分别是用户层、内核层、驱动层和硬件层。用户层为用户提供一个操作接口,内核层实现了各种文件系统,驱动层是块设备的驱动程序,硬件层是嵌入式系统使用的几种存储器。
在 Linux 文件系统结构中,内核层的文件系统实现是必须的。Linux 启动时,第一个必须挂载的是根文件系统,如果系统不能从指定的设备上挂载根文件系统,那么系统会出错从而退出启动。当根文件系统挂载成功后,才可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在多个不同类型的文件系统。
不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式 Linux 应用中,主要的存储设备为 RAM(DRAM,SDRAM)和 ROM(常采用 Flash 存储器),常用的基于 Flash 存储设备的文件系统类型包括 jffs2、yaffs、cramfs、romfs、ramdisk 和 ramfs/tmpfs 等。
(后面补个图片)
嵌入式系统的存储介质
Linux 操作系统支持大量的文件系统,在嵌入式领域,使用哪种文件系统需要根据存储芯片的类型来决定。目前市场上,嵌入式系统主流的两种存储介质是 NOR 和 NAND Flash。Intel 公司与 1988 年首先开发了 NOR Flash 存储器,其特点是芯片内执行(XIP,eXecute In Place),这样应用程序可以直接在 Flash 闪存内运行,不必再把代码读到系统 RAM 中。NOR 的传输效率很高,在 1MB~4MB 的小容量时具有很高的成本效益,但缺点是写入和擦除速度很慢,对性能有较大的影响。
1989年,日本东芝公司开发了 NAND Flash 存储器。NAND Flash 与 NOR Flash 相比,NAND Flash 能提供极高的单元密度,可以达到高存储密度,同时写入和擦除的速度也很快。下面是两种存储器的比较:
比较项 | NOR Flash | NAND Flash |
---|---|---|
读速度 | NOR 的读速度相对快 | NAND 的读速度相对慢 |
写速度 | NOR 的写速度相对慢很多 | NAND 的写速度相对快很多 |
擦除速度 | NOR 的擦除速度相对慢很多 | NAND 的擦除速度相对快很多 |
擦除单元 | NOR 的擦除单元要大一些,擦除电路更多一些 | NAND 的擦除单元更小,擦除电路更少一些 |
容量 | 相对小,主要用于存放代码 | 大,适用于存放大量的数据 |
成本 | 相对高 | 相对低 |
寿命 | 擦写10万次 | 擦写100万次 |
总的来说,NOR Flash 比较适合存储代码,其容量较小(一般小于 32 MB),而且价格较高。NAND Flash 容量较大,可达1GB以上,价格也相对便宜,比较适合存放数据。一般来说,128MB 以下的 NAND Flash 芯片的一页大小为 528 Bytes,另外每页有 16 Bytes 的备用空间,用来存储 ECC 校验码或者坏块标志等信息。若干页组成一个块(Block),其大小通常为 32KB 或 64KB。
JFFS 文件系统
瑞典的 Axis Communications 公司基于 Linux 2.0 的内核,为嵌入式操作系统开发了 JFFS 文件系统。其升级版本 JFFS2 是 RedHat 公司基于 JFFS 开发的闪存文件系统,最初是针对 RedHat 公司的嵌入式产品 eCos 开发的嵌入式文件系统,所以 JFFS2 也可以用在 Linux 和 uCLinux 等操作系统中。JFFS 是 Journalling Flash File System 的缩写,即闪存设备日志型文件系统。
JFFS 文件系统主要用于 NOR 型 Flash 存储器,其基于 MTD 驱动层。这种文件系统的特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使 jffs2 的运行速度大大放慢。
JFFS 文件系统不适合用于 NAND 型 Flash 存储器。主要是因为 NAND 闪存的容量一般较大,这样导致 JFFS 为维护日志节点所占用的内存空间迅速增大。另外,JFFS 文件系统在挂载时需要扫描整个 Flash 的内容,以找出所有的日志节点,建立文件结构,对于大容量的 NAND Flash 会耗费大量时间。
YAFFS 文件系统
YAFFS 是第一个专门为 NAND Flash 存储器设计的嵌入式文件系统,适用于大容量的存储设备;并且是在 GPL(General Public License)协议下发布的,可在其网站免费获得源代码。
YAFFS 文件系统有4个优点,分别是:
- 速度快
- 占用内存少
- 不支持压缩
- 只支持 NAND Flash 存储器
在 YAFFS 文件系统中,文件是以固定大小的数据块进行存储的。块的大小可以是 512 Bytes、1024 Bytes 或者 2048 Bytes。每个文件(包括目录)都是由一个数据块头和数据组成。数据块头中保存了 ECC 校验码和文件系统的组织信息,用于错误检测和坏块处理。YAFFS 文件系统充分考虑了 NAND Flash 的特点,把每个文件的数据块头存储在 NAND Flash 的 16 Bytes 备用空间中。
当文件系统被挂载时,只需扫描存储器的备用空间就能将文件系统信息读入内存,并且驻留在内存中,不仅加快了文件系统的加载速度,也提高了文件的访问速度,但是增加了内存的消耗。
选择哪一种文件系统,需要根据 Flash 存储器的类型来确定。Flash 存储器类型主要有 NOR 和 NAND Flash。根据存储器类型,NOR Flash 存储器比较适用于 JFFS,而 NAND Flash 存储器比较适用于 YAFFS。
文件系统配置
更多推荐
所有评论(0)