征程 6X OTA 升级端介绍
征程 6X 对外提供 libupdate.so,其中包含升级所需 API, API 定义请参考对外文档。
01 ota_tool 使用
ota_tool 是使用 libupdate.so API 实现的一个工具,用于板端手动发起 OTA 升级。ota_tool 可作为 OTA Service 开发时的 Sample 参考,代码位于 hbre/otaupdate/src/ota_tool。
ota_tool Usage:
-v, --version get this library’s version,
system version,
antirollback version
-b, --boot check ota update status when boot.
-s, --setpartition [partition] set A/B slot partition, 0–A; 1–B.
-g, --getpartition get A/B slot partition, 0–A; 1–B.
-p, --package [package_path] specify the path of package, the package paths can be relative or absolute, it’s length must be smaller than 64 bytes.
-n, --noreboot request ota without reboot.
-c, --checksign signature check.
-i, --signature signature information file.
-h, --help Display this help screen.
使用 ota_tool 进行升级前,需要将 OTA 升级包上传至板端。
参数介绍:
-h 用于获取帮助信息
-v 用于获取 libupdate.so 版本、当前系统软件版本、antirollback 版本
-b 用于启动升级结果检查(系统启动后会自动启动,用户无需关心)
-s 设置下次启动 A/B slot
-g 获取当前 A/B slot
-p 指定升级包
-n 升级成功后不自动重启
-c 使能签名检查
-i 指定签名文件(必须跟在-p 后面)
举例:
ota_tool -p all_in_one_full.zip
02 ota_tool 实现
ota_tool 使用 C 语言实现,源码仅 otainterface.c
一个文件。实现了获取系统软件版本、升级结果检查、设置/获取 ab slot、OTA 升级、强制升级、OTA 包签名校验等功能。
若-c 参数传入,则使用传入的签名文件对升级包进行签名校验。
最后,调用 ota_update_all_img
启动升级。
03 ota_update_all_img
调用
otaGetPartition
获取当前所在 ab slot调用
otaInitLib
初始化 libupdate.so调用
otaRequestStart
并传入升级包和 owner(OTA_TOOL),开始升级等待
otaGetResult
的结果为OTA_UPGRADE_SUCCESS
或OTA_UPGRADE_FAILED
。等待过程中,调用otaGetProgress
、otaGetResult
、otaGetUpdatingImageName
获取升级进度、升级结果、正在升级的镜像,并调用OTA_show_Process_Bar
打印到控制台若升级结果
otaGetResult
为OTA_UPGRADE_SUCCESS
,则认为升级成功,调用otaSetPartition
设置 ab slot 到对向 slot ,然后重启 SoC
升级流程结束重启后,应启动 ota_tool -b
对升级结果进行检查校验,并进行后续操作。
04 ota_boot_check
征程 6 启动后,会启动一个 hobot-otatool.service
服务,该服务调用了 ota_tool -b
,该选项会检查 /ota/ota_tool_force_upgrade
文件是否存在,若存在,则进入升级流程(该进程会重新调用升级命令)。若该文件不存在,则进入升级校验流程 ota_boot_check。
调用
otaInitLib
调用
otaGetOwnerFlag
获取升级 owner若 owner 为
NORMAL_BOOT
,则调用otaMarkOTASuccessful
标记启动成功,然后退出。若 owner 不为
OTA_TOOL
,则正常退出。调用
otaCheckUpdate
获取升级结果。若升级结果异常,则调用otaClearFlags
清除 OTA 标记,终止 OTA 流程。调用
otaMarkOTASuccessful
标记启动成功。调用
otaPartitionSync
进行 AB 分区、 BAK 分区同步。
评论