OTA升级操作说明 原创 精华

与鸿蒙有缘
发布于 2022-4-6 15:42
浏览
4收藏

@toc

Guide

这是一篇讲解如何对OTA正确操作的文档,让初入门的开发者对OTA有初步的认识,并学会简单操作。

一、什么是 OTA

OTA(Over the Air)提供对设备远程升级的能力,可以让您的设备,轻松支持远程升级能力。目前仅支持全量包升级,暂不支持差分包升级。全量包升级是将新系统全部内容做成升级包,进行升级;差分包升级是将新老系统的差异内容做成升级包,进行升级。
关于OTA目前支持以下三种方式,方式1和3均验证完毕,方式2还在调测中,此处暂不做介绍:
1、OTA(Over the Air)–ota在线升级;
2、通过USB从主机进程更新 – reboot flashd;
3、通过外部存储器进行升级 --SD卡/U盘升级;

二、操作说明

1.制作升级包

1.1 生成公私钥对

鸿蒙基线源码里默认有一对公私钥可以直接使用,见目录:openharmony/device/board/hisilicon/hispark_taurus/linux/updater/config 私钥:rsa_private_key2048.pem 公钥:signing_cert.crt
rk3566中控屏代码仓里默认的公私钥对见目录:device/rockchip/rk3566/build/updater_config 私钥:rsa_private_key2048.pem 公钥:signing_cert.crt
也可以用Openssl工具自行生成自己的公私钥对,关于私钥文件请妥善保管,在升级包制作过程中将私钥文件作为制作命令的参数带入,用于升级包签名。公钥用于升级时对升级包进行签名校验,鸿蒙标准系统需要将生成的公钥放在 openharmony/device/board/hisilicon/hispark_taurus/linux/updater/config/signing_cert.crt 这个文件中;如果是开鸿的3566中控屏代码仓请放在device/rockchip/rk3566/build/updater_config/signing_cert.crt文件中;

1.2 制作升级包

1.2.1 创建目标文件夹

关于目标文件夹的命名可以自定义,这里将文件夹命名为ota_package,操作如下:
osm@ubuntu:~$mkdir ota_package

osm@ubuntu:~$cd ota_package

osm@ubuntu:~/ota_package$ tree -a
.
├── system.img // 待升级的组件1
├── updater_binary // 升级相关的可执行文件
├── updater_config // 固定格式,子文件夹管理组件配置文件
│   ├── BOARD.list // 当前升级包支持的产品list
│   ├── updater_specified_config.xml // 组件配置文件
│   └── VERSION.mbn // 当前升级包所支持的版本范围
├── userdata.img // 待升级的组件2
└── vendor.img // 待升级的组件3

1、关于BOARD.list,内容如下:
osm@ubuntu:~/ota_package/updater_config$ cat BOARD.list
HI3516
HI3518
HI3559
osm@ubuntu:~/ota_package/updater_config$
2、关于VERSION.mbn,内容如下:

osm@ubuntu:~/ota_package/updater_config$ cat VERSION.mbn
Hi3516DV300-eng 10 QP1A.190711.020
Hi3516DV300-eng 10 QP1A.190711.022
osm@ubuntu:~/ota_package/updater_config$
版本名称格式:Hi3516DV300-eng 10 QP1A.XXXXXX.{大版本号(6位)}.XXX{小版本号(3位)}
例如:Hi3516DV300-eng 10 QP1A.190711.020。名称中“190711”为大版本号,“020”为小版本号。

3、关于updater_specified_config.xml,内容如下:
osm@ubuntu:~/ota_package/updater_config$cat updater_specified_config.xml

<?xml version="1.0"?>
<package>
	<head name="Component header information">
    	<info fileVersion="01" prdID="123456" softVersion="Hi3516DV300-eng 10 QP1A.190711.020" date="2021-03-11" time="12:30">head info</info>
	</head>
	<group name = "Component information">
  		<component compAddr="vendor" compId="18" resType="05" compType="0" compVer="0o00">./vendor.img</component>
  		<component compAddr="system" compId="18" resType="05" compType="0" compVer="0o00">./system.img</component>
 	</group>
</package>

osm@ubuntu:~/ota_package/updater_config$

1.2.2 执行升级包制作命令(全量升级包)

这里以鸿蒙的代码路径为例:
osm@ubuntu:~$mkdir ota_output

osm@ubuntu:~$python3.8 openharmony/base/update/packaging_tools/build_update.py ota_package ota_output -pk rsa_private_key2048.pem
如果制作SD卡升级包需要加上-sc选项,即:python3.8 openharmony/base/update/packaging_tools/build_update.py ota_package ota_output -pk rsa_private_key2048.pem -sc
执行完之后,在ota_output下可以看到升级包:hi3516_ota_xxxxxx.zip,将其重命名为updater.zip,如果是在线升级需要将升级包放在服务器上,如果是SD卡升级需要将升级包放在SD卡的updater目录。

2、升级

2.1 OTA升级(还在调测中,敬请期待)

2.2 OTA升级(跳过下载)

将升级包通过SD卡/U盘/hdc_std等工具放到设备的/data下面的自定义目录,这里将升级包updater.zip放在/data/updater/updater目录下

2.2.1 方式一、在主分区命令行执行:

reboot updater:–update_package=/data/updater/updater/updater.zip

2.2.2 方式二、在主分区命令行设置系统参数:

param set ohos.startup.powerctrl reboot,updater:–update_package=/data/updater/updater/updater.zip
(或调用接口 bool RebootAndInstallUpgradePackage(const std::string &miscFile, const std::string &packageName) )
以上两种方式原理相同,均是把参数–update_package=/data/updater/updater/updater.zip写入misc分区,后面updater进程会去misc分区获取该参数。
成功触发后,开始校验,界面如下:
OTA升级操作说明-鸿蒙开发者社区
校验通过后开始升级,界面如下:
OTA升级操作说明-鸿蒙开发者社区
升级成功后板子会自动重启,至此操作完毕。

