4.7.17. ota_tool
ota_tool 是一款用于嵌入式设备 OTA( Over-The-Air)升级管理的命令行工具。支持版本检查、分区管理、包签名验证、自动升级及强制升级等功能,它主要用于设备的固件更新。
有关
ota_tool的详细说明,请参阅 OTA 功能与介绍 章节。
4.7.17.1. 语法说明
以下是执行 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.
4.7.17.2. 参数选项说明
-v, –version:获取 OTA 库版本、系统版本和防回滚版本。
-b, –boot:在启动时检查 OTA 更新状态
-s, –setpartition [partition]:设置当前使用的分区( A/B 分区)。
参数:
0 :表示 A 分区。
1 :表示 B 分区。
-g, –getpartition:获取当前使用的分区( A/B 分区)。返回值为 0 或 1 。
-p, –package [package_path]:指定升级包的路径,可以是相对路径或绝对路径,路径长度必须小于 64 字节。
-n, –noreboot:执行 OTA 更新时不自动重启设备。
-c, –checksign:执行签名验证,确保升级包的完整性和真实性。
-i, –signature [signature_file]:指定签名文件路径,用于签名验证。
-h, –help:显示帮助信息。
4.7.17.3. 各项命令选项及其功能说明
查询版本信息
命令:
root@buildroot:~# ota_tool -v
功能:
输出 OTA 库版本、系统版本和防回滚版本。
打印输出:
root@buildroot:/userdata/gmsl# ota_tool -v
OTA Library version is 1.0.1
system version is V1.0.16_20250311-1228
字段解析:
OTA Library version:表示当前 OTA 库的版本号
system version is V1.0.16_20250311-1228 :表示当前系统的版本号。
OTA 分区管理
命令:
root@buildroot:~# ota_tool -s 1
root@buildroot:~# ota_tool -s 0
功能:
设置下次启动 A/B slot, 0 代表 A 分区, 1 代表 B 分区。
设置 A 分区打印输出 :
root@buildroot:~# ota_tool -s 0
[OTA_INFO][veeprom_flag.c:86] veeprom crc, oricrc[fe2954d5], newcrc[fe2954d5], offset[1352]
[OTA_INFO][veeprom_flag.c:396] update part num: [0]
[OTA_INFO][ota_boot_control.c:142] curslot read from misc is: 1
[OTA_INFO][ota_boot_control.c:650] next expected slot is:1
[OTA_INFO][ota_boot_control.c:688] set slot:0 to next expected success!
[OTA_INFO][veeprom_flag.c:632] next slot veeprom 0
[OTA_INFO][veeprom_flag.c:86] veeprom crc, oricrc[fe2954d5], newcrc[fe2954d5], offset[1352]
[OTA_INFO][veeprom_flag.c:310] veeprom: flag [7], value [0]
设置 B 分区打印输出 :
root@buildroot:~# ota_tool -s 1
[OTA_INFO][veeprom_flag.c:86] veeprom crc, oricrc[637d5378], newcrc[637d5378], offset[1352]
[OTA_INFO][veeprom_flag.c:396] update part num: [0]
[OTA_INFO][ota_boot_control.c:142] curslot read from misc is: 0
[OTA_INFO][ota_boot_control.c:650] next expected slot is:0
[OTA_INFO][ota_boot_control.c:688] set slot:1 to next expected success!
[OTA_INFO][veeprom_flag.c:632] next slot veeprom 1
[OTA_INFO][veeprom_flag.c:86] veeprom crc, oricrc[637d5378], newcrc[637d5378], offset[1352]
[OTA_INFO][veeprom_flag.c:310] veeprom: flag [7], value [1]
命令:
root@buildroot:~# ota_tool -g
功能:
获取当前激活分区。
打印输出:
root@buildroot:~# ota_tool -g
[OTA_INFO][hobot_ota_hl.c:462] current slot is:A
OTA 固件升级
使用 ota_tool 进行升级前,需要将 OTA 升级包上传至板端。编译 OTA 升级包命令如下:
./bd.sh otapackage
OTA 打包端详细介绍请参阅 X5 OTA 打包端介绍 章节。
命令:
root@buildroot:~# ota_tool -p all_in_one.zip
功能:
启动 OTA 固件升级,但不验证包完整性。
命令:
ota_tool -c -p all_in_one.zip -i all_in_one.signature
功能:
启动 OTA 固件升级并验证包完整性。
OTA 状态检查
命令:
root@buildroot:~# ota_tool -b
功能:
启动时检查 OTA 更新状态,并标记当前分区的启动状态,使用 OTA 更新固件后系统会自动启用该命令选项 。
手动打印输出:
root@buildroot:~# ota_tool -b
[OTA_INFO][veeprom_flag.c:86] veeprom crc, oricrc[637d5378], newcrc[637d5378], offset[1352]
[OTA_INFO][veeprom_flag.c:396] update part num: [0]
Normal boot
[OTA_INFO][ota_boot_control.c:304] This slot has been marked success before, no need to mark it repeatedly
[OTA_INFO][ota_boot_control.c:797] set slot:0 boot success
[OTA_INFO][veeprom_flag.c:86] veeprom crc, oricrc[637d5378], newcrc[637d5378], offset[1352]
[OTA_INFO][veeprom_flag.c:310] veeprom: flag [0], value [3]
系统自启打印输出:
[OTA_INFO][veeprom_flag.c:396] update part num: [1]
[OTA_INFO][veeprom_flag.c:86] veeprom crc, oricrc[4db4cddd], newcrc[4db4cddd], offset[1352]
[OTA_INFO][veeprom_flag.c:396] update part num: [1]
[OTA_INFO][veeprom_flag.c:86] veeprom crc, oricrc[4db4cddd], newcrc[4db4cddd], offset[1352]
[OTA_INFO][veeprom_flag.c:396] update part num: [1]
[OTA_INFO][ota_utils.c:876] normal mode
[OTA_INFO][hobot_ota_hl.c:755] OTA update status check success
[OTA_INFO][ota_boot_control.c:797] set slot:0 boot success
[OTA_INFO][veeprom_flag.c:86] veeprom crc, oricrc[4db4cddd], newcrc[4db4cddd], offset[1352]
[ 4.355944] printk: S99ota_update_c: 16 output lines suppressed due to ratelimiting