如何实现 OpenHarmony 的 OTA 升级
OTA 简介
随着设备系统日新月异,用户如何及时获取系统的更新,体验新版本带来的新的体验,以及提升系统的稳定性和安全性成为了每个厂商都面临的严峻问题。OTA(Over the Air)提供对设备远程升级的能力。升级子系统对用户屏蔽了底层芯片的差异,对外提供了统一的升级接口。基于接口进行二次开发后,可以让厂商的设备(如 IP 摄像头等)轻松支持远程升级能力。
OTA 升级包类型
升级包常见有 3 种类型,主要包括:全量升级包、差分升级包以及变分区升级包。
• 全量升级包:升级包中只包括镜像全量升级相关数据,用于镜像全量升级;
• 差分升级包:升级包中只包括镜像差分升级相关数据,用于镜像差分升级;
• 变分区升:升级包中包括分区表、镜像全量数据,用于变分区处理和变分区后的镜像恢复。
适用范围
OpenAtom OpenHarmony(简称“OpenHarmony”) 3.1 Release 不支持富设备升级,本章节所有实例在 OpenHarmony 3.2 Beta3 上验证,升级方式为全量升级,所用开发板为诚迈科技基于 RK3568 设计的 HCPAD-100 开发板以及 OpenHarmony 主干使用的 DAYU200 开发板。可使用 HCPAD-100 开发板或 DAYU200 开发板验证,patch 已提供,其他开发板可能存在差异,请自行验证。
OTA 升级步骤
1. 制作升级包(update_packaging_tools 需切换至 master 分支)
1.1 创建目标版本(target_package)文件夹,文件格式如下:
1.2 将待升级的组件,包括镜像文件(例如:system.img)等放入目标版本文件夹的根目录下,代替上文结构中的{component_N}部分。
1.3 填写“updater_config”文件夹中的组件配置文件。
1.3.1 配置“updater_config”文件夹中当前升级包支持的产品 list:BOARD.list。
1.3.2 配置“updater_config”文件夹中当前升级包所支持的版本范围:VERSION.mbn。
版本名称格式:RK3568 QP1A.XXXXXX.{大版本号(6 位)}.XXX{小版本号(3 位)}。例如:RK3568 QP1A.190711.020。名称中“190711”为大版本号,“020”为小版本号。
配置例如下:
1.4 创建“OTA.tag 文件”,内容为 OTA 升级包的魔数,固定如下:
package_type:ota1234567890qwertw //可选
1.5 updater_binary 二进制文件
updater_binary 该文件为系统编译自动生成,路径:
out/rk3568/packages/phone/updater/bin/updater_binary
1.6 updater_specified_config.xml 配置
1.7 执行升级包制作命令
python build_update.py ./target_package/ ./output_package/ -pk ./rsa_private_key2048.pem
• ./target_package/:指定 target_package 路径。
• ./output_package/:指定升级包输出路径。
• -pk ./rsa_private_key3072.pem:指定私钥文件路径。
• 此处可以使用系统自带的证书:
device/board/hisilicon/hispark_taurus/linux/updater/config/rsa_private_key2048.pem
注:OpenHarmony 3.2 Beta3 分支上 base/update/packaging_tools 仓制作 updater 升级包校验有 BUG,会失败。开发者已经在 master 分支上修复,制作升级包前请同步 master 上最新代码。
2.配置服务器
搭建搜包服务器(OTA 搜包服务器采用 OpenSSL 协议传输数据,所以必须使用 HTTPS 解析),服务器源码见附件 sslserver 目录。
3.配置网络
3.1 配置客户端服务器信息
为了方便调试,我们提供了本地可配置文件修改方案(patch 见附件)。服务器搭建完成后,只需要在开发板配置服务地址,搜包地址,端口号等信息即可完成搜包,下载等功能。
配置路径:/system/etc/serverInfo.json
3.2 Beta3 分支默认 route 路由是关闭的,只要先打开 route 才能连接外网。搜包前先要替换 toybox 文件,配置好的 toybox 已在附件中提供,直接通过 hdc_std file send toybox(路径) /system/bin/ 替换即可。
3.3 导入 signing_cert.crt 证书
hdc_std file send signing_cert.crt(路径) /data/ota_package
3.4 配置路由地址
hdc_std shell
route add default gw 10.51.11.1 dev eth1 //10.51.11.1 是网关地址,根据实际情况配置,如果不知道如何查看网关,请联系你们的网络管理员。
ping www.huawei.com //ping 确认是否可以联网
3.4 为了方便观察效果,可通过 hdc_std shell power-shell setmode 602 命令,将屏幕设置为常亮。
4. 升级客服端代码实例
需要权限:
ohos.permission.UPDATE_SYSTEM 和 ohos.permission.INTERNET,系统权限需要使用 FULL_SDK.
4.1 获取在线升级对象
4.2 获取版本信息
4.2.1 获取升级任务信息
4.2.2 检查新版本信息
4.2.3 获取新版本信息
4.3 版本下载
调用 download(versionDigestInfo, downloadOptions) 下载新版本。
4.4 安装新版本
调用 upgrade(versionDigestInfo, upgradeOptions),安装新版本,开发板会重启进入系统升级页面,待系统升级完成。
进入 updater 模式,升级过程中会提示“正在更新 请勿重启”。
升级完成后页面会提示“升级完成”,之后重启。
升级完成后,再次校验当前版本信息,提示当前已是最新版本。
OTA 升级调试
正常模式:在该路径下 data/updater/log 获取 updater_log、updater_stage_log、error_code.log 三份日志文件。
updater 模式:在该路径下 tmp/获取 updater.log、updater_stage.log、error_code.log 三份日志文件。
updater.log 搜索关键字 fail 即可快速定位问题。
总结
OpenHarmony OTA 升级主要是搭建搜包服务器,制作升级包,了解 OTA 下载包管理,包解析,包管理的代码逻辑。同时,对于常见问题知道如何快速定位!
参考链接
升级客户端应用、服务器源码
https://gitee.com/wanfan_yyds/upgrade3.2
基于 OpenHarmony 3.2 Beta3 分支源码的 patch
https://gitee.com/wanfan_yyds/update_updateservice/commit/44e28bb1d8d84b200348c5ad03f9f4ce3bad3e1e
https://gitee.com/wanfan_yyds/update_updater/commit/0fe02cec5b21bd3f9a47c4e5a0fd0e5790088703
参考文献
https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/apis/js-apis-update.md/
https://gitee.com/openharmony/update_updater
https://gitee.com/openharmony/update_updateservice
https://gitee.com/openharmony/update_update_app
https://gitee.com/openharmony/update_packaging_tools
评论