很好的问题 👍。你在 RK3588S 平台上执行 ./build.sh firmware
之后会生成一堆 .img
文件,这些就是最终烧录到 eMMC/NAND/SD 的固件组成部分。下面我逐个帮你详细解读一下:
📂 生成的固件文件说明
1. boot.img
-
内容:
- Linux 内核 (
Image
/zImage
) - ramdisk (initrd/initramfs,包含 init 脚本、驱动加载、挂载根文件系统所需的基础工具)
- 内核启动参数(由
cmdline
或parameter.txt
提供)
- Linux 内核 (
-
作用:设备上电后,uboot 会加载
boot.img
→ 内核启动 → 挂载 rootfs。
2. oem.img
-
内容:
- 厂商自定义分区,通常包含定制的应用、配置文件、驱动固件、第三方库等。
- 在 Android 系统里常见
oem
分区,在 Linux SDK 里也可能用于放客户定制功能。
-
作用:给厂商/客户留的可扩展分区,不影响系统更新。
3. parameter.txt
-
内容:
-
固件分区表描述文件(类似
parted
或fdisk
的分区信息)。 -
描述了每个分区的 偏移、大小、名字、属性。
-
例如你之前贴的:
mtdparts=:0x00004000@0x00004000(uboot),0x00040000@0x00008000(boot:bootable),-@0x00048000(rootfs:grow)
就是分区布局说明。
-
-
作用:烧录工具、bootloader 根据它来解析镜像写入位置。
4. rootfs.img
-
内容:
- 根文件系统 (Root File System),通常是一个 ext4/squashfs 镜像。
- 里面有
/bin
/etc
/lib
/usr
等 Linux 用户空间内容。
-
作用:Linux 内核启动后会挂载
rootfs.img
作为/
,提供完整系统环境。
5. update.img
-
内容:
- Rockchip 升级包,是一个 封装镜像(所有分区打包在一起)。
- 内部包含:
boot.img
、rootfs.img
、parameter.txt
、uboot.img
、MiniLoaderAll.bin
、recovery.img
等。
-
作用:用于 整体升级,通过 Rockchip 工具 (
upgrade_tool
/rkdeveloptool
) 一次性烧写。
6. userdata.img
-
内容:
- 用户数据分区,通常是一个空的 ext4 镜像。
- 运行时挂载为
/userdata
或/data
。
-
作用:用户配置、应用安装、临时数据存放区,不影响系统区。
7. MiniLoaderAll.bin
-
内容:
- Rockchip 的第一阶段 Bootloader (闭源的 BL1 + DDR 初始化代码)。
- 包含 SoC 启动所需的 DDR 初始化、时钟配置、基本外设初始化。
-
作用:上电后,BootROM 先加载它 → 初始化内存 → 再加载 uboot。
8. package-file
-
内容:
- Rockchip 打包脚本生成的 文件清单。
- 列出了
update.img
内部包含哪些文件和对应分区。
-
作用:打包工具和升级工具依据它来解析、写入。
9. recovery.img
-
内容:
- 一个小型的 Linux 系统(kernel + rootfs),类似 boot.img,但 rootfs 是专门用于升级/恢复的。
- 包含升级程序、烧录脚本等。
-
作用:进入恢复模式时加载,用来刷机/升级/修复系统。
10. uboot.img
-
内容:
- 第二阶段 Bootloader(U-Boot)。
- 包含设备树 (dtb)、环境变量支持。
-
作用:MiniLoader 初始化内存后加载它,它负责加载内核、传递参数、支持 fastboot 等功能。
11. update.raw.img
-
内容:
- 类似
update.img
,但属于 裸分区镜像,内部没有再封装。 - 可能是 PC 工具 (
rkdeveloptool
) 直接写盘用的格式。
- 类似
-
作用:另一种升级方式,有时比
update.img
更直接。
🔑 总结分层关系(启动链路)
BootROM (SoC 内部ROM)
↓
MiniLoaderAll.bin (初始化DDR/PMU)
↓
uboot.img (引导器, 读参数, 加载内核)
↓
boot.img (内核 + ramdisk)
↓
rootfs.img (Linux 根文件系统)
↓
userdata.img (用户数据, 可变)
而 update.img / update.raw.img
是 打包好的整体升级镜像,parameter.txt
/ package-file
则是 描述文件。
要不要我帮你画一个 RK3588 固件组成 + 启动流程图?这样比一堆文字更直观。
在 RK3588(S) 的编译/打包系统里,设备树 DTB 文件的位置和生成路径要分两个阶段来看:
1. 内核设备树(kernel DTB)
-
源文件:
在 kernel 源码里,存放路径一般是:kernel/arch/arm64/boot/dts/rockchip/
里面会有很多 RK3588 系列的 DTS 文件,例如:
rk3588s.dtsi rk3588s-evb1-v10.dts rk3588s-myboard.dts
其中
.dtsi
是片上通用的描述文件,.dts
是具体板子的设备树。 -
编译后生成的 dtb 文件:
kernel/arch/arm64/boot/dts/rockchip/*.dtb
常见的名字:
rk3588s-evb1-v10.dtb rk3588s-myboard.dtb
-
最终打包时,这些
dtb
会被打包进 boot.img 或者直接放在resource.img
(不同 SDK 可能不同)。
2. U-Boot 设备树(uboot DTB)
-
源文件:
u-boot/arch/arm/dts/
里面同样有一堆 rk3588s 的 dts,例如:
rk3588s-u-boot.dtsi rk3588s-evb.dts
-
编译后生成:
u-boot/arch/arm/dts/*.dtb
这些 dtb 文件被打包到 uboot.img 里,供 U-Boot 自己使用。
3. 最终打包位置
执行 ./build.sh firmware
后:
-
内核 dtb 最终一般会被打到:
rockdev/Image/boot.img (内核+dtb+ramdisk)
或者单独放在:
rockdev/Image/resource.img
(具体要看 buildroot/debian 配置)
-
U-Boot dtb 在:
rockdev/Image/uboot.img
🔑 总结
- 内核 dtb:
kernel/arch/arm64/boot/dts/rockchip/*.dtb
,进 boot.img / resource.img - U-Boot dtb:
u-boot/arch/arm/dts/*.dtb
,进 uboot.img - 打包后位置:
rockdev/Image/
目录下的 img 里
要不要我帮你画一个 RK3588 打包文件和 DTB 的关系图(像一张总览结构图),这样你一眼就能看懂每个 dtb 归属和去向?
在 RK3588(S) 的固件镜像体系里,设备树 DTB 文件(xxx.dtb)主要存放在 boot.img
和 recovery.img
里。具体如下:
🔹 1. boot.img
-
组成内容(Android/Linux 通用的 boot.img 格式):
- kernel(内核
Image
或zImage
) - ramdisk(初始根文件系统
initramfs
,Android 下通常包含init
、fstab
等) - dtb/dtbo(设备树 blob,RK 平台通常会直接打包到 boot.img 中,或者通过
dtb.img
/dtbo.img
附加)
- kernel(内核
-
在 Rockchip 的 Buildroot / Debian 系统里:
boot.img
里通常就是 内核 + dtb,直接由mkbootimg
或boot_merger
工具打包。
🔹 2. recovery.img
-
组成内容:
- 和
boot.img
类似,也包含 kernel + ramdisk + dtb。 - 主要用于恢复模式(系统升级、刷机时进入 recovery)。
- 和
🔹 3. 独立 dtb.img / resource.img(可选)
- 在部分 Android 固件中,Rockchip 会把多个 DTB 打包成一个
dtb.img
或者resource.img
,再由 bootloader 按硬件型号选择加载。 - 在 Linux Buildroot 固件中,通常没有单独的 dtb.img,而是直接放在 boot.img 里。
📌 总结
在你说的 RK3588S 固件打包 (./build.sh firmware
) 产物里:
- 主要的 DTB 文件在
boot.img
里(kernel + dtb) recovery.img
里也会有 dtb(和 boot 分区用法类似,用于 recovery 模式)- parameter.txt 里不会存 dtb,只是分区表
- update.img / update.raw.img 是整体打包镜像,会包含 boot.img 里的 dtb
要验证的话,你可以直接解开 boot.img,看里面的 dtb:
# 解包 boot.img
rkdeveloptool di -p boot.img boot_unpack_dir
# 或者
unpackbootimg -i boot.img -o boot_unpack_dir
解包后会看到:
- kernel (Image)
- ramdisk (cpio.gz)
- dtb (rk3588-xxx.dtb)
要不要我帮你写一段 脚本,能从 RK3588S 的 boot.img
里自动提取出 dtb
文件?
这个问题问得非常好 👍,我给你详细拆解一下 RK3588S 平台里的 recovery.img
存在的原因和作用。
1. 为什么有 recovery.img
在 Android/Linux 嵌入式设备 里,系统通常会准备一个 恢复模式(Recovery Mode),用来在设备无法正常启动时,依然可以进入一个“急救系统”,进行刷机、升级或修复。
所以打包时会单独生成一个 recovery.img
镜像。
2. recovery.img
里面是什么
它本质上是一个小型 Linux 系统镜像,通常包含:
- 内核 (kernel)
一份独立于正常系统的内核,用来启动 recovery。 - 设备树 (dtb)
供 recovery 内核使用,保证能驱动存储、USB、显示、按键等基本外设。 - initramfs / ramdisk
一个精简的根文件系统,内置recovery
程序,用于执行升级、擦除分区、格式化、拷贝镜像等操作。
和 boot.img
类似,但 启动目标不同:
boot.img
→ 正常启动进入 Android/Linux 主系统recovery.img
→ 启动到恢复模式
3. 什么时候会用到 recovery.img
- 用户手动进入 recovery 模式
通过按键组合(比如电源 + 音量键)进入。 - 系统升级/恢复
如果主系统损坏或 OTA 升级失败,会 fallback 到 recovery 来完成升级。 - PC 工具刷机
update.img
在刷机时,可能会先解压出recovery.img
并用它来执行升级脚本。
4. RK3588S 的特殊点
Rockchip 的 upgrade_tool / rkdeveloptool 通常会用 recovery.img
来:
- 加载基本驱动(USB、eMMC/NAND、屏幕)
- 识别和烧写新的
boot.img / rootfs.img / system.img / userdata.img
等 - 提供 recovery 模式下的升级逻辑
所以 recovery.img
是 Rockchip 升级机制的关键镜像之一,不是可选的。
✅ 总结:
recovery.img
就是一个“备用小系统”,主要用于 升级 / 修复 / 应急启动。它包含内核+设备树+ramdisk,和 boot.img
类似但功能不同。烧录和量产时必备。
要不要我帮你画一个 RK3588 启动分区流程图,把 boot.img
、recovery.img
、update.img
之间的关系直观展示出来?
很好问题 👍
你提到的 update.img
是 Rockchip 平台特有的一种整体固件打包格式,主要用于量产烧录工具(如 RKDevTool、upgrade_tool、rkflash)进行整机刷机。
它不是单一分区镜像,而是一个大集合包,里面包含了设备运行所需的各种分区镜像和元信息。
🔎 update.img
里一般包含的内容:
-
Loader(MiniLoaderAll.bin / idbloader.img)
- 负责最底层的初始化,运行在 SRAM/DDR 上,用来加载 u-boot。
- 一般包含 DDR 初始化、PMIC 初始化、存储控制器初始化。
-
U-Boot / Trust.img
- Bootloader(u-boot.img),负责启动 Linux。
- Trust OS(二进制小系统,管理安全世界,比如 TEE)。
-
Parameter.txt
- 存储分区表(GPT/MBR)信息。
- 定义哪些分区、每个分区的大小、标志位。
- 烧录工具会根据它来写分区。
-
Boot.img
- 内核 (
zImage
/Image
) - 设备树 (
dtb
) - ramdisk(init 脚本、驱动加载脚本等)。
- 内核 (
-
Recovery.img
- 一个独立的小系统(Linux 内核 + recovery ramdisk)。
- 用于 OTA 升级、恢复出厂设置、清除数据。
-
Rootfs.img / System.img
- 根文件系统(rootfs 或 system 分区)。
- 包含完整的 Linux 运行环境、库、驱动、应用程序。
-
OEM.img / Vendor.img(可选)
- 设备厂商自定义的分区,放置配置文件、应用、驱动等。
- 类似于 Android 的 vendor 分区。
-
Userdata.img
- 用户数据分区(通常是 ext4 格式,出厂时可能是空的)。
-
Package-file
- 一个清单文件,列出了 update.img 中包含哪些子镜像,烧录工具按这个来解析。
📦 update.img 的作用
- 一体化固件包 → 把所有必要的分区镜像打包在一起,方便一次性升级/刷机。
- 供 Rockchip 工具识别 → RKDevTool、upgrade_tool 会先解包再烧录到 eMMC/NAND。
- OTA 升级基础 → 有些系统 OTA 升级时也会基于 update.img。
👉 所以,简单理解:
update.img
= { boot.img + recovery.img + rootfs.img + oem.img + userdata.img + parameter.txt + loader + trust + package-file } 的集合体。
要不要我帮你画一个 update.img 的分层结构图(像树状图一样),这样你一眼就能看懂每个部分的层级关系?