当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]Linux 支持多种文件系统,包括 ext2 、 ext3 、 vfat 、 ntfs 、 iso9660 、 jffs 、 romfs 和 nfs 等,为了对各类文件系统进行统一管理, Linux 引入了虚拟文件系统 VFS(

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 文件系统。[!--empirenews.page--]

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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