news 2026/4/18 5:22:01

RK3588 分区表详解:每一块分区到底装了什么、负责什么

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RK3588 分区表详解:每一块分区到底装了什么、负责什么

📺B站:博主个人介绍

📘博主书籍-京东购买链接*:Yocto项目实战教程

📘加博主微信,进技术交流群jerrydev


RK3588 分区表详解:每一块分区到底装了什么、负责什么

目标:把你给出的分区表“讲透”。你看完这篇之后,应该能回答三类问题:

  1. 每个分区里放的是什么(文件/镜像/数据结构)。

  2. 系统启动时它什么时候被用到

  3. 开发/量产/OTA 时该怎么刷、怎么留、坏了会怎样

场景默认:RK3588 + Linux(Buildroot/Yocto 都适用),分区采用 GPT,常见 Rockchip SDK 打包/烧录流程。


0. 先把分区表摆出来(你当前设备)

你在设备上看到的 GPT 分区如下:

  • 1 uboot 4MB
  • 2 misc 4MB
  • 3 boot 64MB
  • 4 recovery 128MB
  • 5 backup 32MB
  • 6 rootfs 14.0GB
  • 7 oem 128MB
  • 8 userdata 14.7GB (grow)

以及你前面讨论的(可选)

  • security 常见 4MB(在parameter.txt里额外加出来)

说明:实际项目里还可能出现loader1/loader2trustresourcedtbovbmeta等分区。你这套布局属于“偏 Linux 发行版风格(rootfs 很大)”的方案。


1. 总览表(你要求的那张表,保持原样输出)

