Android 系统烧录与启动
1. 概述
1.1 功能简介
本文档介绍 shimetapi RK3588 开发板(C-3588LQ 核心板 + SHIMETAPI-M5-R2A 底板)的固件烧录方法与启动流程,涵盖固件获取、烧录工具使用、分区说明以及系统启动过程。
烧录流程与工具用法基于 Rockchip Android 14.0 SDK V1.4.0(RK-KF-YF-776)官方指南编写。以下数据取自 2026-10-22 的实机验证:
| 项目 | 实测值 |
|---|---|
| 板卡 | rk3588_smdt_3588a_v31(C-3588LQ V1.0 + SHIMETAPI-M5-R2A V1.0) |
| 固件 | ssi_16_arm64-userdebug 16 BP2A.250605.031.A3 202609 release-keys |
| Android 版本 | 16(API 36,ro.product.first_api_level=36,按 16 首发) |
| 内核 | 6.1.172-android14-11-g5b6e3d242716-ab15726104(GKI,64 位仅系统) |
| 存储 | eMMC 32GB(storagemedia=emmc,约 29.2 GiB 可用容量) |
| 分区方案 | 动态分区 + A/B 双槽位(实测无独立 recovery 分区,见 5.3) |
1.2 应用场景
- Android 系统首次烧录与验证
- 固件升级与恢复
- 系统分区定制与维护
- 开发调试环境搭建
1.3 工作原理
固件烧录流程:
PC 端烧录工具 --USB--> RK3588 Boot ROM --> Loader 模式 --> 分区写入 --> 重启启动
系统启动链:
Boot ROM --> MiniLoader --> U-Boot --> Trust(TEE) --> Boot.img(kernel+dtb+ramdisk) --> Android 系统启动链各环节的版本可以通过内核 cmdline 中的 fwver= 参数确认(adb shell 'cat /proc/cmdline | tr " " "\n" | grep fwver')。实机输出如下:
fwver=ddr-v1.24-a4ba73facc,spl-v1.14,bl31-v1.56,bl32-v1.23,uboot-10/22/2026| 字段 | 含义 | 实测版本 |
|---|---|---|
| ddr | DDR 初始化 | v1.24-a4ba73facc |
| spl | SPL / MiniLoader | v1.14 |
| bl31 | ATF(EL3 固件) | v1.56 |
| bl32 | OP-TEE(安全系统) | v1.23 |
| uboot | U-Boot(构建日期) | 10/22/2026 |
2. 硬件准备
| 设备 | 型号/规格 | 数量 | 说明 |
|---|---|---|---|
| 核心板 | C-3588LQ V1.0 | 1 | RK3588 主芯片,LGA 660pin |
| 底板 | SHIMETAPI-M5-R2A V1.0 | 1 | 提供 USB OTG、显示等接口 |
| USB 数据线 | Type-C | 1 | 用于连接 PC 进行烧录(接底板 USB OTG 口) |
| 电源适配器 | 12V/3A DC | 1 | 通过底板 DC 接口(DCIN)供电 |
| 电脑 | Windows/Linux | 1 | 安装烧录工具 |
3. 软件准备
| 项目 | 说明 |
|---|---|
| 固件包 | RK3588 Android 14 编译输出(rockdev/Image-rk3588_u/)或 update.img 整合包 |
| USB 驱动 | DriverAssitant v5.1.1(Windows 必需) |
| Windows 烧录工具 | RKDevTool v3.28(AndroidTool_Release_v3.28) |
| Linux 烧录工具 | upgrade_tool v2.30(Linux_Upgrade_Tool_v2.30) |
| SD 卡烧录工具 | SDDiskTool v1.74(可选) |
3.1 工具获取路径
各工具在 RK3588 Android 14 SDK 中的路径如下:
| 工具 | SDK 相对路径 |
|---|---|
| USB 驱动(Windows) | RKTools/windows/DriverAssitant_v5.1.1.zip |
| 烧录工具(Windows) | RKTools/windows/AndroidTool/AndroidTool_Release_v3.28.zip |
| 烧录工具(Linux) | RKTools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool_v2.30.zip |
| SD 卡工具(Windows) | RKTools/windows/SDDiskTool_v1.74.zip |
3.2 USB 驱动安装(Windows)
- 解压
DriverAssitant_v5.1.1.zip,运行DriverInstall.exe - 点击"驱动安装"按钮,等待安装完成
- 如之前安装过旧版本,建议先点击"驱动卸载"再重新安装
4. 操作步骤
4.1 固件文件说明
完整编译后,固件文件位于 rockdev/Image-rk3588_u/ 目录。以下是各文件说明:
| 固件 | 说明 |
|---|---|
MiniLoaderAll.bin | 一级引导加载程序(含 DDR 初始化) |
uboot.img | U-Boot 引导程序 |
boot.img | GKI 内核 + DTB + 通用 ramdisk |
init_boot.img | 通用 ramdisk(init),Android 12+ 从 boot.img 拆出,独立分区 |
vendor_boot.img | 厂商 ramdisk + DTB(vendor_boot_a/b 独立分区) |
resource.img | 开机 logo 等资源(实测固件中为独立分区 resource_a/b) |
boot-debug.img | 与 boot.img 差别为具有 root 权限,user 固件可烧写此文件提权调试 |
dtbo.img | Device Tree Overlay,用于多产品兼容 |
misc.img | 包含 recovery-wipe 等开机标识信息 |
parameter.txt | 分区表配置文件 |
recovery.img | Recovery 模式 ramdisk + kernel + dtb |
super.img | 动态分区镜像,包含 odm、product、vendor、system、system_ext |
vbmeta.img | AVB(Android Verified Boot)校验信息 |
update.img | 整合包,包含以上所有 img 文件,可一键烧写 |
GKI(Generic Kernel Image,通用内核镜像)模式下,内核打包在 boot.img 中,vendor 内核模块位于 vendor_dlkm/system_dlkm 动态分区。实测固件(Android 16)的 resource 为独立分区(resource_a/resource_b,存放开机 logo),GKI ramdisk 拆分为 init_boot.img 与 vendor_boot.img,具体以所用固件的 parameter.txt 为准。如果需要单独编译内核并更新 boot.img,使用命令:
./build.sh -AK该命令会在 kernel 目录下将编译生成的 kernel.img 和 resource.img 替换到旧的 boot.img 中。
4.2 进入烧录模式
RK3588 支持以下烧录模式:
Loader 模式(普通烧录模式):
- 开发板断电
- 按住底板上的 RECOVERY 按键(或对应的烧录模式按键)不松开
- 保持按键按下,给开发板上电
- 继续按住约 2 秒后松开按键
- 此时 PC 端应识别到设备(Windows 设备管理器中出现 Rockusb 设备)
Maskrom 模式(底层烧录模式,用于异常恢复):
当 Loader 模式不可用或固件损坏时,可进入 Maskrom 模式:
- 开发板断电
- 短接核心板上的 Maskrom 触点(或按住对应按键)
- 上电后设备进入 Maskrom 模式
- 此模式下可烧录 MiniLoaderAll.bin 等底层固件
4.3 Windows 下使用 RKDevTool 烧录
步骤1:启动工具
打开 RKDevTool(AndroidTool.exe),工具界面将显示是否检测到设备。
步骤2:导入配置(可选)
点击"下载镜像"页面,可使用 config.cfg 配置文件自动填充烧录项。
步骤3:配置烧录项
按以下配置填入各分区的烧录文件路径:
| 分区 | 文件 | 烧录标志 |
|---|---|---|
| loader | MiniLoaderAll.bin | 0x00000000 |
| parameter | parameter.txt | 0x00000000 |
| uboot | uboot.img | 0x00004000 |
| boot | boot.img | 0x00008000 |
| recovery | recovery.img | 0x0000C000 |
| misc | misc.img | 0x00010000 |
| dtbo | dtbo.img | 0x00014000 |
| vbmeta | vbmeta.img | 0x00018000 |
| super | super.img | 0x0001C000 |
注意:上表为单分区(非 A/B)固件示例。实测固件采用 A/B 双槽位(boot、system 等分区各保留两份,升级失败可回退),分区名需按实际 parameter.txt 配置;一键烧录 update.img 时工具会自动处理槽位。
步骤4:执行烧录
- 确认设备已连接并显示在工具列表中
- 点击"执行"按钮开始烧录
- 等待烧录完成(进度条到 100%)
- 工具自动重启设备或提示手动重启
步骤5:烧录 update.img(一键烧录)
- 切换到"升级固件"页面
- 点击"固件"按钮,选择
update.img - 点击"升级"按钮开始烧录
- 等待完成
4.4 Linux 下使用 upgrade_tool 烧录
步骤1:安装工具
# 解压工具
unzip Linux_Upgrade_Tool_v2.30.zip
cd Linux_Upgrade_Tool_v2.30
# 将 upgrade_tool 加入 PATH(或使用绝对路径)
sudo cp upgrade_tool /usr/local/bin/
sudo chmod a+x /usr/local/bin/upgrade_tool步骤2:连接设备并确认
# 查看连接的设备
sudo upgrade_tool LD
# 查看设备信息
sudo upgrade_tool RCI
sudo upgrade_tool RFI步骤3:烧录整个固件包
# 烧录 update.img 整合包
sudo upgrade_tool UF update.img步骤4:烧录单个分区
# 烧录 loader
sudo upgrade_tool UL MiniLoaderAll.bin
# 烧录 boot 分区
sudo upgrade_tool DI -b boot.img
# 烧录 super 分区
sudo upgrade_tool DI -s super.img
# 烧录 uboot 分区
sudo upgrade_tool DI -u uboot.img
# 烧录 recovery 分区
sudo upgrade_tool DI -r recovery.img
# 烧录 misc 分区
sudo upgrade_tool DI -m misc.img
# 烧录 parameter 分区
sudo upgrade_tool DI -p parameter.txt步骤5:烧录完成
烧录完成后,设备会自动重启。
4.5 使用 fastboot/fastbootd 烧录动态分区
RK3588 Android 14 支持动态分区(super.img 包含 odm/product/vendor/system/system_ext),如需单独烧写动态分区内的镜像,需使用 fastbootd 模式(运行在 Android 系统内的 fastboot 服务,比 bootloader 中的 fastboot 多了识别动态分区的能力):
# 重启到 fastbootd 模式
adb reboot fastboot
# 烧写动态分区
fastboot flash vendor vendor.img
fastboot flash system system.img
fastboot flash odm odm.img
fastboot flash product product.img非动态分区(如 boot、dtbo 等)使用传统 fastboot 模式:
# 重启到 bootloader
adb reboot bootloader
# 烧写非动态分区
fastboot flash boot boot.img
fastboot flash dtbo dtbo.img4.6 系统首次启动
烧录完成后,开发板将自动重启。首次启动流程:
- U-Boot 阶段:输出启动日志,加载 Trust 固件,初始化 DDR
- Kernel 阶段:加载 Linux 6.1 内核,初始化硬件驱动
- Android 阶段:启动 init 进程,加载 Android 系统服务
- 系统就绪:显示 Android 桌面(HDMI 输出)
首次启动因需要初始化数据分区,时间可能较长(约 1-3 分钟),后续启动会明显加快。
$ adb shell uname -r
6.1.172-android14-11-g5b6e3d242716-ab15726104
$ adb shell dmesg | head -6
[ 0.000000] Booting Linux on physical CPU 0x000000000000 [0x412fd050]
[ 0.000000] Linux version 6.1.172-android14-11-g5b6e3d242716-ab15726104 (build-user@build-host) (Android (10087095, +pgo, +bolt, +lto, -mlgo, based on r487747c) clang version 17.0.2 (...), LLD 17.0.2) #1 SMP PREEMPT Thu Jun 25 02:09:38 UTC 2026
[ 0.000000] random: crng init done
[ 0.000000] Machine model: rk3588_smdt_3588a_v31
[ 0.000000] earlycon: uart8250 at MMIO32 0x00000000feb50000 (options '')
[ 0.000000] printk: bootconsole [uart8250] enabled输出中 Machine model 一行可确认板卡型号;earlycon ... 0xfeb50000 是 UART2 调试串口的基地址(波特率 1500000)。
5. 代码详解
5.1 编译命令
# 配置编译环境
source build/envsetup.sh
# 选择 lunch 目标
lunch rk3588_u-userdebug # 开发调试版本
# 或
lunch rk3588_u-user # 生产版本
# 一键编译
./build.sh -AUKu| Lunch 目标 | 说明 |
|---|---|
rk3588_u-user | 生产版本,启用 GKI,user 模式 |
rk3588_u-userdebug | 调试版本,启用 GKI,具有 root 权限 |
5.2 单独编译内核(GKI 模式)
# 单独编译 kernel 并打包到 boot.img
./build.sh -AK编译原理:在 kernel 目录下将编译生成的 kernel.img 和 resource.img 替换到旧的 boot.img 中。
5.3 分区表结构(实测)
parameter.txt 文件定义了分区布局。以下为实机分区表(adb root 后执行 ls -l /dev/block/by-name/,大小来自 /proc/partitions,实测固件 ssi_16_arm64 / Android 16):
| 分区名 | 设备节点 | 大小 | 说明 |
|---|---|---|---|
| security | mmcblk0p1 | 4 MiB | 安全信息分区 |
| uboot_a / uboot_b | mmcblk0p2 / p3 | 4 MiB | U-Boot 引导程序(A/B 双槽) |
| trust_a / trust_b | mmcblk0p4 / p5 | 4 MiB | ATF + OP-TEE(A/B 双槽) |
| misc | mmcblk0p6 | 4 MiB | 启动标识 / bootloader 消息 |
| resource_a / resource_b | mmcblk0p7 / p8 | 16 MiB | 开机 logo 等资源(独立分区) |
| vendor_boot_a / vendor_boot_b | mmcblk0p9 / p10 | 40 MiB | 厂商 ramdisk + DTB(A/B 双槽) |
| init_boot_a / init_boot_b | mmcblk0p11 / p12 | 8 MiB | 通用 ramdisk(A/B 双槽) |
| dtbo_a / dtbo_b | mmcblk0p13 / p14 | 4 MiB | Device Tree Overlay(A/B 双槽) |
| vbmeta_a / vbmeta_b | mmcblk0p15 / p16 | 1 MiB | AVB 校验信息(A/B 双槽) |
| boot_a / boot_b | mmcblk0p17 / p18 | 64 MiB | GKI 内核 + DTB(A/B 双槽) |
| backup | mmcblk0p19 | 384 MiB | Rockchip 备份分区 |
| cache | mmcblk0p20 | 64 MiB | 缓存分区 |
| metadata | mmcblk0p21 | 64 MiB | 元数据分区(挂载于 /metadata) |
| frp | mmcblk0p22 | 512 KiB | Factory Reset Protection |
| baseparameter | mmcblk0p23 | 1 MiB | Rockchip 基础参数(含显示器参数) |
| super | mmcblk0p24 | 5.47 GiB | 动态分区(内容见下) |
| userdata | mmcblk0p25 | 22.6 GiB | 用户数据分区 |
6. 常见问题
6.1 烧录时设备无法识别
现象: PC 无法识别开发板,RKDevTool 显示"没有发现设备"。
原因:
- USB 驱动未安装或版本过旧
- 未正确进入 Loader 模式
- USB 线缆接触不良
解决方案:
- 确认已安装 DriverAssitant v5.1.1
- 确认按住 RECOVERY 按键后上电
- 尝试更换 USB 线缆和 USB 接口
- 在 Windows 设备管理器中查看是否有 Rockusb 设备(带感叹号则需要重新安装驱动)
6.2 烧录过程中断
现象: 烧录到一半进度条卡住或提示失败。
原因:
- USB 连接不稳定
- 电源供电不足
- 固件文件损坏
解决方案:
- 检查 USB 线缆连接,避免使用 USB 延长线
- 确认使用 12V/3A 电源适配器供电
- 重新下载或解压固件包,校验文件完整性
- 重新进入 Loader 模式后再次尝试烧录
6.3 烧录后系统无法启动
现象: 开发板通电后串口无输出或反复重启。
原因:
- 烧录的固件不匹配(如 Android 12 固件混入 Android 14 分区)
- 分区表错误
- 未正确烧录 loader 或 uboot
解决方案:
- 进入 Maskrom 模式,重新烧录完整固件包(update.img)
- 确认烧录了 MiniLoaderAll.bin 和 uboot.img
- 使用 upgrade_tool 的 EF 命令擦除 Flash 后重新烧录
- A/B 固件单独烧写 boot.img 时,需写入当前激活槽位(
getprop ro.boot.slot_suffix实测为_a)
6.4 GKI 模式下 boot.img 烧录失败
现象: 单独烧写 boot.img 后系统卡在开机 logo 或不断重启。
原因: Android 14 GKI 模式下 vendor_boot 和 boot.img 需要匹配,单独更新 boot.img 可能导致 .ko 内核模块版本不兼容。
解决方案: 烧录完整固件包或在烧录 boot.img 时同时更新 vendor_boot.img。
7. 相关文档
| 文档 | 说明 |
|---|---|
| ch02-android-basic-operations.md | Android 系统基础操作 |
| ch03-adb-debugging-and-logs.md | ADB 调试方法 |
| quick-start-guide/ch01-system-flashing-guide.md | 系统烧录指南(通用) |
| hardware-reference/ch01-core-board-specifications.md | 核心板参数 |
