百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

嵌入式文件系统合集:FAT32、exFAT、ext3、ext4、jffs2、yaffs2

sinye56 2025-02-09 14:00 6 浏览 0 评论

liwen01 2024.07.21

前言

在嵌入式 Linux 系统中常用的文件系统有:FAT32、exFAT、ext3、ext4、jffs2、yaffs2、ubifs、squashfs。不管是在文件系统类型选型还是嵌入式应用软件面试中,关于文件系统的问题都会经常被提起。

就目前而言,并没有哪款文件系统可以适用于所有应用场景,它们各有优缺点,各有适用领域。

(一)存储设备简介

目前主流的存储设备有3类:机械硬盘、FTL 闪存设备、裸flash。

机械硬盘:日常使用比较多的是在PC机上,还有一部分是在大容量的MDVR上,它使用的文件系统,一般是跟随使用的操作系统,window 使用 NTFS, Linux 使用 ext4。

FTL闪存设备:指有带 flash 转换层的 flash 储存设备,比如常用的:U盘、SD、TF卡、emmc、ssd设备。它们上面常用的文件系统是 FAT32、exFAT。

裸flash:直接将 flash 焊接在板子上直接使用,没有flash 转换层,一般容量较小,用来存储固件程序或是少量的用户配置信息等,有 nor 和 nand 两种,nor flash 上常用的是 jffs2, nand flash 常用的是 yaffs2,有些nand flash容量会比较大,一般用来存储媒体数据,比如图片和视频,对于大容量的nand flash, 使用 ubifs 会更加合适。

(二)文件系统简介

(1)FAT32

FAT32 兼容性很高,可以在不同的系统上使用,软件实现简单、支持在嵌入式设备和PC机上使用。传统安防及行车记录仪大部分都是使用 FAT32 文件系统格式。在嵌入式设备上采集录制了数据,可以在嵌入式设备或PC机上查看。

FAT32 文件系统的缺点是不带日志功能,在热拔插的情况下,容易导致数据丢失,如果丢失的是元数据,那文件系统就会出现异常,常见的是文件名乱码。另外一个缺点是有容量大小限制,在大容量存储设备中响应缓慢。

(2)exFAT

exFAT 是在FAT32基础上发展而来,在window系统,如果FTL闪存设备容量大于32G,window默认会将卡格式化成exFAT格式。exFAT 主要解决 FAT32 大容量限制及大容量工作效率问题。

微软拥有 exFAT 的绝大部分专利,如果要使用 exFAT 到产品上,需要考虑版权风险。

(3)ext4

ext4 适用于 Linux 操作系统,有带日志功能,数据分块存储,安全和效率都比较好,如果是要在 Linux 系统中存储比较大容量的音视频数据,可以选择 ext4 文件系统。

ext4 的缺点是不能跨平台使用,如果在嵌入式设备中使用 ext4 作为 TF 卡的文件系统,那么 TF 卡放置到 window 系统上就不能识别,会直接提示需要格式化。对于那些需要在设备和window PC机上查看存储数据的存储设备就不适合使用 ext4 文件系统了。

(4)jffs2

jffs2 是一个日志型文件系统,常用在 nor flash 上,用来存储程序或是用户配置数据。因为是日志文件系统,所以文件系统的崩溃一致性会比较好。一般是用作 nor flash 嵌入式设备的参数分区文件系统。

jffs2 的缺点是,在挂载的时候,需要全盘扫描 flash 以建立完整的文件信息,这也导致了它在大容量 flash 分区中使用效率不高。

(5)yaffs2

yaffs2 与 jffs2 类似, yaffs2 主要应用于 nand flash 上,它与 jffs2 的区别是,yaffs2 使用了nand flash 的 OOB 区来存储一些元数据,所以 yaffs2 在挂载时只扫描 OOB 区域就可以构建出文件的依赖关系,从而提升文件系统的效率。

yaffs2 的缺点是不支持数据压缩,元数据开销大,扩展性能差。

(6)ubifs

ubifs 主要应用于大容量的 nand flash, 它使用逻辑擦除块与物理擦除块分离的方法,可以为整个 flash 空间提供磨损平衡功能。另外它支持动态调大小,整体的扩展性能好。

ubifs 的缺点是软件复杂度高,调试难度比较大。

(7)squashfs

squashfs 是一个压缩文件系统,它最大的优势是压缩比例高,最大的限制是文件系统为只读。它主要应用于一些不需要修改内容的资源分区上,比如字体,语音提示文件等。压缩比高表示可以在有限空间存储更多的数据内容,从而达到降低 flash 成本的目的。

各文件系统工作原理及它们优缺点的详细介绍,可以选择查看前面已经分析过的文章:

文件系统(一):存储介质、原理与架构

文件系统(二):分区、格式化数据结构

文件系统(三):嵌入式、计算机系统启动流程与步骤

文件系统(四):FAT32文件系统实现原理

文件系统(五):exFAT 文件系统原理详解

文件系统(六):一文看懂linux ext4文件系统工作原理

文件系统(七):文件系统崩溃一致性、方法、原理与局限

文件系统(八):Linux JFFS2文件系统工作原理、优势与局限

文件系统(九):一文看懂yaffs2文件系统原理

文件系统(十):一文看懂 UBI 文件系统

文件系统(十一):Linux Squashfs只读文件系统介绍

结尾

文件系统系列介绍,到这里就告一段落了,后续可能会更新一个无线网络开发相关的专题介绍。上面介绍的内容如有错误,欢迎在留言区留言指出,不胜感激。当然,如果你有其它的想法,也欢迎一起交流。


------------------End------------------

如需获取更多内容

请关注liwen01公众号

相关推荐

程序员:JDK的安装与配置(完整版)_jdk的安装方法

对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...

Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置

一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...

麒麟系统安装JAVA JDK教程_麒麟系统配置jdk

检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...

学习笔记-Linux JDK - 安装&配置

前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

测试员必备:Linux下安装JDK 1.8你必须知道的那些事

1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...

Linux 下安装JDK17_linux 安装jdk1.8 yum

一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...

在Ubuntu系统中安装JDK 17并配置环境变量教程

在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...

如何在 Linux 上安装 Java_linux安装java的步骤

在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...

Windows和Linux环境下的JDK安装教程

JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...

linux安装jdk_linux安装jdk软连接

JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...

linux安装jdk,全局配置,不同用户不同jdk

jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...

运维大神教你在linux下安装jdk8_linux安装jdk1.7

1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...

window和linux安装JDK1.8_linux 安装jdk1.8.tar

Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...

最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?

默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...

取消回复欢迎 发表评论: