找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4590

积分

0

好友

609

主题
发表于 3 天前 | 查看: 43| 回复: 0

在嵌入式开发中,经常遇到需要定制固件的场景:更新 RT-Thread 应用程序、替换 Linux 内核或设备树、修改根文件系统配置等。这些需求都离不开对 Rockchip update.img 整包固件的解包与重打包操作。

本文以睿擎派 RC3562 为例,详细介绍整包固件从解包、修改分区内容、重新打包到烧录验证的完整操作流程。如果你正在寻找相关问题的答案,这篇文章将为你提供清晰的路径。

一、准备工作

1.1 所需工具

睿擎派整包固件制作依赖 Rockchip 官方工具链,主要包括:

固件制作所需工具说明表

1.2 获取原始固件

从睿擎官方渠道下载最新的量产固件包,以 AMP 双系统固件为例:

Ruiching_RC-Pi-3562_Firmware_EMMC_AMP_FACRTORY_V1.1.0.img.7z

使用 7-Zip 解压后得到原始固件文件 Ruiching_RC-Pi-3562_Firmware_EMMC_AMP_FACRTORY_V1.1.0.img,即需要处理的 update.img 原始镜像。

1.3 了解 update.img 结构

Rockchip 平台的整包固件采用双层结构,理解这个结构是后续操作的基础:

update.img
├── boot.bin              第一层 Loader(芯片级初始化)
└── firmware.img           第二层固件包
    └── Android/           (Rockchip 历史目录命名)
        ├── package-file   分区配置表(定义各分区的打包顺序和名称)
        ├── loader.img     MiniLoader 镜像
        ├── dtb.img        设备树二进制文件
        ├── boot.img       Linux 内核 + 设备树打包镜像
        ├── rootfs.img     Linux 根文件系统镜像
        ├── app.dtb        睿擎 RT-Thread 应用固件
        └── ...其他分区

解包后,Android/ 目录下的每个 .img 文件对应闪存上的一个独立分区,可单独替换修改。

二、解包固件

解包操作依赖于 RKDevTool 的高级功能。运行 RKDevTool,切换到“高级功能”选项卡,选择对应的固件文件,点击“解包”按钮。

RKDevTool高级功能解包界面

解包完成后,在 Output/ 目录下生成以下文件:

Output/
├── boot.bin              # 芯片第一层 Loader 镜像
├── firmware.img          # 第二层固件包(待进一步解包)
└── Android/              # 分区镜像目录
    ├── package-file      # 分区配置表
    ├── loader.img        # MiniLoader
    ├── dtb.img           # 设备树
    ├── boot.img          # Linux 启动镜像
    ├── rootfs.img        # 根文件系统
    ├── app.img           # ★ 睿擎 RT-Thread 应用固件
    └── ...

其中 Android/ 目录下的文件即为目标分区的可编辑镜像文件。

三、修改分区内容

根据实际需求,选择对应的分区进行修改。以下说明三种最常见的修改场景。

3.1 替换 RT-Thread 应用固件(app.img/app.dtb)

适用场景: 通过 RuiChing Studio 更新了 RT-Thread 应用程序及设备树,需要烧录到开发板验证。或者制作量产固件,用于量产生产。

操作步骤
第一步: 将新编译生成的 app.img/app.dtb 文件复制到 Output/Android/ 目录,并将app.dtb文件名改为 dtb.img:

Output/Android/
├── app.img   ← 放入新的 app.img
└── dtb.img   ← 放入新的 app.dtb,并改名

重要说明:睿擎平台中,app.dtb 对应的固件分区名就是 dtb.img。

RuiChing Studio编译输出文件

第二步:进入第四章,执行重新打包。

3.2 替换 Linux 内核或设备树

适用场景: 修改了 Linux 内核配置或设备树dts文件,重新编译后需要验证。

Output/Android/
├── boot.img    ← 替换为新编译的 Linux 启动镜像
└── dtb.img     ← 替换为新编译的设备树文件

3.3 替换根文件系统

适用场景: 新增了系统库、工具链或应用配置文件,需要整体更新根文件系统。

Output/Android/
└── rootfs.img  ← 替换为更新后的根文件系统镜像

四、重新打包

4.1 回包脚本说明

睿擎提供了标准回包脚本 repack_update_img.bat,位于工具根目录。该脚本封装了两步打包操作,无需手动执行底层命令。

脚本内容如下:

@echo off
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

REM Repack Rockchip update image from Output\Android
REM Usage: repack_update_img.bat [SOC] [STORAGE] [OUTPUT_IMG_NAME]
REM Example: repack_update_img.bat RK3562 EMMC update_repack.img

set "ROOT_DIR=%~dp0"
set "BIN_DIR=%ROOT_DIR%\bin"
set "OUTPUT_DIR=%ROOT_DIR%\Output"
set "ANDROID_DIR=%OUTPUT_DIR%\Android"