分区大小常见刷写文件(示例)主要包含内容核心功能(你关心的“它干啥的”)
uboot4MBuboot.imgU-Boot 启动链相关组件;RK3588 常见还会把TEE binary(BL32/OP-TEE)一起打包进去上电后最关键的启动阶段:初始化硬件、加载内核/启动参数;并承载 Secure Monitor/TEE 相关入口(因此你看到很多 TEE/TA 话题最终都会“落到 uboot.img”)
misc4MBmisc.img少量“控制信息/标志位”数据(例如:下次启动是否进 recovery、升级/重试标志、reboot reason 等,具体由 BSP 实现)给 bootloader/系统传递“启动模式/升级模式/恢复模式”的控制开关;很多系统不大,但很关键
boot64MBboot.imgLinux Kernel(Image/zImage)、dtb(可能)、initramfs(可能)或 FIT 镜像正常启动用的内核镜像分区:系统从这里把内核拉起来,然后再挂载 rootfs
recovery128MBrecovery.imgRecovery 内核 + ramdisk / 救援系统(实现方式依 BSP)用于“救援/升级/恢复出厂/刷机”路径;即使你不是 Android,也常用它做离线升级或维护模式
backup32MBbackup.img(有的工程为空/不刷)备份/回滚相关数据(依 BSP);有的 SDK 用来做升级过程的“临时备份区”给固件升级、回滚、异常恢复留后手;如果你的升级方案不用它,可能长期闲置
rootfs14.0GBrootfs.img/rootfs.ext4/*.wic(拆出来的 rootfs)你的 Linux 根文件系统(Buildroot/Yocto 生成的所有 /bin /lib /etc /usr…)这就是“系统本体”:用户态、服务、应用都在这里
oem128MBoem.imgOEM/厂商自定义内容:配置、资源、证书、预置应用、覆盖文件等把“厂商定制”从 rootfs 拆出来,便于升级/恢复时分开处理(也常被挂载到/oem之类路径)
userdata14.7GB(grow)userdata.img(也可不刷,现场格式化)可写数据分区:日志、应用数据、缓存、用户文件等系统运行后的持久化数据区;“grow”表示可随剩余空间扩展
(可选)security常见 4MB通常不刷具体镜像(它是数据区)OP-TEE安全存储的数据落盘区:TA 持久化对象、密钥材料等加密后的 blob给 TA/TEE 放“敏感持久化数据”的地方;在parameter.txt里加0x00002000@0x000xxxxx(security)就是为了让系统出现这个分区

2. 从“启动链”角度理解:谁先被用、谁后被用?

很多人看分区表会陷入“每个分区里到底是什么文件格式”的细节里。更高效的理解方式是:把它们按启动链/维护链分组

2.1 启动链分组

  • 第一阶段(上电最早)uboot
  • 第二阶段(内核启动)boot(主路径)
  • 第三阶段(系统运行)rootfs+oem+userdata
  • 维护/救援路径recovery(以及misc触发进入)
  • 升级/回滚辅助backup(可选),misc(常用)
  • 安全数据落盘security(可选,OP-TEE Secure Storage 后端)

你会发现:

  • 只要ubootboot坏了,系统通常直接起不来
  • rootfs坏了,内核还能起,但会卡在挂载 rootfs 或 init 失败。
  • userdata坏了,多数情况下系统还能起,但应用数据丢失。
  • misc坏了,经常体现为:进不了 recovery、升级状态乱、重启原因读取异常。

2.2 典型启动过程(文字版时序)

  1. ROM / loader(芯片内部)把执行权交给存储介质上的 bootloader

  2. 进入 uboot 分区:U-Boot 完成 DDR、时钟、存储、外设基础初始化

  3. U-Boot 读取启动策略:

    • 读取misc看“是否进入 recovery/升级/特殊模式”
    • 默认走正常启动,加载boot中的 kernel / dtb / initrd(如果有)
  4. 内核启动,解析 cmdline

  5. 内核挂载rootfs(ext4/其他)

  6. systemd/init 启动用户态服务

  7. 用户态服务按需求挂载oemuserdata,启动应用

你可以把misc理解成“启动路径的开关”,把backup/recovery理解成“救援/升级的备用路”,把security理解成“TEE 的小型保险箱落盘区”。


3. uboot 分区:为什么 4MB 却最关键?

3.1 uboot 分区里通常有什么

uboot.img并不是只有一个单纯的u-boot.bin
在 Rockchip 的常见打包里,它是启动链组件的集合,可能包含:

  • SPL / TPL(如果使用)
  • U-Boot 正体(可带 dtb)
  • ATF/BL31(EL3)
  • TEE/BL32(OP-TEE OS)——在 RK3588 上常见会被一起打包进uboot.img

你之前问过“trust.img 在哪”。对 RK3588 这种平台,工程里经常看不到单独trust.img,因为 TEE/ATF 被整合到了uboot.img

3.2 uboot 的核心职责

  1. 把硬件带起来:DDR、时钟、电源、存储控制器
  2. 选择启动路径:正常启动 / recovery / 升级 / 其它模式
  3. 装载并启动内核:读取boot分区内容
  4. 安全相关入口(如果启用):Secure Boot、TrustZone、OP-TEE 的启动对接

3.3 uboot 坏了会怎样

  • 最常见:直接无法启动,停在 ROM/Maskrom,或无法加载下一阶段
  • 安全链打开后:任何签名/校验不通过也可能导致停机或进入 recovery/升级模式

3.4 开发与量产建议

  • 开发阶段:uboot 频繁调试,建议保留可靠的刷机入口(maskrom / recovery)
  • 量产阶段:uboot 属于“不可随意更换”的关键件,通常需要配合签名校验

4. misc 分区:4MB 的“启动开关 + 状态机”

4.1 misc 里是什么

misc一般不放 Linux 文件系统,而是放一些结构化数据(BSP 定义):

  • 下次启动是否进入 recovery
  • 升级/重试/回滚状态
  • reboot reason(重启原因)
  • 可能还有 OTA 状态、slot 信息(如果做 A/B)

它不是“装载某个大程序”,而是“写入几个字段”。所以 4MB 够用。

4.2 为什么不是 Android 也会需要 misc

因为“启动路径开关”这个需求并不只属于 Android:

  • 你做离线升级(USB/SD 卡升级)也需要一个标志告诉 bootloader:下次进维护系统
  • 你做 OTA 失败回滚,也需要一个状态告诉系统:这次启动属于回滚态

4.3 misc 出问题的表现

  • 明明想进 recovery 却进不去
  • 系统反复进 recovery(标志位没清掉)
  • 升级状态机混乱:反复重试/回滚

5. boot 分区:内核从这里出发

5.1 boot.img 常见包含

不同项目打包不同,但本质上都围绕:

  • Linux kernel(Image / zImage)
  • dtb(可能内置,也可能单独)
  • initramfs/initrd(可选)
  • 或者 FIT 镜像把以上打成一个可校验的整体

5.2 boot 的职责

  • 给 U-Boot 提供“可启动的内核镜像”
  • 决定内核版本、基础驱动能力(尤其是存储、显示、网络等)

5.3 boot 坏了

  • U-Boot 能跑,但会提示找不到内核或校验失败
  • 即使进入内核,dtb 不匹配也会导致外设不可用、挂载失败

5.4 为什么 boot 64MB 看起来很大

  • Kernel Image 本身可能 20~40MB
  • initramfs 若包含升级工具/cryptsetup/网络工具,也会变大
  • 留余量便于不同构建选项

6. recovery 分区:救援系统,不是“只给 Android 用”

6.1 recovery 里放什么

  • 一套“可启动的内核 + ramdisk(最小根文件系统)”

  • 里面通常包含:

    • 分区刷写工具
    • 升级脚本
    • 基础网络/USB/存储支持
    • 日志采集工具

6.2 recovery 的三种常见用途

  1. 离线升级:把 update 包放 U 盘/SD 卡,进入 recovery 执行刷写
  2. 救援维护:系统起不来时仍可进入 recovery 导出日志、修复文件系统
  3. 量产刷机入口:生产线可用 recovery 做统一刷写流程

6.3 recovery 与 misc 的关系

  • misc负责设置“下次进 recovery”
  • U-Boot 读取misc决定是否跳转到recovery分区启动

7. backup 分区:升级/回滚的“备用仓”

7.1 backup 的定位

backup在不同 BSP 里差异很大:

  • 有的工程用来做“升级前备份关键数据”
  • 有的工程用来做“回滚点”
  • 有的工程直接不用(空着或不刷)

7.2 什么时候你会真正需要 backup

  • 你做 OTA,且希望失败后自动恢复关键分区
  • 你做“升级原子性”(先写 backup,再切换)

7.3 不用 backup 会怎样

  • 不影响系统正常运行
  • 但升级策略需要靠其它机制保障(例如 A/B、分区校验、外部介质恢复等)

8. rootfs 分区:Linux 系统本体(14GB)

8.1 rootfs 里是什么

这就是你登录后看到的世界:

  • /sbin/init或 systemd
  • /bin,/usr/bin:工具链、命令
  • /lib,/usr/lib:动态库、驱动相关用户态库
  • /etc:配置文件
  • /var:日志、状态(有时会被单独挂载到 userdata)

对 Buildroot/Yocto 来说:rootfs 基本就是你构建产物的落地点。

8.2 rootfs 的核心功能

  • 提供用户态、服务、应用
  • 决定软件生态(weston/sato/你的业务 app)

8.3 rootfs 损坏的典型症状

  • 内核启动成功,但卡在挂载 rootfs 或 init
  • 文件系统损坏(ext4 error)导致只读或无法 mount

8.4 rootfs 与升级策略

  • 最简单:整分区刷写 rootfs
  • 更灵活:用包管理(opkg/rpm/deb)或增量更新
  • 更可靠:A/B 双 rootfs(你现在这套表不是 A/B,但可扩展)

9. oem 分区:把“厂商定制”从系统本体拆出来

9.1 oem 里通常放什么

  • 预置配置(网络、默认参数、出厂设置)
  • 资源文件(logo、字体、音频、模型等也有人放这里)
  • 证书/授权文件(注意:真正敏感的密钥不建议明文放这里)
  • 应用 overlay(覆盖 rootfs 中某些文件)

9.2 oem 的价值

  • rootfs 可作为“通用基础系统”稳定迭代
  • oem 作为“定制层”更换频率低、也更便于客户差异化
  • 升级时可选择只升级 rootfs,而保留 oem

9.3 oem 的挂载方式

常见:开机时挂载到/oem或作为 overlay 的下层


10. userdata 分区:业务数据与可写空间(grow)

10.1 userdata 放什么

  • 应用数据(数据库、缓存、配置写入)
  • 用户文件(下载、录制、图片、日志)
  • 有些系统也会把/var/home放这里

10.2 grow 的意义

userdata:grow表示:分区会随剩余空间扩展。

好处:

  • 同一套镜像刷到不同容量 eMMC 上,都能把剩余空间利用起来
  • 量产方便

10.3 userdata 的典型策略

  • 生产/首次开机:格式化 + 初始化目录结构
  • OTA:尽量不动 userdata(保护用户数据)

11. security 分区:它不是镜像仓,是“TEE 安全存储的数据区”

11.1 最直接的回答:security 分区存什么?

它存的是:OP-TEE Secure Storage 的对象数据(加密后的 blob + 元数据)

换句话说:

  • 你不会刷一个security.img把“程序”装进去
  • 它更像一个“小型加密数据库分区”,由 TEE/TA 在运行中写入

典型存放内容:

  • TA 的持久化对象(密钥材料、计数器、授权 token)
  • 某些方案会把 TA 本体加密后“安装”到安全存储里(这样 TA 不再以明文留在 Linux 文件系统)

11.2 security 与 RPMB 的关系

OP-TEE 的安全存储后端通常有多种选择:

  • RPMB:更强的防篡改能力,属于 eMMC 硬件特性
  • security 分区:更通用,清理更方便(刷分区即可)
  • Linux 文件系统:最弱,适合开发阶段

所以 security 分区属于“比普通文件系统强、比 RPMB 轻量/便利”的一种折中。

11.3 security 与 OTP/eFuse 的关系(你之前问过)

  • security 分区存的是数据(密文对象)
  • OTP/eFuse 更像根密钥来源(用于派生保护这些对象的密钥)

你可以理解为:

  • OTP/eFuse:保险箱的“主钥匙材料”(硬件绑定)
  • security:保险箱里的“抽屉”(放东西的地方)

11.4 security 分区坏了会怎样

取决于你用它存什么:

  • 如果只存授权 token:可能表现为授权丢失、需要重新激活
  • 如果存磁盘解密材料:可能导致系统无法解密启动(严重)
  • 如果存 TA 安装包:可能导致 TA 无法运行

所以:量产方案里必须定义“重置策略”:

  • 如何清空安全存储
  • 如何重新 provisioning

12. 实战:每个分区该怎么刷?(开发 / 量产 / OTA 三种视角)

12.1 开发阶段(迭代快)

  • 常刷:bootrootfs
  • 偶尔刷:uboot(谨慎)、oem
  • 基本不刷:userdata(除非你要清空测试数据)
  • security:开发阶段可以不建;要做 TEE demo 再建

建议:

  • 保留可靠刷机入口(Maskrom / recovery)
  • 不要频繁改分区布局,避免升级兼容性问题

12.2 量产阶段(稳定 + 可控)

  • ubootbootrootfs固化版本
  • oem用于不同客户差异化
  • userdata首次开机初始化
  • security用于 provisioning(写入设备绑定的授权/密钥)

12.3 OTA 阶段(可恢复 + 少破坏)

  • 最理想:只更新rootfsboot+rootfs
  • 尽量不动userdata
  • misc用于控制 OTA 状态机(升级中/回滚/恢复)
  • backup若参与回滚,要明确策略

13. 一个“记忆用”的小结:一句话记住每块分区

  • uboot:启动链的“总指挥”,最早、最关键。
  • misc:启动模式/升级状态的“开关与记忆”。
  • boot:内核从这里起跑。
  • recovery:救援/离线升级的备用系统。
  • backup:升级回滚的后手(可能不用)。
  • rootfs:Linux 系统本体。
  • oem:厂商定制层。
  • userdata:可写业务数据区。
  • security:TEE 安全存储的落盘数据区(不是镜像仓)。

14. 关键问答(帮助你把概念钉死)

Q1:trust.img是不是放在boot.img里?

不是。对 RK3588 常见做法是:TEE/ATF 等被打包进uboot.img

Q2:security分区是不是放trust.img

不是。security用于存放 OP-TEE Secure Storage 对象(加密数据)。

Q3:不是 Android 也需要misc/recovery吗?

很多项目仍然需要。它们解决的是“维护/升级/救援”的通用需求。

Q4:userdata:grow的真实作用是什么?

同一套镜像适配不同容量存储介质,把剩余空间自动给 userdata 使用。

—2

15. 你下一步做“模型保护 demo”时,分区层面怎么选?(给你一个落地建议)

如果你要做“模型加密/签名 demo”,推荐这样放置:

  • 模型密文:放oemrootfs(随镜像出厂的模型),或者userdata(动态下载/更新的模型)
  • 模型密钥/授权 token:放security(或 RPMB)

这样你能清晰演示:

  • 模型文件拷走没用(只有密文)
  • 没有设备绑定密钥无法解密

结尾提示:你如果把parameter.txt的完整布局(含你准备加的 security offset)贴出来,我可以把它改成一份“不会重叠、对齐合理、便于 OTA”的版本,并给出对齐/起始地址计算方法(按 sector 对齐)。


📺B站:博主个人介绍

📘博主书籍-京东购买链接*:Yocto项目实战教程

📘加博主微信,进技术交流群jerrydev


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

完整演示 Git Flow 所有分支的创建与流转过程的 实操命令示例

✅ 假设项目刚初始化,只有 main 分支 ✅ 所有操作基于命令行 ✅ 模拟一个完整周期:开发 → 发布 → 热修复🚀 第 0 步:初始化项目(仅有 main) # 创建项目目录 mkdir my-project && cd my-project# …

作者头像 李华
网站建设 2026/4/10 20:25:35

适老化移动应用界面易用性测试体系构建与实施策略

一、适老化测试的时代背景与核心挑战 人口结构变革的紧迫需求 我国60岁以上人口占比已达18.7%(2.64亿),老年群体数字需求激增与界面使用障碍的矛盾日益凸显。测试人员需直面三大核心挑战:视觉感知衰退导致的界面元素识别困难&…

作者头像 李华
网站建设 2026/4/16 13:56:28

期刊让我投“预印本”,我投还是不投?投它有啥用?

在学术研究的道路上,科研工作者们常常会面临各种选择,其中之一就是当收到期刊让投“预印本”的邀请时,该何去何从。预印本近年来在学术领域逐渐崭露头角,但其对于许多研究者来说,仍然笼罩着一层神秘面纱。那么&#xf…

作者头像 李华
网站建设 2026/4/16 19:49:54

被椰树独宠了十几年的长公主徐冬冬大婚!60亿票房作品成亮眼陪嫁

在这个万物皆可营销的时代,一场婚礼能玩出多少花样?想知道答案就来看看徐冬冬和尹子维的“椰树牌”婚礼。当印有“新婚幸福,早生龙凤”的椰汁罐铺满货架,当“椰历38年,椰树公主大婚”的梗刷屏全网,人们才惊…

作者头像 李华
网站建设 2026/3/13 16:43:50

打破传输瓶颈:替代国外FTP的工具有哪些新选择

信创战略深化落地,数据安全合规要求愈发严苛,国外 FTP 工具的安全漏洞、信创适配缺失等短板愈发凸显,已难以匹配企业数字化转型的传输需求。越来越多企业开始探寻国产化替代方案,替代国外 FTP 的工具有哪些?成为政企搭…

作者头像 李华