0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详细讲解嵌入式Linux支持的多种文件系统

电子设计 来源:互联网 作者:佚名 2017-12-19 07:24 次阅读

Linux支持多种文件系统类型,在嵌入式开发中上常用有:ROMFS、JFFS2、NFS、CRAMFS、YAFFS、UBIFS等。

JFFS文件系统

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闪存会耗费大量时间。

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在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。

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 设备可以把它安装别的文件系统里。

Romfs

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

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

2. 基于RAM的文件系统

(1) Ramdisk

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

在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。

(2)ramfs/tmpfs

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

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

Ramfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。

Tmpfs的一个缺点是当系统重新引导时会丢失所有数据。

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11224

    浏览量

    208903
收藏 人收藏

    评论

    相关推荐

    stm32单片机基于rt-thread 的 littlefs 文件系统 的使用

    简介littlefs是ARM官方推出的,专为嵌入式系统设计的文件系统,相比传统的文件系统,littlefs具有以下优点:1、自带擦写均衡2、支持
    的头像 发表于 11-06 08:04 295次阅读
    stm32单片机基于rt-thread 的 littlefs <b class='flag-5'>文件系统</b> 的使用

    Ubuntu系统迁移指南:轻松驾驭国产3568嵌入式实验箱

    本文基于创龙教仪TL3568-PlusTEB嵌入式教学实验箱实现ubuntu系统移植。瑞芯微平台提供的SDK支持buildroot、Debian、yocto,但Ubuntu需要自行定制文件系统
    的头像 发表于 10-29 08:06 281次阅读
    Ubuntu<b class='flag-5'>系统</b>迁移指南:轻松驾驭国产3568<b class='flag-5'>嵌入式</b>实验箱

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-应用编程示例控制LED灯之sysfs文件系统

    文件系统概念sysfs是Linux2.6以上的内核在发展迭代过程中衍生出来的一个功能,它的作用是通过一个内存文件系统将信息导出到用户进程空间。文件系统的目录层次结构组织严格,并且是基于
    发表于 10-21 09:52

    飞凌嵌入式ElfBoard ELF 1板卡-应用编程示例控制LED灯之sysfs文件系统

    sysfs文件系统概念 sysfs是Linux2.6以上的内核在发展迭代过程中衍生出来的一个功能,它的作用是通过一个内存文件系统将信息导出到用户进程空间。文件系统的目录层次结构组织严
    发表于 10-18 09:31

    Linux文件系统的挂载过程

    Linux文件系统(rootfs)是Linux系统中所有其他文件系统和目录的起点,它是内核启动时挂载的第一个
    的头像 发表于 10-05 16:50 266次阅读

    如何构建Linux文件系统

    构建Linux文件系统是一个涉及多个步骤和概念的过程,它对于Linux系统的启动和运行至关重要。
    的头像 发表于 10-05 16:47 230次阅读

    小型文件系统如何选择?FatFs和LittleFs优缺点比较

    01  概述 文件系统嵌入式系统中的作用不可或缺,它提供了对非易失性存储设备(如闪存、SD卡等)上的数据进行有效组织和管理的能力。通过文件系统
    的头像 发表于 09-29 16:14 952次阅读
    小型<b class='flag-5'>文件系统</b>如何选择?FatFs和LittleFs优缺点比较

    嵌入式linux开发的基本步骤有哪些?

    嵌入式Linux开发是一个复杂的过程,涉及到硬件选择、操作系统移植、驱动开发、应用程序开发等多个方面。以下是嵌入式Linux开发的基本步骤,
    的头像 发表于 09-02 09:11 394次阅读

    嵌入式linux开发板怎么操作

    嵌入式Linux开发板是一种基于Linux操作系统嵌入式系统开发平台。它通常包括一个处理器、内
    的头像 发表于 09-02 09:09 320次阅读

    嵌入式linux开发板芯片的工作原理

    嵌入式Linux开发板是一种基于Linux操作系统嵌入式系统开发平台,它广泛应用于工业控制、智
    的头像 发表于 09-02 09:07 328次阅读

    嵌入式机电一体化系统设计与实现》读后感

    的应用。曾教授详细讲解了如何为嵌入式系统构建Linux环境,以及在Linux中进行程序设计的方法
    发表于 08-21 08:45

    专家力荐|《嵌入式系统原理与开发——基于RISC-V和Linux系统》新书发售

    当前,嵌入式系统已成为智能设备的核心之一,RISC-V+Linux的开源力量为嵌入式系统注入强大的创新动力。作为中国RISC-V软硬件生态领
    的头像 发表于 07-24 08:20 512次阅读
    专家力荐|《<b class='flag-5'>嵌入式</b><b class='flag-5'>系统</b>原理与开发——基于RISC-V和<b class='flag-5'>Linux</b><b class='flag-5'>系统</b>》新书发售

    linux--sysfs文件系统

    sysfs文件系统 sysfs,全称为System Filesystem,是一个由Linux内核实现的虚拟文件系统。它扮演着一个桥梁的角色,将内核中的设备和驱动程序信息以文件的形式呈现
    的头像 发表于 07-08 11:37 718次阅读
    <b class='flag-5'>linux</b>--sysfs<b class='flag-5'>文件系统</b>

    嵌入式SD NAND】基于FATFS/Littlefs文件系统的日志框架实现

    文章目录 【嵌入式】基于FATFS/Littlefs文件系统的日志框架实现 1. 概述 2. 设计概要 3. 设计实现 3.1 初始化 `init` 3.2 日志写入 `write` 3.3 日志
    的头像 发表于 03-14 18:13 1007次阅读
    【<b class='flag-5'>嵌入式</b>SD NAND】基于FATFS/Littlefs<b class='flag-5'>文件系统</b>的日志框架实现

    嵌入式SD NAND】基于FATFS/Littlefs文件系统的日志框架实现

    文章目录【嵌入式】基于FATFS/Littlefs文件系统的日志框架实现1.概述2.设计概要3.设计实现3.1初始化`init`3.2日志写入`write`3.3日志读取`read`3.4注销
    的头像 发表于 03-14 18:12 1123次阅读
    【<b class='flag-5'>嵌入式</b>SD NAND】基于FATFS/Littlefs<b class='flag-5'>文件系统</b>的日志框架实现