J6X OTA 打包工具
OTA 打包工具介绍
> 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 制作升级包会用到的私钥
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 升级包解包与重打包
升级包解包:
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 制作普通升级包
-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介质的镜像。
限制
-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等。
原理:
增加打包指令:生成只含MCU镜像的OTA升级包。
升级时:ota刷写MCU镜像到对向slot,ota将未升级的A核镜像拷贝至对向slot。
升级失败:ota自动切回到原始slot。
具体方案:
只增加打包指令,不修改OTA代码。
打包 MCU_ONLY 包:
./ota_pack_tool.sh -c mcu -d /root/img_packages/,得到mcu_all_in_one.zip
./ota_pack_tool.sh -c mcu_signed -d /root/img_packages/,得到mcu_all_in_one_signed.zip
mcu_all_in_one.zip加上"all_in_one"是为了匹配压缩包名称,利用do_system_img()进行压缩包升级。
升级 MCU_ONLY 包:
升级:与all_ine_one.zip和 all_in_one_singed.zip相同。ota -p xxx.zip.
- 镜像匹配问题:OTA不负责,客户需自行确保当前slot的A核镜像与待升级MCU镜像匹配。
- 刷写MCU镜像后,OTA自动拷贝A核当前slot镜像到对向slot,预防对向slot A核镜像无法启动。
升级失败时:
ota自动切回到原始slot。
