0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何实现OpenHarmony的OTA升级

OpenAtom OpenHarmony 来源:未知 2023-02-08 22:00 次阅读

开源项目 OpenHarmony是每个人的 OpenHarmony 2e000974-a7b8-11ed-bfe3-dac502259ad0.png

黄腾坤

诚迈科技驱动开发工程师

2e8fe8a0-a7b8-11ed-bfe3-dac502259ad0.png

万帆

诚迈科技应用开发工程师

OTA简介

随着设备系统日新月异,用户如何及时获取系统的更新,体验新版本带来的新的体验,以及提升系统的稳定性和安全性成为了每个厂商都面临的严峻问题。OTA(Over the Air)提供对设备远程升级的能力。升级子系统对用户屏蔽了底层芯片的差异,对外提供了统一的升级接口。基于接口进行二次开发后,可以让厂商的设备(如IP摄像头等)轻松支持远程升级能力。

OTA升级包类型

升级包常见有3种类型,主要包括:全量升级包、差分升级包以及变分区升级包。 2ec43376-a7b8-11ed-bfe3-dac502259ad0.png   •全量升级包:升级包中只包括镜像全量升级相关数据,用于镜像全量升级; •差分升级包:升级包中只包括镜像差分升级相关数据,用于镜像差分升级; •变分区升:升级包中包括分区表、镜像全量数据,用于变分区处理和变分区后的镜像恢复。  

适用范围

OpenAtom OpenHarmony(简称“OpenHarmony”) 3.1 Release不支持富设备升级,本章节所有实例在OpenHarmony 3.2 Beta3上验证,升级方式为全量升级,所用开发板为诚迈科技基于RK3568设计的HCPAD-100开发板以及OpenHarmony主干使用的DAYU200开发板。可使用HCPAD-100开发板或DAYU200开发板验证,patch已提供,其他开发板可能存在差异,请自行验证。

OTA升级步骤

2ee1f848-a7b8-11ed-bfe3-dac502259ad0.png  1.制作升级包(update_packaging_tools需切换至master分支) 1.1 创建目标版本(target_package)文件夹,文件格式如下: 2f2b64d8-a7b8-11ed-bfe3-dac502259ad0.png   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配置


    
head info OTA.tag vendor.img system.img 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 OpenHarmony 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确认是否可以联网 2f4d000c-a7b8-11ed-bfe3-dac502259ad0.png   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 => {
  //...
});//返回搜包结果对象
2f611452-a7b8-11ed-bfe3-dac502259ad0.png   4.2.3 获取新版本信息
page.data.updater.getNewVersionInfo().then(data => {
  //...
});//返回新版本信息对象
2f78aa4a-a7b8-11ed-bfe3-dac502259ad0.png   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));
});
30125726-a7b8-11ed-bfe3-dac502259ad0.png   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));
  });
}
302da936-a7b8-11ed-bfe3-dac502259ad0.png   进入updater模式,升级过程中会提示“正在更新 请勿重启”。  30b4f9e0-a7b8-11ed-bfe3-dac502259ad0.jpg   升级完成后页面会提示“升级完成”,之后重启。  30cab4b0-a7b8-11ed-bfe3-dac502259ad0.jpg   升级完成后,再次校验当前版本信息,提示当前已是最新版本。  30e97256-a7b8-11ed-bfe3-dac502259ad0.png  

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即可快速定位问题。 31171daa-a7b8-11ed-bfe3-dac502259ad0.png  

总结

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升级

文章出处:【微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    57

    文章

    2306

    浏览量

    42731
  • OpenHarmony
    +关注

    关注

    25

    文章

    3658

    浏览量

    16129

原文标题:如何实现OpenHarmony的OTA升级

