第四章:烧录工具与固件制作

说到烧录和固件制作,我刚开始接触瑞芯微平台时,觉得这步挺简单的——不就是把固件写进去嘛。结果第一次做量产,就栽了个大跟头。嗯,今天咱们把这套流程彻底捋清楚。

4.1 RKDevTool 烧录工具

RKDevTool 是瑞芯微官方的烧录工具。说白了,它就是负责把固件写到板子里的「搬运工」。我个人习惯用 v2.84 版本,比较稳定。

核心要点:烧录前必须让板子进入 Loader 模式MaskROM 模式。否则工具认不到设备。

怎么进 Loader 模式?我一般这样操作:

  1. 按住板子上的 RECOVERY 键(或 BOOT 键)
  2. 保持按住,再按一下 RESET 键
  3. 松开 RESET,等 2 秒再松开 RECOVERY

这时候打开 RKDevTool,你应该能看到设备列表中出现了 Loader 设备。如果没出现,检查一下驱动装了没。我曾经因为驱动没装好,折腾了整整一下午。

小技巧:如果板子死活不进 Loader,试试按住 RECOVERY 键上电。有些板子的复位键设计得比较「隐蔽」。

4.2 分区表配置(parameter.txt)

parameter.txt 是分区表配置文件。它告诉烧录工具:你的固件该往哪里写,每个分区多大。我见过不少新手直接拿别人的 parameter.txt 用,结果烧完系统起不来。

一个典型的 parameter.txt 长这样:

FIRMWARE_VER: 8.1
MACHINE_MODEL: RK3566
MACHINE_ID: 007
MANUFACTURER: Rockchip
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00020000@0x00018000(recovery),0x00010000@0x00038000(backup),0x00040000@0x00048000(cache),0x00300000@0x00088000(system),0x00008000@0x00388000(metadata),0x00080000@0x00390000(vendor),0x00080000@0x00410000(oem),-@0x00490000(userdata)

这里我重点解释几个关键字段:

字段 含义 我的建议
FIRMWARE_VER 固件版本号 建议用语义化版本,比如 1.0.0
CMDLINE 分区布局 格式:大小@偏移(名称)
0x00002000 分区大小(单位:扇区,512字节) 算好你的系统需要多大空间
@0x00004000 分区起始偏移 不要重叠,不要留空洞

注意:分区大小和偏移都是十六进制,单位是 512 字节的扇区。我曾经把 system 分区设小了,结果刷完系统一直报空间不足。后来老老实实算了算:Android 系统至少需要 200MB 以上。

4.3 制作统一固件(update.img)

统一固件就是把所有分区打包成一个 .img 文件。这样做的好处是:烧录时一次搞定,不用一个个分区去选。

制作流程其实不复杂:

  1. 准备素材:boot.img、recovery.img、system.img、parameter.txt 等
  2. 打开 RKDevTool:切换到「固件制作」选项卡
  3. 添加分区:按 parameter.txt 的顺序添加每个分区文件
  4. 生成固件:点击「生成固件」,等它跑完

我个人习惯用脚本自动化这个过程。写个批处理文件,一键生成固件,省时省力。给你看看我常用的脚本片段:

@echo off
echo 开始制作统一固件...
rkdevtool.exe make -p parameter.txt -b boot.img -r recovery.img -s system.img -o update.img
echo 固件生成完成!

经验之谈:制作固件前,先检查每个分区文件的大小。如果某个分区文件超过了 parameter.txt 里分配的大小,烧录时会报错。我一般会在脚本里加个文件大小检查。

4.4 烧录实战步骤

好了,理论说完了,咱们直接上手。假设你已经有了 update.img:

  1. 打开 RKDevTool,切换到「下载镜像」选项卡
  2. 加载固件:点击「固件」按钮,选择你的 update.img
  3. 让板子进 Loader 模式(前面讲过的方法)
  4. 点击「执行」,开始烧录

烧录过程中,你会看到进度条在跑。如果一切顺利,最后会显示「下载完成」。如果中途报错,别慌,先看看错误码:

错误码 常见原因 解决办法
0x00000001 设备断开连接 检查 USB 线,重新插拔
0x00000002 固件格式错误 重新制作固件
0x00000003 分区表不匹配 检查 parameter.txt 和实际分区

重要提醒:烧录过程中不要断电,不要拔 USB 线。我有个同事就是烧到一半拔了线,结果板子变砖了。虽然能救回来,但折腾了好几个小时。

4.5 避坑指南

做这行久了,踩过的坑真不少。分享几个最常见的:

  • 驱动问题:Win10/Win11 需要禁用驱动签名强制。我一般在开机时按 F8 进高级启动选项,选择「禁用驱动程序强制签名」。
  • USB 线质量:劣质 USB 线会导致烧录失败。我建议用原装线,或者带屏蔽层的 USB 线。
  • 分区大小:userdata 分区建议留大一点。我曾经只给了 1GB,结果用户装几个 App 就满了。
  • 版本兼容:不同版本的 RKDevTool 对固件格式有差异。我习惯用和芯片配套的工具版本。

嗯,烧录和固件制作这块,说白了就是熟能生巧。多烧几次,多踩几个坑,自然就熟练了。下一章咱们聊聊系统启动流程,看看从上电到进入系统,芯片内部到底发生了什么。