跳转至

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 完整包和差异包的制作方法。

完整包制作

build.sh –UCAKuo

在 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.ziprkxxxx-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.ziprkxxxx-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/ 目录下

adb push rk3566_t-ota-eng.hcm.zip /sdcard/update.zip

3. 会自动检测升级包,并弹出升级对话框。如果没有自动检测到,建议插拔下USB线或者直接重启下。

4. 自动重启升级:重启进入 Recovery 系统中自动完成 OTA 包的升级,等待升级完成会自动重启到 Android 主界面。

5. 升级完成后,可通过验证新的功能或系统编译属性确认变更。

$ getprop ro.build.date
Fri May  8 11:06:32 CST 2026

服务器环境搭建(RKUpdateService)

OTA 远程升级需搭建 OTA 服务器,板端通过 RKUpdateService 定时请求服务器检测新版本。

服务器配置

1. 下载 RK平台apache_tomcat_ota服务器搭建说明_v1.1.rarRKUpdateService_13.zip 并解压。

2. 将 apache-tomcat-7.0.29 放置到 Ubuntu 服务器任意目录下:

sudo chmod 755 -R apache-tomcat-7.0.29
cd apache-tomcat-7.0.29

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. 启动服务器:

./bin/startup.sh

验证方式:浏览器访问 http://<server_ip>:2300/OtaUpdater/android?product=$(product)&version=$(version),返回 XML 表示成功。

主板配置

1. 烧录内置 RKUpdateService 的固件。

2. 修改板端 OTA 属性:

adb root
adb remount
--- 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 中包含的升级信息来查找原因。

$ ls /cache/recovery/                                                
block.map    last_kmsg.1 last_kmsg.4 last_log   last_log.3 uncrypt_file 
last_install last_kmsg.2 last_kmsg.5 last_log.1 last_log.4 
last_kmsg    last_kmsg.3 last_locale last_log.2 last_log.5