文章出处:【微信号:gh_e4f28cfa3159,微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    OTA升级后重启,printf日志错误的原因?

    OTA升级后重启,printf日志错误。
    发表于 07-18 06:26

    ESP8266 OTA升级失败的原因?

    我正在使用自定义服务器来升级 esp8266。我可以从服务器下载图像,但总是升级失败。 我将以下.bin文件下载到闪存中(下载前,我擦除整个闪存): ------------ 2 MByte
    发表于 07-11 07:45

    ESP8266 OTA升级不成功的原因?

    我正在使用最新的 RTOS SDK 版本 1.5 ESP8266。我使用自定义服务器进行OTA升级。 有时 OTA 升级成功,有时即使闪烁了正确的图像,
    发表于 07-10 06:14

    如何在ESP8266上运行OTA升级

    在 ESP8266 (ESP-12F) 上运行 OTA 升级
    发表于 07-10 06:13

    请问esp32 ota升级如何获取更新进度?

    所用的是esp32-s2 idf:4.4调用esp_https_ota API进行固件升级,想获取更新进度,但不知道怎么实现,有人做过或者有思路指点一下吗?
    发表于 06-14 07:20

    ESP-IDF是否支持基于BLE的OTA升级

    节点需要切换到WiFi才能完成HTTP升级,ESP-IDF是否支持基于BLE的OTA升级
    发表于 06-12 07:49

    ESP-IDF4.4 OTA升级失败的原因?

    ESP-IDF4.4 OTA 功能,在启动OTA功能后下载固件过程中出现wifi无Internet访问,然后很快网络恢复,需要等待很久后OTA升级失败。
    发表于 06-06 08:19

    ESP IDF OTA升级失败的原因?

    ESP IDF 5.1.1,官方OTA例程,升级过程中失败,tcp拉取文件中断,有遇到类似情况的吗,日志如下: I (59717) ota: ota url:http://www.x
    发表于 06-05 07:27

    能否使用cyw43439对MCU(STM32h745ziq)进行OTA升级

    在这个项目中,我需要创建可以使用 WiFi 无线更新的设备。 到目前为止,MCU 已经实现了与路由器的连接。 有可能用 cyw43439 芯片实现 OTA 升级吗?
    发表于 05-24 06:33

    ZDP1440系列小技巧—如何OTA差分升级显示素材?

    ZDP1440是一款基于开源GUI引擎的图像显示专用驱动芯片,支持U盘、SD卡本地升级UI固件,同时也支持通过UART/SPI方式进行OTA升级,本文将介绍如何OTA差分
    的头像 发表于 05-06 14:01 816次阅读
    ZDP1440系列小技巧—如何<b class='flag-5'>OTA</b>差分<b class='flag-5'>升级</b>显示素材?

    技术帖 | RK3568开发板的OTA升级教程

    说起OTA我们应该都不陌生,它是一种可以为设备无损失升级系统的方式,能将新功能远程部署到产品上。我们不仅可以通过网络下载OTA升级包,也可以通过下载
    的头像 发表于 04-20 08:01 1537次阅读
    技术帖 | RK3568开发板的<b class='flag-5'>OTA</b><b class='flag-5'>升级</b>教程

    请问BlueNRG ota升级ota_sw_activation变量上电是随机值吗?

    最近在看BlueNRG ota升级代码时有一个疑惑,ota_sw_activation变量是一个未初始化的值,按照ram特性上电应该是一个随机值,那么在
    发表于 03-13 08:29

    汽车ota升级有什么用 汽车ota功能有必要吗

    以通过无线网络,将最新的软件版本直接传输到车辆中,实现快速、简便的升级。那么汽车OTA升级有什么用呢? 汽车OTA
    的头像 发表于 02-18 14:39 1184次阅读

    ota升级是什么意思 ota升级有什么用

    OTA(Over-the-Air)升级是指通过无线网络,将软件、固件或系统的新版本传输到支持的设备上进行更新和安装的过程。这一技术广泛应用于手机、智能电视、汽车等各类智能设备中。本文将详细介绍OTA
    的头像 发表于 02-02 10:25 5349次阅读

    如何通过雅特力AT32WB415的蓝牙模块来进行OTA升级

    概述OTA(Over-The-AirTechnology)即空中下载技术,利用OTA技术可以在不接触(接线)的情况下对芯片程序进行升级。AT32WB415的OTA是通过蓝牙的方式
    的头像 发表于 12-20 08:15 801次阅读
    如何通过雅特力AT32WB415的蓝牙模块来进行<b class='flag-5'>OTA</b><b class='flag-5'>升级</b>