专栏算法工具链J6X OTA 打包工具介绍

J6X OTA 打包工具介绍

费小财2024-11-19
136
0

J6X OTA 打包工具

OTA 打包工具介绍

OTA打包工具位于"img_packages/ota_tools"路径下,使用前参考build章节获取shell环境变量。
> tree
.
├── hdiffz // 差分工具
├── hpatchz // 差分工具
├── j6e-gpt.json // GPT 工具
├── mk_otapackage.py // ota 打包工具
├── ota_pack_tool.sh // ota 打包脚本,该工具是对mk_otapackage.py的封装
├── ota_process // ota 升级用到的二进制工具,放入ota包中
└── private_key.pem // ota 制作升级包会用到的私钥
一般使用ota_pack_tool.sh制作所需的ota升级包,支持ota升级包解包,解包后重打包,制作升级包以及制作差分包等。使用方法如下:
Usage: ./ota_pack_tool.sh [OPTIONS]...
Options:
-x, -unpack
Unpack the given OTA package file.
-c, -create
-d

Generate OTA package by source dir or img_packages.
: middleware, app, sys, full ... etc.
: app and middleware require the fs dir or xxx.img, sys and full require img dir.
(e.g.)run "./ota_pack_tool.sh -c app -d /root/app/" or "./ota_pack_tool.sh -c app -d /root/app/app.img".
(e.g.)run "./ota_pack_tool.sh -c sys -d /root/img_packages/"
-i, -inc
-old
-new

Create an incremental OTA package.
: sys, full, middleware, app ... etc.
,
: ota pack, xxx.zip.
(e.g.)run "./ota_pack_tool.sh -inc app -old /old/app.zip -new /new/app.zip".
-h, -help Display this help message.

ota_pack_tool.sh在使用时需要确保GPT_CONFIG环境变量设置正确,值为"img_packages/ota_tools"目录下的GPT工具,如果没有设置,必须手动设置,如下:

OTA 升级包解包与重打包

升级包解包:

.. code:: bash
mkdir -d ./out/ota_unpack
unzip xxx.zip -d ./out/ota_unpack

升级包解包后,可以更新./out/ota_unpack下的镜像,重新制作ota包,使用的OTA配置文件与ota_process均位于./out/ota_unpack。该方法无法修改OTA配置文件gpt.conf。

升级包重打包:

  • 复用打包命令即可。

  • 例如:./ota_pack_tool.sh -c sys -d ./out/ota_unpack

OTA 制作普通升级包

可以制作app.zip,middleware.zip,系统升级包与全量升级包,MCU_ONLY包等。使用的分区表配置文件与ota_procee均位于ota_tools目录下,可根据实际需求修改分区表j6e-gpt.json。
-c, -create
-d

Generate OTA package by source dir or img_packages.
: middleware, app, sys, full ... etc.
: app and middleware require the fs dir or xxx.img, sys and full require img dir.
(e.g.)run "./ota_pack_tool.sh -c app -d /root/app/" or "./ota_pack_tool.sh -c app -d /root/app/app.img".
(e.g.)run "./ota_pack_tool.sh -c sys -d /root/img_packages/"

OTA 制作差分升级包

可以制作app_inc.zip,middleware_inc.zip,系统差分包与全量差分包(只支持secure镜像)等。使用的OTA配置文件与ota_procee均为new包解压所得。

差分升级作用

节省车机流量,并不节省升级时间。

差分升级原理

利用差分算法,得出新老镜像差分镜像,升级时差分还原到对向分区。(flash介质的镜像不差分,其体积仅数M,且flash读取慢)。差分库:hpatchz。支持的镜像:ota镜像包中的所有非flash介质的镜像。

限制

只支持secure开发板,non-secure的镜像挂载时会改变读写属性,影响MD5码及校验,导致差分升级失败。实际上,非norflash介质的只读分区都可以,需要确保被刷写的分区,在启动后MD5码不变。
-i, -inc
-old
-new

Create an incremental OTA package.
: sys, full, middleware, app ... etc.
,
: ota pack, xxx.zip.
(e.g.)run "./ota_pack_tool.sh -inc app -old /old/app.zip -new /new/app.zip".
# 基于/old/app.zip制作/new/app.zip的差分包app_inc.zip
./ota_pack_tool.sh -inc app -old /old/app.zip -new /new/app.zip
# 基于/old/all_in_one_full_signed.zip制作/new/all_in_one_full_signed.zip的差分包all_in_one_full_signed_inc.zip
./ota_pack_tool.sh -inc full -old /old/all_in_one_full_signed.zip -new /new/all_in_one_full_signed.zip

OTA 制作MCU_ONLY包

名词解释:

  • MCU镜像:泛指服务于MCU,储存介质为norflash的镜像,储存于flash中,如MCU.img,sbl.img,HSM,keyimage等。

  • A核镜像:泛指服务于A核,储存介质为emmc或ufs的镜像,储存于emmc或ufs中,如system.img, boot.img等。

原理:

  1. 增加打包指令:生成只含MCU镜像的OTA升级包。

  2. 升级时:ota刷写MCU镜像到对向slot,ota将未升级的A核镜像拷贝至对向slot。

  3. 升级失败:ota自动切回到原始slot。

具体方案:

只增加打包指令,不修改OTA代码。

打包 MCU_ONLY 包:

  1. ./ota_pack_tool.sh -c mcu -d /root/img_packages/,得到mcu_all_in_one.zip

  2. ./ota_pack_tool.sh -c mcu_signed -d /root/img_packages/,得到mcu_all_in_one_signed.zip

  3. mcu_all_in_one.zip加上"all_in_one"是为了匹配压缩包名称,利用do_system_img()进行压缩包升级。

升级 MCU_ONLY 包:

  1. 升级:与all_ine_one.zip和 all_in_one_singed.zip相同。ota -p xxx.zip.

  2. 镜像匹配问题:OTA不负责,客户需自行确保当前slot的A核镜像与待升级MCU镜像匹配
  3. 刷写MCU镜像后,OTA自动拷贝A核当前slot镜像到对向slot,预防对向slot A核镜像无法启动。

升级失败时:

ota自动切回到原始slot。

算法工具链
社区征文征程6技术深度解析官方教程
评论0
0/1000