如何实现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。
RK3568
1.3.2 配置“updater_config”文件夹中当前升级包所支持的版本范围:VERSION.mbn。
版本名称格式:RK3568 QP1A.XXXXXX.{大版本号(6位)}.XXX{小版本号(3位)}。例如:RK3568 QP1A.190711.020。名称中“190711”为大版本号,“020”为小版本号。
配置例如下:
RK3568 QP1A.190711.001
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配置
<?xml version="1.0"?>
<package>
<head name="Component header information">
<info fileVersion="01" prdID="rk3568" softVersion="3.2.2" date="2022-12-07" time="16:25">head info</info>
</head>
<group name = "Component information">
<component compAddr="ota_tag" compId="27" resType="5" compType="0" compVer="1.0">OTA.tag</component>
<component compAddr="vendor" compId="12" resType="05" compType="0" compVer="1.0">vendor.img</component>
<component compAddr="system" compId="12" resType="05" compType="0" compVer="1.0">system.img</component>
</group>
</package>
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
{
"serverIp": "115.126.57.xx", //服务器ip
"serverSearch": "115.126.57.xx", //搜包服务器
"serverPort":9556 //端口号
}
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 获取在线升级对象
//调用方包名,若在设置中插入升级,可添加为设置应用的包名
const PACKAGE_NAME = "com.ohos.ota.updateclient";
let upgradeInfo = {
upgradeApp: PACKAGE_NAME,
businessType: {
vendor: "HZOS",
subType: 1
}
}
page.data.updater = client.getOnlineUpdater(upgradeInfo);
4.2 获取版本信息
4.2.1 获取升级任务信息
page.data.updater.getTaskInfo().then(taskInfo => { //...}); //返回任务信息对象
4.2.2 检查新版本信息
page.data.updater.checkNewVersion().then(data => {
//...
}); //返回搜包结果对象
4.2.3 获取新版本信息
page.data.updater.getNewVersionInfo().then(data => {
//...
}); //返回新版本信息对象
4.3 版本下载
调用download(versionDigestInfo, downloadOptions) 下载新版本。
let versionDigestInfo = {
versionDigest: "versionDigest" // 检测结果中的版本摘要信息
};
let downloadOptions = {
allowNetwork: 1,
order: 1
}
page.data.updater.download(versionDigestInfo, downloadOptions).then(result => {
console.info(TAG + "updater download result: " + JSON.stringify(result));
}).catch(error => {
console.error(TAG + "updater download error: " + JSON.stringify(error));
});
4.4 安装新版本
调用upgrade(versionDigestInfo, upgradeOptions),安装新版本,开发板会重启进入系统升级页面,待系统升级完成。
clickInstall: function () {
if (page.data.pageType == "downSuccess") { // 下载成功,开始升级
page.upgrade();
}
},
upgrade() {
if (page.data.updater == undefined) {
//...
return;
}
page.data.updater.on(eventClassifyInfo, eventInfo => {
console.info(TAG + "upgrade eventInfo: " + JSON.stringify(eventInfo));
//...
});
let upgradeOptions = {
order: 2 //安装
}
page.data.updater.upgrade(versionDigestInfo, upgradeOptions).then(result => {
console.info(TAG + "upgrade result: " + JSON.stringify(result));
}).catch(error => {
console.error(TAG + "upgrade error: " + JSON.stringify(error));
});
}
进入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
如何实现OpenHarmony的OTA升级的更多相关文章
- Android OTA 升级之三:生成recovery.img
Android OTA 升级之三:生成recovery.img 作者: 宋立新 Email:zjujoe@yahoo.com 前言 得到了ota升级包后,我们就可以用它来升级系统了.Android 手 ...
- android 标准OTA升级流程
标准的OTA升级流程包括一下几个步骤: 1.Android设备首先会与OTA服务器进行交互,如果有更新会推送给客户.推送的信息常常会包含OTA更新包的下载地址和一些版本信息. 2.Update程序会将 ...
- ESP8266远程OTA升级
https://blog.csdn.net/xh870189248/article/details/80095139 https://www.wandianshenme.com/play/arduin ...
- ota升级动画修改
在网上可以搜到很多相关的文章,但是很多文章都是复制粘贴而来的,为了方便后面工作学习,本文会把其中最关键的几个步骤列出来. 首先根据ota升级界面的文字可以确认相关的图片资源的目录在哪里,可以网上搜一下 ...
- 乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级
目录 一.前言: 二.回顾下OTA的流程: 三.lwip网络框架的知识的使用: 四.如何处理服务器返回的数据? 五.扇区的擦除和烧写? 六.如何调用? 七.好好享用吧! 八.下载: 九.工程截图: 代 ...
- 实现乐鑫esp8266的无线OTA升级,实现远程在线升级固件
代码地址如下:http://www.demodashi.com/demo/12994.html 一.前言: 写了这么多的8266博文,一直以满意100%的心态去敲写代码固件烧录,以致很少出现 bug ...
- OTA升级
除了云端平台这部分,还要有通讯协议层面.云端和汽车端之间指令的接口和协议的制定,不同车厂会有不同诉求.艾拉比既可以支持车厂私有化定制协议的要求,也可以提供基于OMA标准的协议. 第一,它既是云端的工具 ...
- OTA升级中关于update.zip包的一些总结【转】
本文转载自:http://429564140.iteye.com/blog/2337165 update.zip包整理 一. update.zip包的目录结构 |----boot. ...
- Android Recovery OTA升级(一)—— make otapackage
文件夹 文件夹 概述 make otapackage BUILT_TARGET_FILES_PACKAGE ota_from_target_files WriteFullOTAPackage Sign ...
- OTA升级详解(一)
不积跬步,无以至千里: 不积小流,无以成江海. 出自荀子<劝学篇> 1.概念解释 OTA是何物? 英文解释为 Over The Air,既空中下载的意思,具体指远程无线方式,OTA 技术可 ...
随机推荐
- 【华为机试ACM基础#02】从单向链表中删除指定值的节点、输出单向链表中倒数第k个节点(熟悉链表的输入方式)
从单向链表中删除指定值的节点 输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针. 链表的值不能重复. 构造过程,例如输入一行数据为: 6 2 1 2 ...
- Lua调试函数 debug.getinfo() namewhat详解
Lua调试的时候会用到debug.getinfo()函数,what的值文档给了解释: "Lua" : Lua function "C" : C function ...
- dotnet nuget的命令行上传(推送/发布)包到Nexus 3
1.让Visual Studio在生成的时候也生成NuGet的包 在项目上点右键,选"属性",然后设置生成的时候制作NuGet的包. 英文版在这里打勾: 中文版在这里打勾: 重新生 ...
- ABP Suite创建新项目
启动Abp Suite ********************************************************************** ** Visual Studio ...
- 【Azure 存储服务】多设备并发往 Azure Storage Blob 的 Container 存数据是否可以
问题描述 多设备并发往 Azure Storage Blob 的 Container 存数据是否可以? 问题解答 可以! Azure Storage 是支持的并发存储数据的,Blob 可以使用乐观并发 ...
- C++ //常用查找算法 find_if
1 //常用查找算法 find_if 2 #include<iostream> 3 #include<string> 4 #include<vector> 5 #i ...
- harbor 安装
下载地址: https://github.com/goharbor/harbor/releases?page=1 下载了多个版本,发现仅v1.10.17版本支持GC清理,所以这里安装的v1.10.17 ...
- 一文搞懂如何自己写一个Python库
一文搞懂如何自己写一个Python库 你是否曾想过为自己的Python项目编写一个库,以便在不同项目中重复使用代码? 并且能在PyPI仓库中发布,并通过pip install 库名来安装使用 编写Py ...
- 16 Educational Codeforces Round 142 (Rated for Div. 2)C. Min Max Sort(递归、思维、dp)
C. Min Max Sort 很不错的一道题目,不过脑电波和出题人每对上,\(qwq.\) 正难则反. 我们考虑最后一步是怎么操作的. 最后一步一定是对\(1\)和\(n\)进行操作 那么上一步呢? ...
- SSH原理与实践(三)安装和使用
主页 个人微信公众号:密码应用技术实战 个人博客园首页:https://www.cnblogs.com/informatics/ 引言 在之前SSH原理与实践系列文章中,我们主要讲解了SSH协议的原理 ...