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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET WPF 抖动动画

.NET WPF 抖动动画 文章目录 .NET WPF 抖动动画1. WPF 动画的基本概念2. 动画类型3. 使用XAML定义动画4. 使用代码后台定义动画5. 组合动画6. 动画控制7. 自定义动画8. 动画的性能优化9. Demo - 抖动动画1. WPF 动画的基本概念 动画(Animation):在WPF中,动画指的是在一段时…

三级_网络技术_53_应用题

一、 请根据下图所示网络结构回答下列问题。 1.设备1应选用__________网络设备。 2.若对整个网络实施保护&#xff0c;防火墙应加在图中位置1~3的__________位置上。 3.如果采用了入侵检测设备对进出网络的流量进行检测&#xff0c;并且探测器是在交换机1上通过端口镜像方式…

完整指南:CNStream流处理多路并发框架适配到NVIDIA Jetson Orin (一) 依赖库编译、第三方库编译安装

目录 1 jetson-ffmpeg的编译安装与配置--用来做视频编码、视频解码 2 CV-CUDA库的编译安装与配置--用来做图像缩放、裁剪、色域转换 3 cuda cudnn TensorRT相关库的拷贝与配置 3.1将cuda cudnn TensorRT相关的头文件拷贝到工程中 3.2 将cuda cudnn TensorRT相关的库拷贝到…

ArcGIS Pro技术应用

GIS是利用电子计算机及其外部设备&#xff0c;采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲&#xff0c;它是在一定的地域内&#xff0c;将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来&#xff0c;达到对地理和属性信息的综合管理。GIS的…

学习之SQL语句之DQL(数据库查询语言)

DQL英文全称是Data Query Language(数据查询语言)&#xff0c;数据查询语言&#xff0c;用来查询数据库中表的记录 查询关键字:SELECT 数据准备&#xff1a; CREATE TABLE emp ( id INT COMMENT “编号”, workno VARCHAR ( 10 ) COMMENT “工号”, NAME VARCHAR ( 10 ) COMME…

day45.动态规划

1035.不相交的线: 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#xff0c;这些直线需要同时满足&#xff1a; nums1[i] nums2[j] 且绘制的直线不与任何其他连线&#xff08;非水…

【Python】家庭用电数据的时序分析

Household Electricity Consumption | Kaggle 目录 数据简介 探索分析 数据清洗 用电占比 趋势分析 序列分解 周期分析 周期分解 分析小结 数据简介 240000-household-electricity-consumption-records数据集包含了一个家庭6个月的用电数据&#xff0c;收集于2007年1…

安防监控/软硬一体/视频汇聚网关EasyCVR硬件启动崩溃是什么原因?

安防视频监控EasyCVR安防监控视频系统采用先进的网络传输技术&#xff0c;支持高清视频的接入和传输&#xff0c;能够满足大规模、高并发的远程监控需求。EasyCVR平台支持多种视频流的外部分发&#xff0c;如RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC、WS-FMP4、HTTP-…

MySql【数据查询语言DQL】

DQL[非常重要] DQL 主要指查询语句,有查询单表数据,也有查多表数据表,单表查询 基本查询 条件查询 模糊查询 排序查询 聚合查询 去重查询 分组查询 限制查询 1、 数据准备 将发的stu.sql导入到MySql中 2、 基本查询 select 字段1,字段2,... from 表名; 查询返回的是一张…

C语言 ——— 文件读取结束的判定

目录 判定文件读取结束的方式 被错误使用的feof函数 判定文件结束的正确使用 判定文件读取结束的方式 判断文本文件是否读取结束&#xff1a; 利用 fgetc 判断返回值是否为 EOF 利用 fgets 判断返回值是否为 NULL 判断二进制文件是否读取结束&#xff1a; 利用 fread 判…

MAC环境导出项目的目录结构

一、安装Homebrew包管理工具 /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)" 官网网址&#xff1a;https://brew.idayer.com/ 二、用brew包管理工具安装tree brew install tree 三、打开终端&#xff0c;导出项目…

axios响应

一.axios请求配置项(axios在调用时所接收的参数对象&#xff09; 以下是请求时可用的配置选项&#xff0c;只有url是必须的&#xff0c;如果没有指定method&#xff0c;请求将默认使用get方法 { // url 是用于请求的服务器 URL url: "/user", // method 是创建请…

【三维重建】三角网格中轴骨架线提取

三维网格中轴线提取 方法介绍实现提取 三维网格中轴线提取是计算机图形学和三维建模领域中的一个重要技术&#xff0c;它对于理解三维形状的拓扑结构和几何特性具有重要意义。 方法介绍 以下是几种常见的三维网格中轴线提取方法&#xff1a; 基于距离变换的方法 基本原理&…

大数据计算-SQL优化手段(CBO)-以Flink为例

文章目录 背景理论知识示例结果展示结果解释 背景 大数据计算中&#xff0c;SQL生成的执行计划第一轮会经过固定规则的优化&#xff0c;第二轮会根据原计划&#xff0c;生成多条结合成本的的执行计划&#xff0c;根据cost 进行排序&#xff0c;选出最优的执行计划。 理论知识…

【大数据算法】时间亚线性算法之:时间亚线性判定算法概述。

时间亚线性判定算法概述 1、引言2、空间亚线性算法2.1 定义2.2 实现方式2.3 应用场景2.3.1 大数据分析2.3.2 流数据处理2.3.3 近似计算2.3.4 稀疏数据操作 2.4 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;最近看新闻没啊&#xff1f; 小鱼&#xff1a;我天天…

Upload-labs靶场通过攻略

pass-01 1.写一个一句话木马 2.上传php文件 当我们上传php文件时 提示文件类型不正确 3.修改php后缀 通过修改php后缀为jpg 抓包再次修改成php文件 4.查看是否上传成功 页面显示图片 表示上传成功 pass-02 1.上传一个php文件 页面显示文件类型不正确 2.抓包修改 可以看…

【化学方程式配平 / 3】

题目 代码 #include <bits/stdc.h> using namespace std; const double eps 1e-8; unordered_map<string, int> e; int eidx, midx; //eidx 元素数&#xff0c; midx 物质数 double matrix[45][45]; int q; bool check_alpha(char c) {if(c > a && c …

Android APK打包脚本

build.gradle版本 同目录创建config.gradle文件写入需要的信息入 config.gradle文件内容 ext { /*** 自定义APP运行环境* dev: 开发* test: 测试* pro: 生产*/ env "pro" /*** 动态参数配置&#xff0c;根据自己需要添加参数* APP_ID: 包名* VERSION_CODE: 版本号…

【TDesign】如何修改CSS变量

Tdesign的组件想通过style定义样式没效果, 可以通过组件api文档修改, 组件提供了下列 CSS 变量&#xff0c;可用于自定义样式。 比如Cell, https://tdesign.tencent.com/miniprogram/components/cell?tabapi 提供了&#xff1a; –td-cell-left-icon-color 图标颜色 –td-cell…

yolo训练策略--使用 Python 和 OpenCV 进行图像亮度增强与批量文件复制

简介 在计算机视觉和深度学习项目中&#xff0c;数据增强是一种常用的技术&#xff0c;通过对原始图像进行多种变换&#xff0c;可以增加数据集的多样性&#xff0c;从而提高模型的泛化能力。本文将介绍如何使用 Python 和 OpenCV 实现图像的亮度增强&#xff0c;并将增强后的…