如何实现OpenHarmony的OTA升级

OpenHarmony 3.2:制作OTA升级包,附脚本及配置 开源鸿蒙的OTA包需要手动制作,真是够扯淡的事情。本文介绍手动制作的流程和细节,顺带附了一个简单的OTA打包脚本,基于RK3568。 阅读详情

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

【鸿蒙OH实战开发】如何实现OpenHarmony的OTA升级 随着设备系统日新月异,用户如何及时获取系统的更新,体验新版本带来的新的体验,以及提升系统的稳定性和安全性成为了每个厂商都面临的严峻问题。OTA(Over the Air)提供对设备远程升级的能力。升级子系统对用户屏蔽了底层芯片的差异,对外提供了统一的升级接口。基于接口进行二次开发后,可以让厂商的设备(如IP摄像头等)轻松支持远程升级能力。OpenHarmony OTA升级主要是搭建搜包服务器,制作升级包,了解OTA下载包管理,包解析,包管理的代码逻辑。同时,对于常见问题知道如何快速定位! 阅读详情

相关推荐

OpenHarmony实战——如何实现OpenHarmony的OTA升级

随着设备系统日新月异,用户如何及时获取系统的更新,体验新版本带来的新的体验,以及提升系统的稳定性和安全性成为了每个厂商都面临的严峻问题。OTA(Over the Air)提供对设备远程升级的能力。升级子系统对用户屏蔽了底层芯片的差异,对外提供了统一的升级接口。基于接口进行二次开发后,可以让厂商的设备(如IP摄像头等)轻松支持远程升级能力。OpenHarmony OTA升级主要是搭建搜包服务器,制作升级包,了解OTA下载包管理,包解析,包管理的代码逻辑。同时,对于常见问题知道如何快速定位!

xianglizaibie的博客 1277

OpenHarmony 4.0 本地OTA升级

OpenHarmony 4.0 本地OTA全量增量升级操作指南

mart!nhu的博客 6288

【鸿蒙南向开发】如何实现OpenHarmony的OTA升级

OpenHarmony OTA升级主要是搭建搜包服务器,制作升级包,了解OTA下载包管理,包解析,包管理的代码逻辑。同时,对于常见问题知道如何快速定位!

HarmonyOS_666的博客 1612

如何实现OpenHarmony的OTA升级?

1.5 updater_binary二进制文件updater_binary该文件为系统编译自动生成,路径:out/rk3568/packages/phone/updater/bin/updater_binary。1.7 执行升级包制作命令python build_update.py ./target_package/ ./output_package/ -pk ./rsa_private_key2048.pem。服务器搭建完成后,只需要在开发板配置服务地址,搜包地址,端口号等信息即可完成搜包,下载等功能。

maniuT的博客 1450

鸿蒙南向开发-优雅实现OpenHarmony的OTA升级

OpenHarmony OTA升级主要是搭建搜包服务器,制作升级包,了解OTA下载包管理,包解析,包管理的代码逻辑。同时,对于常见问题知道如何快速定位!●如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:●关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。

HarmonyOS_666的博客 1207

鸿蒙OpenHarmony【用户程序框架开发指导】子系统

随着设备系统日新月异,用户如何及时获取系统的更新,体验新版本带来的新的体验,以及提升系统的稳定和安全性成为了每个厂商都面临的严峻问题。

asd95279527p的博客 1302

鸿蒙面试题:如何实现OpenHarmony的OTA升级?

随着设备系统日新月异,用户如何及时获取系统的更新,体验新版本带来的新的体验,以及提升系统的稳定性和安全性成为了每个厂商都面临的严峻问题。OTA(Over the Air)提供对设备远程升级的能力。升级子系统对用户屏蔽了底层芯片的差异,对外提供了统一的升级接口。基于接口进行二次开发后,可以让厂商的设备(如IP摄像头等)轻松支持远程升级能力。OpenHarmony OTA升级主要是搭建搜包服务器,制作升级包,了解OTA下载包管理,包解析,包管理的代码逻辑。同时,对于常见问题知道如何快速定位!

