当前位置: 首页 > news >正文

嵌入式 Linux 系统中的常用文件系统及应用场景

0,前言

在嵌入式 Linux 系统中,常用的文件系统包括 FAT32、exFAT、ext3、ext4、jffs2、yaffs2、ubifs 和 squashfs。不论是选择文件系统类型还是在嵌入式应用软件面试中,文件系统相关的问题经常被提及。目前,没有哪种文件系统能够适用于所有应用场景,它们各有优缺点,并且适用于不同的领域。

1,存储设备简介

当前主流的存储设备主要有三类:机械硬盘、FTL 闪存设备和裸 flash。

机械硬盘

  • 常见于 PC 机和大容量 MDVR 上
  • 文件系统通常与操作系统匹配
    • Windows 使用 NTFS
    • Linux 使用 ext4

FTL 闪存设备

  • 指带有 flash 转换层的存储设备,如 U 盘、SD 卡、TF 卡、eMMC 和 SSD
  • 常用文件系统有 FAT32 和 exFAT

裸 flash

  • 直接焊接在板子上使用,没有 flash 转换层
  • 一般容量较小,常用于存储固件程序或少量用户配置信息
  • 分为 nor 和 nand 两种
    • nor flash 上常用 jffs2
    • nand flash 常用 yaffs2
    • 对于大容量的 nand flash,ubifs 更适合存储媒体数据

2,文件系统简介

FAT32

  • 优点
    • 兼容性高,可在不同系统上使用
    • 软件实现简单,适用于嵌入式设备和 PC 机
    • 传统安防及行车记录仪大多使用 FAT32 格式
  • 缺点
    • 不带日志功能,热拔插易导致数据丢失
    • 丢失元数据会导致文件系统异常,如文件名乱码
    • 有容量大小限制,在大容量存储设备中响应缓慢

exFAT

  • 优点
    • 基于 FAT32 发展而来,解决 FAT32 的大容量限制及工作效率问题
    • 在 Windows 系统中,FTL 闪存设备容量大于 32GB 时默认格式化为 exFAT
  • 缺点
    • 微软拥有 exFAT 的专利,使用 exFAT 需考虑版权风险

ext4

  • 优点
    • 适用于 Linux 操作系统,带有日志功能,数据分块存储,安全性和效率较好
    • 适合在 Linux 系统中存储大容量音视频数据
  • 缺点
    • 不能跨平台使用
    • 在嵌入式设备中使用 ext4 作为 TF 卡的文件系统时,在 Windows 系统上无法识别,会提示格式化

jffs2

  • 优点
    • 日志型文件系统,常用于 nor flash,存储程序或用户配置数据
    • 崩溃时一致性较好,常用于 nor flash 嵌入式设备的参数分区
  • 缺点
    • 挂载时需全盘扫描 flash 以建立文件信息,在大容量 flash 分区中使用效率不高

yaffs2

  • 优点
    • 类似 jffs2,主要应用于 nand flash
    • 使用 nand flash 的 OOB 区存储元数据,挂载时只扫描 OOB 区域,提升文件系统效率
  • 缺点
    • 不支持数据压缩,元数据开销大,扩展性能差

ubifs

  • 优点
    • 主要应用于大容量 nand flash,使用逻辑擦除块与物理擦除块分离的方法,提供磨损平衡功能
    • 支持动态调整大小,扩展性能好
  • 缺点
    • 软件复杂度高,调试难度大

squashfs

  • 优点
    • 压缩文件系统,压缩比例高,文件系统只读
    • 主要应用于不需要修改内容的资源分区,如字体和语音提示文件
    • 高压缩比可在有限空间内存储更多数据,降低 flash 成本

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数理基础知识
  • vue3中图片引入
  • Apache Curator 创建节点时,如果节点存储就会抛出异常吗?
  • 正点原子imx6ull-mini-Linux驱动之Linux IIO 驱动实验
  • 计算机网络408考研 2021
  • C++ Rect And Point Search Algorithm
  • CORS与JSONP漏洞原理及其复现
  • 模拟退火的
  • WebRTC ICE配置类型
  • MySQL使用(表)
  • 【零基础实战】基于物联网的人工淡水湖养殖系统设计
  • 如何将 GTA Online 的加载时间缩短 70%
  • docker搭建内网穿透服务
  • 保姆级教程,一文了解LVS
  • Ashok:一款多功能开源网络侦查OSINT工具
  • 10个确保微服务与容器安全的最佳实践
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Cumulo 的 ClojureScript 模块已经成型
  • ERLANG 网工修炼笔记 ---- UDP
  • ES6核心特性
  • ES6系统学习----从Apollo Client看解构赋值
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Linux gpio口使用方法
  • node-glob通配符
  • Otto开发初探——微服务依赖管理新利器
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • 设计模式走一遍---观察者模式
  • 通信类
  • 因为阿里,他们成了“杭漂”
  • 运行时添加log4j2的appender
  • FaaS 的简单实践
  • 带你开发类似Pokemon Go的AR游戏
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # Panda3d 碰撞检测系统介绍
  • #### golang中【堆】的使用及底层 ####
  • #控制台大学课堂点名问题_课堂随机点名
  • (1)无线电失控保护(二)
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (一)VirtualBox安装增强功能
  • (转)ORM
  • .bat批处理出现中文乱码的情况
  • .describe() python_Python-Win32com-Excel
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET Core 2.1路线图
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Core中的去虚
  • .net FrameWork简介,数组,枚举
  • .NET MVC第五章、模型绑定获取表单数据
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性