Android OTA¶
本章节介绍 Rockchip 平台 OTA 升级包的编译和升级方法。OTA 升级是 Android 系统提供的标准软件升级方式,提供了完全升级(完整包)和增量升级(差异包)两种模式。
OTA 差异包只有差异内容,体积较小,制作需要特殊的编译进行手动制作。
| 主板 | SOC | Android13 Product | Android14 Product |
|---|---|---|---|
| K1 | rk3568 | rk3568_t | / |
| K1B | rk3568 | rk3568_t | / |
| K1 MINI | rk3568 | rk3568_t | rk3568_u |
| K3 | rk3562 | rk3562_t | / |
| K3B | rk3562 | rk3562_t | rk3562_u |
| K7 | rk3576 | / | rk3576_u |
| K7C | rk3576 | / | rk3576_u |
| K7S_K7F | rk3576 | / | rk3576_u |
| K8 | rk3588 | rk3588_t | / |
| K8D | rk3588s | rk3588s_t | rk3588s_u |
| K11C | rk3566 | rk3566_t | rk3566_u |
| TX66 | rk3566 | rk3566_t | rk3566_u |
升级前提¶
1. 带电池的方案,接入电池状态下,升级时请保证电池电量充足;
2. 保证 OTA 包的镜像日期高于主板原本的镜像日期。
Tip
编译保证 make installclean 打开,编译时 prop 信息正常更新。
升级包制作¶
RK 平台 OTA 完整包和差异包的制作方法。
完整包制作¶
在 out/target/product/rkxxxx/ 目录下会生成 ota 完整包 rkxxxx-ota-eng.xxx.zip,改成 update.zip 即可拷贝到 TF 卡或者内置的 flash 进行升级。
差异包制作¶
Note
完整包和素材包是不一样的。差异包是两个版本的素材包做差异生成,所以每发布一个版本固件必须保存 obj 下的素材包以及升级的完整包和 ./mkimage.sh ota 生成的各个 image。
1. 首先发布 v1 版本的固件,生成 v1 版本的完整包。保存 out/target/product/rkxxxx/obj/PACKAGING/target_files_intermediates/rkxxx-target_files_eng.xxx.zip 为 rkxxxx-target_files-v1.zip,作为v1版本的基础素材包。同时设备烧写第1步编译后rockdev下的固件(切记这一点非常重要)。
mkdir -p ota_v1
cp rockdev/Image-rk3566_t/update-*.img ota_v1/
cp rockdev/Image-rk3566_t/rk3566_t-*.zip ota_v1/
cp out/target/product/rk3566_t/obj/PACKAGING/target_files_intermediates/rk3566_t-target_files-eng.hcm.zip ota_v1/
2. 修改 kernel 代码或者 android 代码,发布 v2 版本固件,生成 v2 版本完整包。保存 out/target/product/rkxxxx/obj/PACKAGING/target_files_intermediates/rkxxx-target_files-eng.xxx.zip 为 rkxxxx-target_files-v2.zip,作为v2版本的基础素材包。
mkdir -p ota_v2
cp rockdev/Image-rk3566_t/update-*.img ota_v2/
cp rockdev/Image-rk3566_t/rk3566_t-*.zip ota_v2/
cp out/target/product/rk3566_t/obj/PACKAGING/target_files_intermediates/rk3566_t-target_files-eng.hcm.zip ota_v2/
3. 制作 v1 和 v2 的差异升级包。
Android 13
mkdir -p ota_v1v2
sudo apt install python3-protobuf
python3 ./build/tools/releasetools/ota_from_target_files -v -i \
./ota_v1/rk3566_t-target_files-eng.hcm.zip --block -p ./out/host/linux-x86 \
./ota_v2/rk3566_t-target_files-eng.hcm.zip ./ota_v1v2/v1v2.zip
Android 14
mkdir -p ota_v1v2
out/host/linux-x86/bin/ota_from_target_files -v -i \
./ota_v1/rk3566_t-target_files-eng.hcm.zip --block -p ./out/host/linux-x86 \
./ota_v2/rk3566_t-target_files-eng.hcm.zip ./ota_v1v2/v1v2.zip
Note
ota_from_target_files -v -i 用于比较的前一个 target file --block 使用 block 方式进行 OTA 升级 -p host主机编译环境 -k 打包密钥,Android 13 默认 key 路径为 device/rockchip/common/security/testkey,其他 Android 平台默认 key 路径为 build/make/target/product/security/testkey。用于比较的后一个 target file 生成的ota差异包
升级步骤¶
对于验证 RK 平台来说,RK默认提供升级客户端 RKUpdateService 来验证,操作步骤如下。
1. 生成 OTA 完整包或差异包,并重新命名为 update.zip
2. 将 update.zip 拷贝到 USB、SD 卡根目录,/data/media/0/ 或 /sdcard/ 目录下
3. 会自动检测升级包,并弹出升级对话框。如果没有自动检测到,建议插拔下USB线或者直接重启下。
4. 自动重启升级:重启进入 Recovery 系统中自动完成 OTA 包的升级,等待升级完成会自动重启到 Android 主界面。
5. 升级完成后,可通过验证新的功能或系统编译属性确认变更。
服务器环境搭建(RKUpdateService)¶
OTA 远程升级需搭建 OTA 服务器,板端通过 RKUpdateService 定时请求服务器检测新版本。
服务器配置¶
1. 下载 RK平台apache_tomcat_ota服务器搭建说明_v1.1.rar 和 RKUpdateService_13.zip 并解压。
2. 将 apache-tomcat-7.0.29 放置到 Ubuntu 服务器任意目录下:
3. 放置 OTA 包到 packages 目录:
mkdir -p webapps/OtaUpdater/WEB-INF/packages/$(product)
cp rkxxxx-ota-eng.xxx.zip webapps/OtaUpdater/WEB-INF/packages/$(product)/
4. 编辑清单文件 webapps/OtaUpdater/WEB-INF/manifast.xml,添加产品条目:
<?xml version="1.0" encoding="UTF-8"?>
<manifast>
+ <product name="$(product)" full_package_path="null" rkimage_path="null">
+ <version name="$(version)" package_path="packages/$(product)/rkxxxx-ota-eng.xxx.zip" />
+ </product>
</manifast>
| 参数 | 说明 |
|---|---|
$(product) |
product 名,如 rk3568_t、rk3566_t,见上方 Product 列 |
$(version) |
版本号,如 20260608 |
5. 修改端口(可选),默认端口 2300:
<!-- conf/server.xml -->
<Connector port="2300" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
6. 启动服务器:
验证方式:浏览器访问 http://<server_ip>:2300/OtaUpdater/android?product=$(product)&version=$(version),返回 XML 表示成功。
主板配置¶
1. 烧录内置 RKUpdateService 的固件。
2. 修改板端 OTA 属性:
--- a/vendor/build.prop
+++ b/vendor/build.prop
+
+ro.product.ota.host=192.168.1.100:2300
+ro.product.model=$(product)
+ro.product.version=$(version)
3. 重启设备,连接网络后等待 RKUpdateService 检测到新版本。
4. 弹出升级提示后点击确认,设备自动下载并重启升级。
常见问题¶
- OTA 升级失败?
1. 确认是否满足升级条件。
2. 通过查看对应的升级日志 last_log 中包含的升级信息来查找原因。