嵌入式存储文件系统:ext4、jffs2、ubifs 格式选型与适配
嵌入式存储文件系统ext4、jffs2、ubifs 格式选型与适配选文件系统就像选鞋子——跑步穿跑鞋登山穿登山靴。把 ext4 硬塞进 NOR Flash就像穿高跟鞋踢足球不是不行是疼。引言嵌入式设备的存储介质种类繁多SD 卡、eMMC、NOR Flash、NAND Flash……每种介质的特性不同对应的文件系统也不同。选错文件系统轻则性能拉胯重则数据丢失。本文将对比主流嵌入式文件系统格式给出选型建议和适配方法。一、嵌入式存储介质分类在选文件系统之前先搞清楚存储介质的类型介质类型特点典型容量常见用途NOR Flash读取快、随机访问、XIP可执行1~32MB存放Bootloader、内核NAND Flash密度高、便宜、有坏块128MB~4GB存放根文件系统、用户数据eMMC内置控制器、无坏块问题4~64GB手机、平板、开发板SD/TF卡可插拔、便携4~128GB开发板、便携设备SPI Flash接口简单、容量小4~32MB小型IoT设备关键区别NOR/NAND Flash 是裸芯片需要文件系统处理坏块和磨损均衡eMMC/SD 卡内置了 FTLFlash Translation Layer控制器对上层透明。二、主流文件系统格式对比2.1 全面对比表特性ext4JFFS2UBIFSSquashFSYAFFS2支持介质eMMC/SDNOR/NANDNAND任意NAND可写性读写读写读写只读读写掉电安全否需journal是是N/A是磨损均衡不需要(FTL处理)内置UBI层处理不需要内置坏块管理不需要(FTL处理)内置UBI层处理不需要内置压缩否是(zlib)是(lzo/zlib)是(xz/gzip)否挂载速度快慢(全扫描)快(索引)快中内存占用低高(全加载)中低中适用容量任意128MB2GB任意2GB2.2 各格式详解ext4桌面 Linux 的主力文件系统。在嵌入式中主要用于eMMC 和 SD 卡。优点成熟稳定、性能好、工具链完善缺点不支持掉电安全虽然有 journal但嵌入式突然断电仍有风险适用eMMC、SD 卡资源相对充足的设备JFFS2专为 Flash 设计的日志结构文件系统。优点掉电安全、支持压缩、支持 NOR 和 NAND缺点挂载速度随容量线性增长128MB 需要 10 秒内存占用大适用小容量 NOR Flash32MB小容量 NANDUBIFSJFFS2 的继任者基于 UBI 子系统专为大容量 NAND Flash 优化。优点挂载快维护索引树、支持压缩、掉电安全缺点配置复杂需要先创建 UBI 卷适用大容量 NAND Flash128MB~2GBSquashFS只读压缩文件系统适合存放不需要修改的系统文件。优点压缩率高xz压缩可节省60%空间、挂载快缺点只读无法修改适用根文件系统的只读部分、overlayfs 的底层三、选型决策流程存储介质是什么 │ ┌────────────┼────────────┐ │ │ │ eMMC/SD NAND Flash NOR Flash │ │ │ ext4(首选) 容量128MB? 容量32MB? │ / \ / \ 否 是 否 是 否 │ │ │ │ │ SquashFS UBIFS JFFS2 JFFS2 SquashFS (只读层) (只读层)选型原则总结eMMC/SD 卡→ ext4读写或 squashfs只读大容量 NAND→ UBIFS小容量 NAND→ JFFS2NOR Flash→ JFFS2小容量或 SquashFS只读需要只读保护→ SquashFS OverlayFS上层可写四、各文件系统适配方法4.1 ext4 适配# 1. 创建 ext4 镜像ddif/dev/zeroofrootfs.ext4bs1Mcount256mkfs.ext4-Lrootfs rootfs.ext4# 2. 挂载并填充内容mkdir-p/mnt/rootfssudomount-oloop rootfs.ext4 /mnt/rootfssudocp-a_install/* /mnt/rootfs/sudoumount/mnt/rootfs# 3. 烧录到 SD 卡分区sudoddifrootfs.ext4of/dev/sdb2bs1M内核 bootargs 配置root/dev/mmcblk0p2rootfstypeext4 rootwait rw4.2 JFFS2 适配JFFS2 镜像使用mkfs.jffs2工具制作# 1. 安装 mtd-utilssudoaptinstallmtd-utils# 2. 制作 JFFS2 镜像# -p 0x1000000: 镜像大小16MB# -r rootfs/: 源目录# -o rootfs.jffs2: 输出文件# --pad: 填充到指定大小mkfs.jffs2\-s0x800\-e0x20000\-p0x1000000\-drootfs/\-orootfs.jffs2# 参数说明:# -s: 页大小NAND页大小2048字节0x800# -e: 擦除块大小128KB0x20000# -p: 填充到指定大小# -d: 源目录# -o: 输出文件内核 bootargs 配置root/dev/mtdblock2rootfstypejffs2 rw4.3 UBIFS 适配UBIFS 的制作流程比 JFFS2 复杂需要两步先制作 UBIFS 镜像再封装为 UBI 镜像。# 1. 制作 UBIFS 镜像# -m 2048: 最小IO大小NAND页大小# -e 129024: 擦除块大小128KB减去UBI头开销# -c 2048: 最大逻辑擦除块数# -r rootfs/: 源目录mkfs.ubifs\-m2048\-e129024\-c2048\-rrootfs/\-orootfs.ubifs# 2. 封装为 UBI 镜像# 需要创建 ubifs.ini 配置文件catubifs.iniEOF [ubifs] modeubi imagerootfs.ubifs vol_id0 vol_size256MiB vol_typedynamic vol_namerootfs vol_alignment1 vol_flagsautoresize EOF# 生成 UBI 镜像ubinize\-m2048\-p128KiB\-s2048\-O2048\-orootfs.ubi\ubifs.ini关键参数计算参数含义计算方式-m最小IO大小 NAND 页大小-e逻辑擦除块大小 物理擦除块 - 2×(页大小8)-c最大LEB数 分区大小 / 逻辑擦除块大小-p物理擦除块大小 NAND 擦除块大小内核 bootargs 配置ubi.mtd2rootubi0:rootfsrootfstypeubifs rw4.4 SquashFS OverlayFS 适配这种方案下底层 SquashFS 提供只读的系统文件上层 OverlayFS 提供可写层。常见于 OpenWrt 等路由器系统。# 1. 制作 SquashFS 镜像mksquashfs rootfs/ rootfs.squashfs\-compxz\-no-xattrs\-no-fragments# 2. 烧录到 Flash 分区# Flash 分区布局:# | u-boot | kernel | rootfs(squashfs) | overlay(jffs2) |# 3. 内核启动后用 overlayfs 合并可写层mount-tsquashfs /dev/mtdblock2 /rommount-tjffs2 /dev/mtdblock3 /overlaymount-toverlay overlay\-olowerdir/rom,upperdir/overlay/upper,workdir/overlay/work\/mnt五、NAND Flash 适配注意事项5.1 分区划分NAND Flash 通常在设备树中定义分区nand { partition0 { label bootloader; reg 0x000000 0x100000; /* 1MB */ }; partition100000 { label kernel; reg 0x100000 0x500000; /* 5MB */ }; partition600000 { label rootfs; reg 0x600000 0x2000000; /* 32MB */ }; partition2600000 { label userdata; reg 0x2600000 0x1A00000; /* 26MB */ }; };5.2 硬件 ECC 配置NAND Flash 需要配置 ECCError Correction Code校验方式# 查看NAND Flash信息cat/proc/mtd dev: size erasesize name mtd0: 04000000 00020000nand-flashmtd1: 00100000 00020000bootloadermtd2: 00500000 00020000kernelmtd3: 02000000 00020000rootfs总结文件系统选型的核心原则存储介质决定文件系统类型。eMMC/SD 用 ext4NAND 用 UBIFS 或 JFFS2NOR 小容量用 JFFS2。如果需要只读保护SquashFS OverlayFS 是最佳组合。选对文件系统只是第一步正确配置分区参数页大小、擦除块大小、LEB数量才是成功适配的关键。下一阶段就是打包烧录让系统真正在板子上跑起来。

