嵌入式设备的存储介质差异很大。NOR、NAND、eMMC、SD 卡的特性不同,适合的文件系统和升级方式也不同。选错存储方案,后面会在断电、坏块、寿命和性能上不断补坑。
一、MTD 是什么
MTD 面向原始 Flash 设备,常见于 NOR/NAND。
查看:
1 | cat /proc/mtd |
输出示例:
1 | mtd0: 00100000 "boot" |
MTD 设备通常需要考虑擦除块、坏块和写入对齐。
二、UBI/UBIFS
NAND Flash 常用 UBI/UBIFS。
UBI 负责:
- 坏块管理。
- 磨损均衡。
- 卷管理。
UBIFS 是运行在 UBI 上的文件系统。
常见命令:
1 | ubiattach |
NAND 上不要直接套用 eMMC 的思路。
三、eMMC 和 ext4
eMMC 更像块设备:
1 | ls /dev/mmcblk* |
常用 ext4:
1 | mkfs.ext4 /dev/mmcblk0p2 |
eMMC 内部有磨损均衡,但异常断电仍可能造成文件系统问题,所以配置写入仍要原子化。
四、squashfs
只读 rootfs 常用 squashfs:
- 只读。
- 压缩率高。
- 不怕运行时写坏。
- 适合系统分区。
搭配 data 分区保存运行时数据。
五、文件系统选择
简单建议:
1 | NOR: squashfs + jffs2 |
最终要根据芯片、Bootloader、内核支持和产品需求决定。
六、验收测试
必须测:
- 反复断电。
- data 写满。
- OTA 中断。
- 日志持续写入。
- 长时间运行。
- 恢复出厂。
存储问题往往不是当天暴露,而是在现场运行一段时间后暴露。
- 本文链接: https://blog.hansong.icu/2026/06/26/Embedded_Linux_Series_29_MTD_UBI_EMMC/
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。