2.3 SD卡升级

OTA升级优先级高于SD卡升级:updater进程先去misc分区获取–update_package参数,成功获取到则进入ota在线升级。否则进入SD卡升级界面,进行SD卡升级等操作。

2.3.1 切换分区

这里将包含升级包的SD卡插入设备,并在主分区命令行执行reboot updater,不传递–update_package参数,可以直接切换到recovery分区,界面如下:
OTA升级操作说明-鸿蒙开发者社区

2.3.2 选择升级

OTA升级操作说明-鸿蒙开发者社区

2.3.3 开始校验

如果升级包制作没有问题,板子开始验证升级包,显示如下:
“Don’t remove SD Card!”
“Verify package…” //持续时间比较久,大概一二十分钟
OTA升级操作说明-鸿蒙开发者社区

2.3.4 开始升级

OTA升级操作说明-鸿蒙开发者社区
验证通过之后,开始升级,升级成功后板子会自动重启,至此操作完毕。

3、调测

在升级的过程中会产生log文件/data/updater/log/updater_log, 包含程序运行各个阶段添加的打印信息可供调试使用。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
已于2022-4-6 16:55:25修改
7
收藏 4
回复
举报
2条回复
按时间正序
/
按时间倒序
wx634e5941cc80a
wx634e5941cc80a

差分升级包制作没有问题 ,但是总是报错sha_check 检查失败  麻烦问一下 这是什么问题导致的

2013-01-18 00:10:42  [INFO]UPDATER_BINARY pkg_pkgfile.cpp 70 : ExtractFile Verse-script.us

2013-01-18 00:10:42  [INFO]UPDATER_BINARY pkg_zipfile.cpp 516 : packedSize: 1040 unpackedSize: 2595  offset header: 0 data: 45

2013-01-18 00:10:42  [INFO]UPDATER_BINARY script_interpreter.cpp 31 : ExecuteScript Verse-script.us

2013-01-18 00:10:42  [INFO]UPDATER_BINARY script_statement.cpp 266 : [INTERPRETER 1-2]"UScriptStatementList::Execute "

2013-01-18 00:10:42  [INFO]UPDATER_BINARY script_expression.cpp 126 : [INTERPRETER 1-2]"BinaryExpression::Execute "

2013-01-18 00:10:42  [INFO]UPDATER_BINARY script_expression.cpp 126 : [INTERPRETER 1-2]"BinaryExpression::Execute "

2013-01-18 00:10:42  [INFO]UPDATER_BINARY script_expression.cpp 126 : [INTERPRETER 1-2]"BinaryExpression::Execute "

2013-01-18 00:10:42  [INFO]UPDATER_BINARY script_expression.cpp 152 : [INTERPRETER 1-2]"FunctionCallExpression::Execute sha_check "

2013-01-18 00:10:42  [INFO]UPDATER_BINARY script_interpreter.cpp 171 : [INTERPRETER 1-2]"ExecuteNativeFunc::Execute sha_check "

2013-01-18 00:10:42  [INFO]UPDATER_BINARY update_image_block.cpp 390 : UScriptInstructionShaCheck::dev path : /dev/block/platform/fe330000.sdhci/by-name/system

2013-01-18 00:10:43  [ERROR]UPDATER_BINARY update_image_block.cpp 420 : Different sha256, cannot continue

2013-01-18 00:10:43  [INFO]UPDATER_BINARY script_interpreter.cpp 202 : [INTERPRETER 1-2]"ExecuteNativeFunc::Execute sha_check result: 508"

2013-01-18 00:10:43  [INFO]UPDATER_BINARY script_expression.cpp 143 : [INTERPRETER 1-2]"BinaryExpression::Execute left:type: Error 508 != right:type: Integer 0 result:null"

2013-01-18 00:10:43  [ERROR]UPDATER updater.cpp 322 : Updater process exit with status: 0

2013-01-18 00:10:43  [ERROR]UPDATER updater.cpp 182 : Install package failed.

2013-01-18 00:10:47  [INFO]UPDATER updater_main.cpp 479 : [uploadLog]WriteCfgItemValue enter

2013-01-18 00:10:47  [INFO]UPDATER updater_main.cpp 481 : [uploadLog]GetUpdateResultConfToJsonObj ok

2013-01-18 00:10:47  [INFO]UPDATER updater_main.cpp 401 : [uploadLog]status RESULT_FAILURE.

2013-01-18 00:10:47  [INFO]UPDATER updater_main.cpp 484 : [uploadLog]WriteJsonToFile ok

2013-01-18 00:10:47  [INFO]UPDATER mount.cpp 128 : /data already mounted

回复
2022-10-18 16:01:45
wx6055b55683187
wx6055b55683187 回复了 wx634e5941cc80a
差分升级包制作没有问题 ,但是总是报错sha_check 检查失败 麻烦问一下 这是什么问题导致的2013-01-18 00:10:42 [INFO]UPDATER_BINARY pkg_pkgfile.cpp 70 : ExtractFile Verse-script.us 2013-01-18 00:10:42 [INFO]UPDATER_BINARY pkg_zipfile.cpp 516 : packedSize: 1040 unpackedSize: 2595 offset header: 0 data: 45 2013-01-18 00:10:42 [INFO]UPDATER_BINARY script_interpret...

我也遇到了相同的错误,请问一下楼主这边有解决了吗?


回复
2022-12-6 11:32:11
回复
    相关推荐