set "AFP_TOOL=%BIN_DIR%\AFPTool.exe"
set "RK_MAKER=%BIN_DIR%\RKImageMaker.exe"
set "BOOT_BIN=%OUTPUT_DIR%\boot.bin"
set "TEMP_FIRMWARE=%OUTPUT_DIR%\firmware_repack.img"

REM 默认参数
set "SOC=RK3562"
set "STORAGE=EMMC"
set "OUTPUT_NAME=update_repack.img"

REM 命令行参数覆盖默认值
if not "%~1"=="" set "SOC=%~1"
if not "%~2"=="" set "STORAGE=%~2"
if not "%~3"=="" set "OUTPUT_NAME=%~3"
set "OUTPUT_IMG=%OUTPUT_DIR%\%OUTPUT_NAME%"

echo [STEP 1/2] Packing firmware image...
"%AFP_TOOL%" -pack "%ANDROID_DIR%" "%TEMP_FIRMWARE%"
if errorlevel 1 (
    echo [ERROR] AFPTool pack failed. Check package-file and image files.
    exit /b 2
)

echo [STEP 2/2] Packing final update image...
"%RK_MAKER%" -%SOC% "%BOOT_BIN%" "%TEMP_FIRMWARE%" "%OUTPUT_IMG%" -os_type:ANDROIDOS -storage:%STORAGE%
if errorlevel 1 (
    echo [ERROR] RKImageMaker pack failed. Check parameters (SOC, STORAGE).
    exit /b 3
)

echo [SUCCESS] Repack complete.
echo [SUCCESS] Output: %OUTPUT_IMG%

exit /b 0

4.2 执行打包

在工具根目录执行默认打包(使用 RK3562 / EMMC 参数):

repack_update_img.bat

如需指定芯片型号、存储介质或输出文件名,可传入参数:

# RK3562 + eMMC + 自定义输出文件名
repack_update_img.bat RK3562 EMMC my_update_v1.2.0.img

4.3 打包参数说明

打包脚本参数说明表

4.4 底层两步流程(可选了解)

回包脚本内部实际执行两步操作,理解其原理有助于排查问题:

第一步:AFPTool 打包分区镜像

AFPTool.exe -pack "Output\Android" "Output\firmware_repack.img"

将 Android/ 目录下的所有分区镜像按 package-file 配置打包为 firmware_repack.img。

第二步:RKImageMaker 合成最终镜像

RKImageMaker.exe -RK3562 "Output\boot.bin" "Output\firmware_repack.img" "Output\update_repack.img" -os_type:ANDROIDOS -storage:EMMC

将 boot.bin(第一层 Loader)与 firmware_repack.img(第二层固件包)合并为最终的 update_repack.img。

4.5 常见错误与处理

打包常见错误信息与原因

五、烧录验证

5.1 进入 Loader 烧录模式

使用 USB Type-A 线连接开发板与 PC,按以下步骤进入 Loader 模式:

  1. 按住 LOADER 按键(板子上标有 L 的那颗)
  2. 按住 RST 复位键
  3. 松开 RST 复位键,保持 LOADER 按键不放
  4. 约 1 秒后松开 LOADER 按键
  5. RKDevTool 界面应检测到 LOADER 状态的设备

5.2 使用 RKDevTool 烧录

打开 RKDevTool.exe,在设备列表中选中检测到的 LOAD 设备,然后在右侧路径栏选择重新打包生成的 update_repack.img 文件,点击“执行”开始烧录。

RKDevTool烧录进行中界面

烧录完成后设备自动重启。若修改的是 app.dtb 分区,设备重启后将默认运行新打包的应用程序。

烧录后设备运行新固件终端界面

六、操作流程汇总

① 准备工具和原始固件
   └─ RKDevTool_Release_v2.96 + 官方固件包(.7z 解压)

② 解包原始固件
   └─ unpack_update_img.bat
      └─ Output/boot.bin + Output/Android/(各分区镜像)

③ 修改目标分区
   ├─ 替换 app.dtb → 改名 dtb.img(最常见)
   ├─ 或替换 boot.img(Linux 内核)
   └─ 或替换 rootfs.img(根文件系统)

④ 重新打包
   └─ repack_update_img.bat [SOC] [STORAGE] [OUTPUT_NAME]
      └─ Output/update_repack.img

⑤ 烧录验证
   └─ RKDevTool → 选中 update_repack.img → 执行烧录

希望这篇详细的 RK3562 固件制作指南能帮助你顺利完成开发工作。如果在实践中遇到其他问题,欢迎到 云栈社区 的技术板块与更多开发者交流探讨。




上一篇:当AI Agent只回复“Done”:如何用DuckDB实现OpenClaw全链路观测与10秒排障
下一篇:科大讯飞开源SkillHub:企业级AI智能体技能私有化部署与管理平台
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-5 18:46 , Processed in 0.543694 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表