1. RK3399 Android10镜像烧录入门指南
第一次接触RK3399开发板的开发者,面对各种镜像文件常常一头雾水。boot.img、super.img这些名词看起来就很专业,更别说还要区分线刷和卡刷的不同操作方式。我在实际项目中遇到过不少开发者,因为不熟悉镜像更新流程而耽误开发进度的情况。今天我们就用最直白的语言,把RK3399平台Android10系统的镜像烧录讲清楚。
RK3399作为一款高性能处理器,在智能设备开发中应用广泛。Android10系统编译完成后会生成十几种镜像文件,每种都承担着不同的功能。比如boot.img包含了内核和初始化内存盘,super.img则整合了system、vendor等关键分区。理解这些镜像的作用,是进行烧录操作的基础。
烧录方式主要分为两种:通过USB线连接电脑进行烧录(线刷),或者使用SD/TF卡进行烧录(卡刷)。线刷更灵活,可以单独更新某个镜像;卡刷则适合批量生产时使用。需要注意的是,如果你的开发板使用SD卡作为主存储,那就只能选择卡刷方式。
2. 镜像文件详解与拆解实战
2.1 镜像文件全家福
编译完成后,在rockdev/Image-xx目录下会看到这些关键文件:
- boot.img:这是系统启动的核心,包含内核(kernel)、设备树(dtb)和初始化内存盘(ramdisk)。每次修改内核配置后都需要更新这个文件。
- super.img:Android10引入的动态分区镜像,整合了system、vendor和odm分区。我实测发现,单独更新system分区在Android10上已经行不通了,必须通过super.img整体更新。
- dtbo.img:设备树覆盖镜像,用于硬件配置调整。当需要修改GPIO配置或外设参数时,就需要更新这个文件。
- vbmeta.img:Android Verified Boot的校验信息,保证系统完整性。如果跳过这个文件的更新,可能会导致系统无法启动。
其他如uboot.img、trust.img等属于底层引导文件,除非进行深度定制,否则一般不需要频繁更新。
2.2 拆解update.img实战
官方固件通常打包成单个update.img文件。要提取其中的各个镜像,可以使用Firefly提供的拆解工具:
# 下载解包工具 wget https://www.t-firefly.com/doc/download/89.html#other_283 tar -xzf firefly-rk3399-linux-repack.tgz cd firefly-rk3399-linux-repack # 将固件重命名为update.img后执行解包 ./unpack.sh解包完成后,output目录下会生成所有独立的镜像文件。我在实际使用中发现,有时解包会报错,这通常是因为下载的固件不完整,重新下载即可解决。
3. USB线刷全攻略
3.1 准备工作
线刷需要准备:
- Windows电脑(Win10测试通过)
- USB Type-C数据线
- AndroidTool_v2.71工具
- RK USB驱动
安装驱动时有个小技巧:先不要连接开发板,运行DriverInstall.exe后选择"驱动安装",等提示成功后,再按步骤让开发板进入Loader模式。
3.2 完整固件烧录
完整烧录适合首次刷机或需要彻底更新的场景:
- 开发板断电状态下,按住Recovery键不放
- 插入USB线连接电脑
- 接通电源,2秒后松开Recovery键
- 打开AndroidTool,此时应显示"发现一个LOADER设备"
在"升级固件"页面选择update.img,直接点击"升级"即可。这里有个坑要注意:如果开发板原本是Android9系统,刷Android10前必须先执行"擦除Flash",否则可能会卡在开机logo。
3.3 单镜像更新技巧
开发过程中最常用的就是单独更新boot.img或super.img:
- 切换到"下载镜像"标签页
- 勾选需要更新的分区,如boot
- 点击对应分区的空白处选择镜像文件
- 点击"执行"开始烧录
我习惯在修改内核后,只更新boot.img来测试,这样能节省大量时间。实测从点击执行到烧录完成,boot.img只需要15秒左右。
4. SD卡烧录的注意事项
对于使用SD卡作为存储的设备,只能通过SD卡烧录完整固件:
- 使用RK3399的SDK工具包中的工具
- 将固件重命名为update.img
- 拷贝到SD卡根目录
- 开发板断电状态下插入SD卡
- 按住Recovery键上电,自动开始烧录
这里有个重要经验:SD卡必须格式化为FAT32格式,且容量不要超过32GB。我曾经用64GB的卡折腾了半天才发现这个问题。
5. Linux环境下的烧录方案
对于习惯Linux开发的用户,可以使用命令行工具完成烧录:
# 安装升级工具 sudo mv upgrade_tool /usr/local/bin sudo chmod a+x /usr/local/bin/upgrade_tool # 烧录完整固件 sudo upgrade_tool uf update.img # 单独烧录boot.img sudo upgrade_tool di -b boot.img在Ubuntu 20.04上测试时,需要先执行sudo apt install libusb-1.0-0-dev安装依赖库,否则工具无法识别设备。
6. 常见问题排查
遇到烧录失败时,可以按照以下步骤排查:
- 设备无法进入Loader模式:检查USB线是否支持数据传输,尝试更换Type-C接口
- 烧录中途报错:降低烧录速度,在AndroidTool的"高级功能"中选择"普通擦除"
- 刷机后无法启动:检查parameter.txt中的分区表是否匹配,特别是super分区大小
- Linux下权限问题:创建/etc/udev/rules.d/51-android.rules文件,添加RK3399的USB规则
最近遇到一个典型问题:烧录后卡在开机动画。最后发现是vbmeta.img没有随super.img一起更新,导致AVB校验失败。所以记住,修改系统分区后,一定要同时更新vbmeta.img。
7. 进阶技巧与优化建议
对于需要频繁烧录的开发者,我有几个实用建议:
- 使用脚本自动化烧录流程,比如:
#!/bin/bash upgrade_tool di -b boot.img & upgrade_tool di -super super.img & wait echo "烧录完成"在parameter.txt中适当增大userdata分区,避免应用开发时空间不足
调试阶段可以关闭AVB校验,修改vbmeta.img中的校验标志
保持uboot和trust版本与系统匹配,避免底层兼容性问题
经过多次项目实践,我总结出一个高效的工作流:先完整烧录一次基准固件,之后开发过程中只更新boot.img和system.img(通过super.img),最后发布前再完整验证一次全镜像烧录。这样既能保证效率,又能确保系统完整性。