4.7.17. ota_tool

ota_tool 是一款用于嵌入式设备 OTA( Over-The-Air)升级管理的命令行工具。支持版本检查、分区管理、包签名验证、自动升级及强制升级等功能,它主要用于设备的固件更新。

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