相关新闻

近期AI协作写量化规则,要按阶段安排任务

近期AI协作写量化规则,要按阶段安排任务

从人工交易规则走向可执行表达,常见误区是把所有问题都推到“写 Python”这一步。实际上,代码只是其中一个环节。更稳妥的方式,是先把学习、规则表达、开发和验证分开看,让每一步都有清楚的产出。代码要回到规则本身第一阶段更像是…

2026/10/18 9:14:08 阅读更多 →
C++ const关键字深度解析:从基础语义到高级应用实战

C++ const关键字深度解析:从基础语义到高级应用实战

1. 项目概述:为什么const是C的基石如果你写过C,肯定见过const。它可能是你最早接触的关键字之一,但也是最容易被轻视和误解的一个。很多人觉得,const不就是定义一个常量吗,有什么好讲的?但在我十多年的C开发…

2026/10/18 9:11:49 阅读更多 →
没用AI写为什么还被判AIGC?讲清检测逻辑再降下来

没用AI写为什么还被判AIGC?讲清检测逻辑再降下来

没用AI写为什么还被判AIGC?讲清检测逻辑再降下来 我猜你现在心里是有点憋屈的。这篇论文你是真的自己写的,一句一句敲出来的,改了七八遍,连参考文献都是自己一篇篇翻的。结果检测报告出来,AIGC 率标红一大片&#xff…

