如何实现OpenHarmony的OTA升级

news2024/9/27 19:24:16

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

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

为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(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

图片
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2088668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

白嫖游戏指南,Epic喜加一:《野卡橄榄球》

前言 Epic喜加一&#xff1a;《野卡橄榄球》《野卡橄榄球》简介&#xff1a; 前言 接下来有时间会分享一些游戏相关可以白嫖的资源&#xff0c;包括游戏本体、游戏素材资源等等。 有需要的小伙伴可以关注这个专栏&#xff0c;不定期更新哦&#xff01; 专栏&#xff1a;白嫖…

微信小程序中Towxml解析Markdown及html

一、Towxml Towxml 是一个让小程序可以解析Markdown、HTML的解析库。 二、引入 2.1 clone代码 git clone https://github.com/sbfkcel/towxml.git2.2 安装依赖 npm install2.3 打包 npm run build2.4 引入文件 将dist文件复制到微信小程序根目录&#xff0c;改名为towx…

简化WPF开发:CommunityToolkit.Mvvm在MVVM架构中的实践与优势

文章目录 前言一、CommunityToolkit.Mvvm1.特点2.优点3.缺点 二、WPF项目应用1.引入到 WPF 项目2.使用示例 总结 前言 CommunityToolkit.Mvvm 是 Microsoft 提供的一个社区工具包&#xff0c;专为 MVVM&#xff08;Model-View-ViewModel&#xff09;模式设计&#xff0c;旨在帮…

基于Virtex UltraScale+ VU13P FPGA的4路FMC接口基带信号处理平台

Virtex UltraScale系列 FPGA处理器&#xff1a;XCVU13P-2FHGB2104I动态存储数量&#xff1a;2组DDR4 SDRAM动态存储容量&#xff1a;每组4GByte&#xff0c;每个颗粒为8GBit动态存储带宽&#xff1a;工作时钟1000MHz&#xff0c;数据率2000Mbps板载6路QSFP光纤接口板载4个FMC高…

echarts 柱状图_堆叠柱状图_数据分区_常用图表配置_数据可视化

Echarts 常用各类图表模板配置 注意&#xff1a; 这里主要就是基于各类图表&#xff0c;更多的使用 Echarts 的各类配置项&#xff1b; 以下代码都可以复制到 Echarts 官网&#xff0c;直接预览&#xff1b; 图标模板目录 Echarts 常用各类图表模板配置一、数据分区显示二、折…

Redis入门篇 - CentOS 7下载、安装Redis实操演示

文章记录了在CentOS 7上&#xff0c;通过源码的形式,下载安装Redis的操作过程 进入要安装Redis的目录 cd /usr/local下载源码压缩包 wget https://download.redis.io/redis-stable.tar.gz # 不同版本可能地址不同下载完成后&#xff0c;使用ll命令检查&#xff0c;可以看到下载…

移动端视频编辑SDK,赋能开发者,共创未来视界

美摄科技&#xff0c;作为移动端视频编辑领域的佼佼者&#xff0c;再次突破技术边界&#xff0c;推出了全面升级的移动端视频编辑SDK解决方案&#xff0c;旨在为广大开发者及内容创作者提供一套强大而灵活的创意工具箱&#xff0c;让视频与图片编辑的每一个细节都焕发无限可能。…

51单片机——定时器

1、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源&#xff0c;其电路的连接和运转均在单片机内部完成。 定时器作用: (1) 用于计时系统&#xff0c;可实现软件计时&#xff0c;或者使程序每隔一固定时间完成一项操作 (2) 替代长时间的Delay&#xff0c;提高…

LuaJit分析(三)luajit字节码文件格式

Luajit字节码文件格式的完整信息如上图所示&#xff0c;包括文件头Header和原型Proto&#xff0c;一个原型可以对应lua源码中的一个函数或源文件。一、文件头文件标志&#xff1a;占用三个字节&#xff0c;始终是0x1B4C4A&#xff0c;表示这是一个luajit文件版本&#xff1a;占…

006-Sleuth(Micrometer)+ZipKin分布式链路追踪

这里写目录标题 1 分布式链路追踪概述1.1 为什么会出现这个技术&#xff1f;需要解决哪些问题&#xff1f;1.2 在分布式与微服务场景下需要解决的问题 2 新一代Spring Cloud Sleuth&#xff1a;Micrometer2.1 官网重要提示2.1.1 新一代Sleuth2.1.2 官网2.1.3 说明2.1.3.1 老项目…

性能测试计划怎么写?

一&#xff0e;简介 简介部分就不用过多描述了&#xff0c;无非是项目的背景&#xff0c;进行此次性能测试的原因&#xff0c;以及性能测试覆盖的范围等等&#xff0c;几乎所有项目文档都在开端对项目进行简单的阐述。 二&#xff0e;性能测试需求 寻找的被测试对象和压力点…

SD-WAN 跨国专线主要应用在哪些地方?

随着企业需求的不断变化和发展&#xff0c;传统的WAN技术已无法完全满足现代企业的需求。因此&#xff0c;SD-WAN跨国专线逐渐成为企业连接全球业务的重要选择。SD-WAN跨国专线通过SD-WAN技术&#xff0c;实现跨国业务的高效专线连接&#xff0c;极大地提升了企业的全球运营能力…

泡泡玛特2024半年报发布:收入利润高增长 各项指标超预期

泡泡玛特发布2024上半年业绩报告。报告显示&#xff0c;2024年上半年泡泡玛特国际集团实现营收45.6亿元(人民币&#xff0c;下同)&#xff0c;同比增长62.0%&#xff0c;经调整后净利10.2亿元&#xff0c;同比增长90.1%。国内地市场差异化渠道定位及精细化运营驱动其业务实现营…

分类预测|基于Transformer-LSTM的数据分类预测Matlab程序 多特征输入多类别输出

分类预测|基于Transformer-LSTM的数据分类预测Matlab程序 多特征输入多类别输出 文章目录 一、Transformer-LSTM基本原理1. 模型原理TransformerLSTM 2. 流程步骤1. 数据预处理2. Transformer编码器3. LSTM层4. 分类层5. 模型训练与评估 3. 优势与应用 二、实验结果三、核心代码…

【原创教程】电气电工14:电磁阀知识一篇搞定

电气电工这些知识点,我们描述的比较细,虽然看起来比较简单,但是它是后面我们技能提升的基础,如果我们后面学电气工程师相关知识,这些都属于基本功。 接着我们来看一下电磁阀。 电磁阀是一种利用电磁原理控制流体介质方向、流量、压力等参数的控制元件。它是将电信号转化…

安装Ubuntu

1.看到如下直接回车&#xff08;安装&#xff09; 2.选择语言 3.有的版本会叫你更新&#xff08;1.更新2.不用继续安装3.返回&#xff09; 4.键盘选择&#xff08;一般默认即可回车&#xff09; 5.Ubuntu版本选择 6.网路配置 7.代理服务器配置&#xff08;不懂回车即可&#xf…

C语言教程-13_1-初识指针

title: C语言教程-13_1-初识指针 tags: [C] categories: C语言教程 description: 接触C语言的灵魂-指针 概要: 简要讲解内存地址与内存模型简单介绍C语言的指针这一数据类型掌握指针相关最基本的两种互逆运算 前置知识: 理解能力和想象能力耐心和实验精神数组与函数的知识 …

ES(Elasticsearch)可视化界面-浏览器插件

安装 支持Micrsoft Edge、谷歌、火狐浏览器 此处我以IE为例 使用 extension://aonamamifdfigcflbeokdndfappnmogo/es-client/index.html?td_channelidchrome#/more/about 输入相关连接信息即可 rest client语法 和kibana的开发者工具查询方式一致,可以参考我另一篇文章Kiba…

Python生成指定数量的随机XML文件

我的需求是随机生成18位数字的XML文件名&#xff0c;其中前12位数字是随机数&#xff0c;后6位是时间信息 其中XML中写入CSN的tag值&#xff0c;代码如下 import os import random import time import xml.etree.ElementTree as ETdef generate_random_filename():random_part…

光耦合器的简要揭秘

光耦合器&#xff0c;也称为光隔离器或光电耦合器&#xff0c;是电子器件中必不可少的元件&#xff0c;它提供了一种在电路隔离部分之间传输电信号的方法。这种隔离对于保护系统的敏感部分免受高压尖峰或电气噪声的影响至关重要&#xff0c;这使得光耦合器在许多应用中成为一种…