news 2026/8/27 20:58:28

存储_06:嵌入式文件系统——FATFS/LittleFS/UBIFS 怎么选

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
存储_06:嵌入式文件系统——FATFS/LittleFS/UBIFS 怎么选

适用人群:知道"直接读写 Flash 地址很麻烦",但不清楚该上什么文件系统、FATFS 和 LittleFS 差在哪、为什么 Linux 上又是 UBIFS 的同学。这是17_存储专栏第六篇,存储产品/设备必备。
读完你能得到:
① 为什么裸 Flash 要套文件系统;
② 四个常见嵌入式文件系统的定位与取舍;
③ 关键区分:带 FTL 的块设备(eMMC)vs 裸 Flash(SPI NOR)用哪个;
④ 选型决策树;
⑤ 和你13_嵌入式Linux基础根文件系统的关系。


一、为什么裸 Flash 不好直接用

你完全可以自己定个格式:“地址 0x1000 存配置、0x2000 存日志”。但很快会遇到:

  • 怎么找"下一个空位置"?怎么删文件回收空间?
  • 断电写到一半怎么办(见存储_05)?
  • SPI NOR 没有磨损均衡,老写同一区就坏了。

文件系统就是解决这些的:提供"文件/目录"抽象、管空间分配、配合底层做磨损和掉电安全。


二、常见嵌入式文件系统

文件系统适用介质磨损均衡掉电安全特点
FATFSSD/eMMC/U 盘(FAT 格式)❌(靠底层)一般通用、PC 可读、MCU 生态最成熟
LittleFSSPI NOR / 小 Flash✅ 自带✅ 强专为 MCU 设计,掉电安全+磨损均衡
SPIFFSSPI Flash一般老方案,基本被 LittleFS 取代
UBIFS / JFFS2NAND(Linux MTD)Linux 嵌入式 NAND 专用
ext4eMMC/SD(Linux)❌(eMMC 自带 FTL)一般Linux 通用

三、关键区分:块设备 vs 裸 Flash

这是选型的核心:

带 FTL 的"块设备"(eMMC / SD / U 盘): 内部控制器已做磨损均衡+坏块管理 → 上层直接上 FATFS / ext4 即可,不用操心底层 → 就像用硬盘 裸 Flash(SPI NOR / 外接 NAND 无控制器): 没有 FTL → 要用自带磨损均衡的文件系统(LittleFS)或自己写 FTL → 不能直接 FATFS(会写坏)

⚠️常见误区:把 FATFS 直接往 SPI NOR 上套。FATFS 本身不管磨损均衡,SPI NOR 没 FTL,结果某些扇区被频繁改写很快坏。正确做法:SPI NOR 用LittleFS(自带磨损+掉电安全),或自己加一层 FTL 再上 FATFS。


四、两个最该懂的

4.1 FATFS(MCU 生态最成熟)

  • 跑在 SD 卡 / eMMC 上,格式 PC 直接认(插电脑能读);
  • 提供f_open / f_write / f_read标准 API,和 PC 的 C 文件操作几乎一样;
  • 不管磨损均衡——但它通常跑在 eMMC/SD 上,那些器件自带 FTL 兜底,所以没问题。

4.2 LittleFS(MCU 小 Flash 首选)

  • 专为SPI NOR / 小容量 Flash设计;
  • 自带磨损均衡 + 掉电安全(写采用 COW 写时复制,崩溃可恢复);
  • 资源占用小,适合没有 OS 的 MCU;
  • 01里外扩的 W25Q64 想存日志/配置,LittleFS 是首选。

五、选型决策树

你的介质是? ├─ eMMC / SD / U 盘(带 FTL 块设备) │ └─ 上 FATFS(要 PC 互认)或 ext4(Linux) └─ SPI NOR / 裸 NAND(无 FTL) ├─ MCU 无 OS、小容量 │ └─ LittleFS(磨损+掉电安全都管) └─ Linux 嵌入式 NAND └─ UBIFS / JFFS2(走 MTD 层)

一句话:带控制器的存储(eMMC/SD)用 FATFS/ext4,裸 SPI NOR 用 LittleFS,Linux NAND 用 UBIFS


六、和你 Linux 根文件系统的关系

13_嵌入式Linux基础里讲的根文件系统(rootfs)、BusyBox,最终要落到一块存储上:

Linux 启动: bootloader 把内核 + dtb 从 eMMC/SD 读到 RAM → 挂载根文件系统(rootfs,也在 eMMC/SD 的 ext4,或 NAND 的 UBIFS) → init 起 BusyBox,进入 shell

所以13那篇的 rootfs 就是跑在存储_06讲的 ext4/UBIFS 之上的——文件系统是"根文件系统"的物理底座


七、踩坑

#后果正确做法
1FATFS 直接套 SPI NOR频繁写区写坏用 LittleFS 或先加 FTL
2忘了挂载/卸载直接断电文件系统损坏掉电前同步(见存储_05
3选错块大小空间浪费/性能差按介质特性配
4NAND 用 ext4 不用 UBIFS坏块/磨损失控NAND 走 MTD+UBIFS

八、面试速答

考官:SPI NOR 上想存日志,用什么文件系统?
:用 LittleFS。它专为小容量 Flash 设计,自带磨损均衡和掉电安全,适合没 OS 的 MCU。如果直接用 FATFS 套 SPI NOR,FATFS 不管磨损均衡,某些扇区会被频繁写坏。

考官:eMMC 上为什么能直接 FATFS?
:eMMC 内部有控制器跑 FTL,已经做了磨损均衡和坏块管理,对外是标准块设备,所以上层直接用 FATFS/ext4 就行,不用自己管底层。


九、总结

要点内容
为什么用 FS空间管理/抽象/磨损/掉电
FATFSeMMC/SD,通用,不管磨损(靠底层 FTL)
LittleFSSPI NOR,自带磨损+掉电安全
UBIFSLinux NAND,走 MTD
选型核心带 FTL 块设备→FATFS/ext4;裸 Flash→LittleFS/UBIFS

一句话总结:选文件系统先看介质——带控制器的 eMMC/SD 用 FATFS/ext4,裸 SPI NOR 用 LittleFS,Linux NAND 用 UBIFS;千万别把 FATFS 直接套裸 Flash,会写坏。


各文件系统的移植接口、配置参数以官方文档为准(FATFS 的 ff.c/ff.h、LittleFS 的 lfs.c)。Linux MTD/UBIFS 用法见13_嵌入式Linux基础配套。
本站相关:存储_01(介质定位)、存储_03(FTL)、存储_05(掉电安全)、13_嵌入式Linux基础(根文件系统)。


下一篇:存储_07_江波龙面试专项——常问题与项目包装

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 20:58:06

从传感器到算法:基于单片机的电子秤设计全流程解析

1. 项目概述:从零打造一台自己的电子秤做硬件开发的朋友,估计都绕不开“电子秤”这个经典项目。它看起来简单,不就是放个东西,屏幕上显示个重量嘛。但真上手做,你会发现里面门道不少:怎么把微小的形变转换成…

作者头像 李华
网站建设 2026/8/27 20:58:02

SDR多通道同步射频收发套件:从时钟到相位的完整设计实践

前阵子做多通道测向原型验证,被板卡之间采样不同步的问题折腾得够呛,后来干脆自己攒了一套同步射频收发快速原型套件。这套东西的核心思路很简单:把SDR(软件无线电)里那些分散的射频收发通道,用一套统一的时…

作者头像 李华
网站建设 2026/8/27 20:57:07

具身智能入门:从3D视觉到抓取注意力热图的真实机器人实践

1. 先想清楚“真实机器人”课程里真正要验证的命题是什么 上个月有位师弟来找我聊具身智能的起步设备,问了一个特别常见的问题:预算两三万,是先买机械臂,还是先买一台带深度相机的移动机器人?他的原话是,看…

作者头像 李华
网站建设 2026/8/27 20:55:20

中国海洋大学 2026年夏季《移动软件开发》 实验1:第一个微信小程序

微信小程序进阶之路:我的第一个小程序实战记录 📖 博客简介 本博客旨在系统性地记录我完成首个微信小程序的学习与实战过程,内容涵盖实验步骤、代码实践、问题排查以及心得体会。 作者:Olivia 所属课程:中国海洋大学…

作者头像 李华
网站建设 2026/8/27 20:52:01

进程与线程:从概念到实践

1. 进程概念程序:存放在外存中的一段代码的集合。进程:是程序动态执行的过程,包括创建、调度、消亡。2. 进程命令top:根据 CPU 占用率查看进程信息。PID:唯一区分进程的 ID 号。PPID:父进程的 ID 号。ps -e…

作者头像 李华