如何实现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命令,将屏幕设置为常亮。

  1. 升级客服端代码实例

需要权限:

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下载包管理,包解析,包管理的代码逻辑。同时,对于常见问题知道如何快速定位!

经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?

为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。

《鸿蒙 (Harmony OS)开发学习手册》(共计892页):https://gitcode.com/HarmonyOS_MN/733GH/overview

如何快速入门?

1.基本概念

2.构建第一个ArkTS应用

3.......

开发基础知识:

1.应用基础知识

2.配置文件

3.应用数据管理

4.应用安全管理

5.应用隐私保护

6.三方应用调用管控机制

7.资源分类与访问

8.学习ArkTS语言

9.......

基于ArkTS 开发

1.Ability开发

2.UI开发

3.公共事件与通知

4.窗口管理

5.媒体

6.安全

7.网络与链接

8.电话服务

9.数据管理

10.后台任务(Background Task)管理

11.设备管理

12.设备使用信息统计

13.DFX

14.国际化开发

15.折叠屏系列

16.......

鸿蒙开发面试真题(含参考答案):https://gitcode.com/HarmonyOS_MN/733GH/overview

OpenHarmony 开发环境搭建

《OpenHarmony源码解析》 :https://gitcode.com/HarmonyOS_MN/733GH/overview

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ......
  • 系统架构分析
  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ......

OpenHarmony 设备开发学习手册 :https://gitcode.com/HarmonyOS_MN/733GH/overview


相关推荐
析木不会编程29 分钟前
【小白51单片机专用教程】protues仿真独立按键控制LED
单片机·嵌入式硬件·51单片机
枯无穷肉4 小时前
stm32制作CAN适配器4--WinUsb的使用
stm32·单片机·嵌入式硬件
不过四级不改名6775 小时前
基于HAL库的stm32的can收发实验
stm32·单片机·嵌入式硬件
嵌入式大圣5 小时前
单片机UDP数据透传
单片机·嵌入式硬件·udp
云山工作室6 小时前
基于单片机的视力保护及身姿矫正器设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·毕设
嵌入式-老费6 小时前
基于海思soc的智能产品开发(mcu读保护的设置)
单片机·嵌入式硬件
liyinuo20177 小时前
嵌入式(单片机方向)面试题总结
嵌入式硬件·设计模式·面试·设计规范
艺术家天选8 小时前
STM32点亮LED灯
stm32·单片机·嵌入式硬件
小猪写代码9 小时前
STM32 水质水位检测项目 (调试模块)和(延时模块)
stm32·单片机·嵌入式硬件
御风_219 小时前
STM32单片机使用CAN协议进行通信
stm32·单片机·嵌入式硬件