adaedwa187545的博客 1141

OpenHarmony OTA升级参考资料记录

和。本地升级是将已制作好的 OTA 包放入设备指定的升级路径,然后通过软件界面操作或直接输入相关升级命令来完成升级。这种方式适合无网络环境或对升级包进行离线分发的场景。网络 OTA 升级是指设备通过网络连接 OTA 服务器,下载升级包到本地设备。下载完成后,用户可通过软件界面启动升级。实际上,本地 OTA 升级是网络 OTA 升级的一个关键环节,即下载后的升级流程与本地升级类似。

吻等离子的博客 905

OpenHarmony4.0 OTA升级Demo

本文介绍了在OpenHarmony 4.0 Release系统上通过APP应用程序实现本地OTA全量升级的过程。主要内容包括:1)环境配置和原理概述;2)准备初始系统和待升级系统的差异版本;3)详细步骤说明如何制作全量update.zip升级包,包含镜像文件准备、工具安装、配置文件修改等关键操作;4)通过修改系统日志标识来验证升级效果。文章重点讲解了升级包制作流程,涉及文件拷贝、配置调整等具体操作,为开发者提供了完整的本地OTA升级实施方案。

mart!nhu的博客 1632

NET 实战:30 天搞定企业级 Web 订餐系统(附完整源码 + 数据库设计)

订餐流程:浏览菜品 → 选择菜品及数量 → 填写送餐地址 → 提交订单 → 数据库记录核心代码(绑定菜品列表):vb' 绑定菜单表到DataGrid控件,展示菜品信息user id=sa;' 查询菜品名称、价格、口味Dim adpt1 As New SqlDataAdapter("select cdishid,vdishname 菜品名称,cdishrate 价格,vdishdescription 口味 from dish", conn)End Sub用户体验优化。

m0_67740236的博客 1517

告别版本过低提示!微信3.9登录修复与聊天记录无缝迁移全攻略

本文详细解析了微信3.9版本过低提示的根源,并提供了完整的修复方案和聊天记录迁移指南。通过专用修复工具绕过版本检测,以及新旧版本聊天记录目录对比,帮助用户实现无缝迁移。特别提醒备份重要数据,确保操作安全。

weixin_42535461的博客 3123

ESP32 openharmony 下双ota升级方案

本文介绍了针对ESP32设备的OTA固件升级方案优化。资源限制(4MB Flash,1.3MB固件)

qq_41142671的博客 50

Ubuntu22.04安装搜狗输入法踩坑实录:从依赖报错到完美解决的完整指南

本文详细解析了在Ubuntu 22.04系统上安装搜狗拼音输入法的完整流程,从解决依赖报错到配置fcitx框架,再到最终优化使用体验。针对常见的dpkg安装错误和fcitx冲突问题,提供了实用的解决方案和命令,帮助用户顺利完成安装并享受流畅的中文输入体验。

palm99的专栏 971

【OpenHarmony】Updater 升级包安装组件

OpenHarmony Updater是升级子系统的核心组件,运行在独立分区中,主要实现升级包管理、程序执行、差分还原、分区管理等功能。采用分层架构和模块化设计,包含Package、Script、ApplyPatch等独立模块,支持多种升级模式(OTA、SD卡、Flashd等)。设计上注重可靠性(断点续传、异常回滚)、安全性(多重校验)和可扩展性(模块化),通过单例、工厂、策略等设计模式实现功能,为OpenHarmony系统提供安全稳定的升级服务。

fakerth的博客 1292

从机械臂示教到厨房做饭:ACT模仿学习如何让机器人更“人性化”?

本文探讨了ACT(Action Chunking with Transformers)模仿学习技术如何让机器人更“人性化”,特别是在厨房等复杂场景中的应用。通过动作分块(Action Chunking)和时态融合(Temporal Ensemble)技术,机器人能够像人类一样记忆和执行复杂任务,如烹饪。文章还分析了ACT在家庭场景中的落地挑战及其在康复医疗、柔性制造等领域的跨领域应用潜力。

weixin_30613343的博客 255

[cryoEM] cryoSPARC简介

cryoSPARC系统结构概述 cryoSPARC是一个后端和前端高性能计算软件系统,为单颗粒冷冻电镜提供数据处理和图像分析能力,以及丰富的基于浏览器的用户截面和命令行工具。 Master-worker模式 系统基于主用户模式。 主进程(web应用,核心应用程序和MongoDB数据库)一起在主节点上运行。主节点需要相对轻量级的资源(2+ CPU< 16GB+ RAM)。 工作程序进程可以在具有GPU的任何可用节点上生成,负责所有实际计算和数据处理,并由主节点调度。注意:同一节点可以同时充当主节点和辅

进阶中的程序员吃吃的博客 7796

鸿蒙 BLE 蓝牙智能设备固件升级之DFU升级方式(Nordic芯片)

一:问题(1)开始升级,crc 校验不通过解码压缩包,发送 op code3 的时候,包校验不通过,直接卡死在 crc 校验不通过,这个是因为这个地方设置的有问题,在 writeInitData 里面的 writeInitPacket ,把写入方式修改为await this(2)写入包的时候,由于写入过快,会导致丢包,固件接收到的包总数有问题,会导致升级失败只需要在 BaseCustomDfuImpl 的 onCharacteristicWrite 里面添加发送包的延迟操作。二:工具类。

SophieBryant的博客 1311

[RK3568 Android12] 添加自定义启动脚本

1:定义添加的脚本 2:rk3568_s.mk 中定义打包 3:在启动脚本中init.rk356x.rc添加权限及何时启动 4:添加权限文件file_contexts 5:系统确认是否运行

OpenWrt/WLAN/驱动/Android/嵌入式开发总结 2219

【OpenHarmony】升级服务组件(UpdateService)

OpenHarmony升级服务组件(UpdateService)是系统升级的核心模块,提供版本检查、升级包下载、策略管理、升级执行等功能。作为System Ability(SA 3006)独立运行,采用分层架构设计,包含应用层、框架层、服务层和系统服务层。该组件支持OTA在线升级、本地升级包安装及设备恢复出厂设置,通过状态机管理升级流程,采用代理模式、单例模式等多种设计模式确保可靠性。模块结构清晰,包含接口定义、服务实现、工具类等目录,实现安全可靠的系统升级能力。

fakerth的博客 1084

【光伏风电功率预测】基于 ICEEMDAN + MSCNN-BiGRU-Attention 的并行预测模型

本文提出一种基于ICEEMDAN分解与多尺度深度学习的光伏/风电功率并行预测框架。针对多能源、多时间尺度、强非平稳特性带来的建模挑战,该模型首先通过改进的ICEEMDAN算法将原始功率序列分解为不同频段的IMF分量;随后为每个IMF构建包含多尺度CNN、双向GRU和注意力机制的子模型,实现局部特征提取与时序依赖建模;最后通过并行预测与重构获得最终功率输出。实验表明,该方法能有效解决模式混叠问题,提升预测精度,并支持光伏/风电的独立或联合预测部署,适用于风光联合调度等工程场景。

专注AI大模型,软件混淆,授权 154

使用MATLAB中的Simulink工具来构建一个微电网系统的仿真平台

微电网是指由分布式电源(如太阳能、风能等)、储能装置、负载以及控制和保护装置组成的局部电力系统。它可以独立于主电网运行,也可以与主电网并联运行。本示例将以一个简单的微电网为例,展示如何利用Simulink进行微电网接入与孤岛运行策略的设计与仿真。分布式电源:模拟太阳能光伏板或风力发电机等分布式电源。储能装置:用于存储多余能量或补充不足能量。负载:模拟实际用电需求。双向变流器:实现直流与交流之间的转换,并支持并网和孤岛模式切换。控制器:负责管理微电网的运行模式,包括并网控制和孤岛控制。

xiaoheshang_123的博客 345
上一篇: OpenHarmony社区运营报告(2022年12月)
下一篇: 稀疏镜像在OpenHarmony上的应用
OpenHarmony开发者
博客等级 码龄5年 626粉丝 221原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值