2026/10/17 18:14:47 阅读更多 →

最新新闻

【AI】codex 使用教程:从 AGENTS.md 到 skills 的完整配置指南

【AI】codex 使用教程:从 AGENTS.md 到 skills 的完整配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:29:02 阅读更多 →
DeepThink V1.1.0 开源发布:用 TaoToken 统一 Key 打造个人 AI 操作系统,全自主托管跑通超复杂长程任务

DeepThink V1.1.0 开源发布:用 TaoToken 统一 Key 打造个人 AI 操作系统,全自主托管跑通超复杂长程任务

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:28:02 阅读更多 →
优秀的大模型API网关系统Veloera:Docker部署与TaoToken统一Key接入实践

优秀的大模型API网关系统Veloera:Docker部署与TaoToken统一Key接入实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:28:02 阅读更多 →
Java批量重命名命令行工具:正则匹配与安全校验实战

Java批量重命名命令行工具:正则匹配与安全校验实战

简介:针对Java文件批量重命名的源码包,面向日常开发中需要整理大量文件的Java程序员,提供一套简单直接的解决方案;整个资源为一个压缩包,体积仅1KB,内含1个Java源文件,代码结构紧凑,…

2026/10/19 0:28:02 阅读更多 →
Java 重造 Agent 框架:从 ReAct 到工具调用的工程实践

Java 重造 Agent 框架:从 ReAct 到工具调用的工程实践

1. 为什么我要用 Java 重造一个 Agent 框架市面上讲 AI Agent 的文章,十篇里有八篇是 Python 写的,剩下两篇是 TypeScript。Java 程序员想找个能直接读源码、能塞进现有 Spring 项目里的 Agent 框架,翻遍 GitHub 也就那么几个半成品。我在一个…

2026/10/19 0:28:02 阅读更多 →
开源AI编程助手Continue的VsCode插件:把settings.json改到TaoToken

开源AI编程助手Continue的VsCode插件:把settings.json改到TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:28:02 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →