征程 6 云端 Ota 升级方案设计与实现

01 引言

在开发、调测过程中,经常通过 Ota 技术升级应用软件、底软。目前,项目上已将 Matrix6 的 Demo 部署在实车上,每次软件、底软需要版本更替或版本升级时,都需要研发测试同学上到车上使用工控机进行手动升级。

这流程存在耗费人力多,花费时间长,流程易出错的问题,并且车辆异地时远程操作困难的问题。

基于当前现状,需要基于 Trigger 进程、Boyan Ota 组件、底软 Ota 工具等模块,实现一套 Matrix6 云端 Ota 升级方案,具有云端下发到车辆实现 Ota 的全自动化流程,代替人工升级的方案。

02 全流程方案设计

基于 Trigger 进程、Boyan Ota 组件、底软 Ota 工具等模块的 Matrix6 云端 Ota 升级方案的方案设计图如下。

通过模块、数据链路,Matrix6 云端 Ota 升级方案的流程可以被分解成如下步骤:

  1. 本地/CICD 服务器上构建对应版本的 Ota 升级包。
  2. 上传 Ota 包到云端系统上。
  3. 研发测试同学在云端系统上选择指定车辆,触发云端 Ota 升级。
  4. 车云系统与工控机上的 Trigger 模块交互,将对应的 Ota 升级包下发给 Trigger。
  5. Trigger 模块与板端 Ota manager 模块交互,请求发起 Ota,并将升级包传输到板端。
  6. Ota manager 与板端 SM、EM 模块交互,切换系统状态、关闭上层应用进程。
  7. Ota manger 与 Ota service 模块交互,下发升级包给 Ota service,并同事 Ota service 进行 ota 升级。
  8. Ota service 对升级包进行校验、解压等操作,并使用 LibUpdate.so 动态库进行刷写升级。
  9. Ota service 刷写成功后,通过 Ota manager 通知 SM 模块下电重启域控。
  10. 域控重启后,Ota manager 通过 SM/EM 校验系统是否正常,Ota service 通过 Libupdate.so 动态库校验刷写、引导是否正常。
  11. 校验完成后,Ota manager 与 Trigger 模块通信,通知 Trigger 模块本次 Ota 升级结果。
  12. Trigger 模块将本次 Ota 升级结果上传到云端,研发测试同学确认结果。

在方案开发验证阶段,本文聚焦于 征程 6 Ota 包和 征程 6 板端相关的流程 1 和流程 4~11,使用 ota 测试工具 manager_client_test 程序代替 trigger 模块,在板端完成开发测试验证。

03 构建 Ota 整包

制作底软 Ota 整包用于 ota 升级(应用包等其他包同流程)。底软 Ota 整包中包括组件:底软 ota 包 + 签名文件 + manifest 文件。各组件作用如下:

  • 底软 ota 包:用于刷写升级底软;
  • 签名文件:用于对 Ota 包的校验,反正 Ota 包损坏或被篡改等;
  • manifest 文件:用于记录 Ota 包的相关升级信息。

组件 a 底软 ota 包来源于系统软件发布;签名文件和 manifest 文件需按照 Boyan ota 组件的规则生成。最后将这些组件按照规则压缩成 zip 包即可。

3.1 获取底软 Ota 包

底软包来源于系统软件发布,详情见系统软件 release note。获取步骤如下:

  1. 判断 征程 6 域控是 secure/non-secure (国密/国际) 类型,判断指令如下:
[ -n "$(cat /proc/version_hsm)" ] && echo "secure" || echo "non-secure"; [ -n "$(hexdump -C /dev/block/platform/by-name/HSM_FW -n 1 | grep ad)" ] && echo "国密oscca" || ([ -n "$(hexdump -C /dev/block/platform/by-name/HSM_FW -n 4 | grep 'ed 44 47 14')" ] && echo "国际fips") || ([ -n "$(provision_tool --get-lifecycle | grep LIFECYCLE_OHP)" ] && echo "国际fips ohp") 
  1. 根据 国密/国际 类型,在 releaser note 文档 - 发布镜像 中下载对应的 OTA 包。

  2. 解压镜像包,选择所需要的 ota 包。ota 包目前分为两种:all_in_one.zip 和 all_in_one_full.zip。

  • all_in_one.zip:只刷写更新底软分区,不刷写更新中间件和应用。
  • all_in_one_full.zip:同时刷写底软 + 中间件 + 应用分区。

3.2 制作签名/manifest 文件

签名文件和 manifest 文件模板如下:

  • 签名文件模板:
{"all_in_one_full.zip": "0a12ee6d7c9028c0c50ec4c188acb43b",     // 底软ota包名:md5"vehicle_manifest.json": "9d2075ebc9fcbfaac83d9c67c10e407d"    // manifest文件名:md5
}
  • manifest 文件模板:
{"priority": ["J6A"],"ota_services": [{"packages": [{"version": "V1.0.0",                // 版本号"type": "system",                   // 包类型"name": "all_in_one_full.zip",      // 包名称"manifest": ""}],"short_name": "J6A"}],"scripts": []
}

3.3 制作 Ota 整包

将 ota 包、签名文件、manifest 文件放到同一目录下,通过 zip 压缩获取压缩包(保证解压后 all_in_one 目录下就有 ota 包等文件)。

操作命令如下:

mkdir all_in_onemv src/all_in_one.zip all_in_one/
mv src/signature.json all_in_one/
mv src/vehicle_manifest.json  all_in_one/cd all_in_one
zip ../all_in_one.zip ./*

制作好的 all_in_one.zip 整包就可以用于 ota 升级。

04 Ota 升级测试

4.1 升级测试操作步骤

Ota 测试工具 manager_client_test 程序代替 trigger 模块,在板端完成开发测试验证。操作步骤如下:

  1. 上传 Ota 测试工具 manager_client_test 到板端。
  2. 查看/记录升级前域控的分区面:
ota_tool -g

3.运行模拟测试工具,按照如下步骤操作;

  1. 4.输入 c,选取本机 IP 地址:
enter num to choose ip:port
a: 10.97.109.229:1029210.97.109.229:10290
b: 10.97.109.229:1029210.97.109.229:10290
c: 127.0.0.1:10292127.0.0.1:10290
d: you choose enter ip:port manually!>> c
  1. 5.输入 5,订阅 ota 状态变化:
---- cmd list ----
1: Get upgrade info
2: Cancel
3: Prepared upgrade
4: TransferFile
5: Subscribe manager state change
6: UnSubscribe manager state change
7: GetSwClusterInfo
8: Subscribe manager error code
9: UnSubscribe manager error code
10: Get all services's history
11: shake hands to manager
Enter cmd:>> 5
  1. 输入 3,准备 ota 升级
---- cmd list ----
1: Get upgrade info
2: Cancel
3: Prepared upgrade
4: TransferFile
5: Subscribe manager state change
6: UnSubscribe manager state change
7: GetSwClusterInfo
8: Subscribe manager error code
9: UnSubscribe manager error code
10: Get all services's history
11: shake hands to manager
Enter cmd:>> 3

7.输入 4,传输文件,并输入 ota 包的绝对路径:

---- cmd list ----
1: Get upgrade info
2: Cancel
3: Prepared upgrade
4: TransferFile
5: Subscribe manager state change
6: UnSubscribe manager state change
7: GetSwClusterInfo
8: Subscribe manager error code
9: UnSubscribe manager error code
10: Get all services's history
11: shake hands to manager
Enter cmd:>> 4enter file path:>> /map/all_in_one.zip

8.等待 ota 升级到 restart_prepared 状态并重启

---- cmd list ----
1: Get upgrade info
2: Cancel
3: Prepared upgrade
4: TransferFile
5: Subscribe manager state change
6: UnSubscribe manager state change
7: GetSwClusterInfo
8: Subscribe manager error code
9: UnSubscribe manager error code
10: Get all services's history
11: shake hands to manager
Enter cmd:
recv manager state change to :transferring
[I][1896-1918][01-01][08:03:22:096][OTAM][manager_client_test][ota_manager_client_impl.cpp:196] current state is transferring
recv manager state change to :processing
[I][1896-1918][01-01][08:03:24:399][OTAM][manager_client_test][ota_manager_client_impl.cpp:196] current state is processing
recv manager state change to :restart_preparing
[I][1896-1918][01-01][08:05:04:716][OTAM][manager_client_test][ota_manager_client_impl.cpp:196] current state is restart_preparing
recv manager state change to :restart_prepared
[I][1896-1918][01-01][08:05:07:823][OTAM][manager_client_test][ota_manager_client_impl.cpp:196] current state is restart_prepared

9.查看 Ota_manager 的日志,确认是否验证-激活 成功

10.查看/记录升级后域控的分区面:

ota_tool -g

4.2 升级测试操作结果

  1. 升级前,处于 B 面:
root@hobot:~# ota_tool -g
[OTA_INFO][hobot_ota_hl.c:471] current slot is:B

2.Ota_manager 日志:

[I][1568-1850][01-01][09:07:33:638323][ota_service][OTAS][upgrade.cpp:262] get progress:85
[I][1568-1850][01-01][09:07:33:638343][ota_service][OTAS][upgrade.cpp:319] get result success,result:1
[I][1568-1850][01-01][09:07:43:638439][ota_service][OTAS][upgrade.cpp:262] get progress:85
[I][1568-1850][01-01][09:07:43:638466][ota_service][OTAS][upgrade.cpp:319] get result success,result:1
[I][1568-1850][01-01][09:07:53:648403][ota_service][OTAS][upgrade.cpp:262] get progress:100
[I][1568-1850][01-01][09:07:53:648427][ota_service][OTAS][service_state_delegate.cpp:343] Upgrade success

3.升级后,处于 A 面:

root@hobot:~# ota_tool -g
[OTA_INFO][hobot_ota_hl.c:468] current slot is:A3. 构建Ota整包

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855583.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vxe-table 树表格新增数据,插入指定节点位置操作

vxe-table 新增数据,插入指定节点位置操作 官网:https://vxetable.cn npm install vxe-pc-ui@4.3.37 vxe-table@4.9.31// ... import VxeUI from vxe-pc-ui import vxe-pc-ui/lib/style.css import VxeUITable from vxe-table import vxe-table/lib/style.css // ...createAp…

less5

1.在URL处输入 ?id=1 ?id=1 ?id=1" ?id=1/1发现回显只有you are in......和报错 报错:判断回显是布尔类型 使用order by发现回显有三栏 ?id=1 order by 4%23 ?id=1 order by 1%23 ?id=1 order by 3%23判断数据库长度:8位 ?id=1 and length((select database()))&g…

Java-递归查询部门下所有子部门(包括本部门)

Java-递归查询部门下所有子部门(包括本部门),会得到一个部门id的集合:List deptIds具体代码如下: //递归1public List<Long> queryAllSubInstitutionIds(Long institutionId) {List<Long> subInstitutionIds = new ArrayList<>();querySubInstitutionIds…

生物医学信息

生物信息学基础 生物医学信息学的概念的掌握生物信息学很大一部分工作体现在生物数据的收集、存储、管理与提供 利用多组学数据(基因组,转录组,表观遗传组、蛋白组等)和机器学习、数据挖掘的方法 ,挖掘潜在的生物学、医学的知识和模式,用于解决诊断和治疗。中心法则是什么…

5、导出表

5、导出表 typedef struct _IMAGE_EXPORT_DIRECTORY {DWORD Characteristics;DWORD TimeDateStamp;WORD MajorVersion;WORD MinorVersion;DWORD Name; // 指向 导出表的文件名DWORD Base; // 导出函数的起始序号DWORD NumberOfFunctions; // 所有导…

4、文件与内存转换相关

4、文件与内存转换相关 FileBufferToImageBuffer 也是一样的长话短说。这里涉及了一点,就是内存对齐 PE头与节区之间 节区与节区时间会发生内存对齐。在文件中有一个文件对齐 ​​ 在可选PE头中有这两个进行标识,之前也写过这个内存对齐的博客,这里就不多说了 下面贴几个代…

1、PE 初识

1、PE 初识 概论 首先 PE头部分主要是学习PE结构的前半部分,每一个是做什么的,以及重点是什么,每一个是做什么用的。并使用Cpp代码来解析该PE头 注意这里用了一个Windows.h的头文件,后面再说。 PE是Windows系统 PE结构(Portable Executable),即可移植可执行文件格式,是…

交换空间swap

交换空间: 交换空间是硬盘上的一部分,被用作虚拟内存,当系统的物理内存(RAM)不足时,系统会使用交换空间来存储暂时不用的数据。1.关闭交换空间 1)关闭所有交换空间 swapoff -a2)关闭特定的交换空间 swapoff /dev/sdb12.开启交换空间 1)开启所有交换空间 swapon -a2…

2024 IDEA 2024.3 安装使用教程(附激活至2099年,以及常见问题处理)

IntelliJ IDEA简介 IntelliJ IDEA是一款非常强大的Java集成开发环境(IDE),由JetBrains公司开发。它提供了丰富的功能和工具,帮助开发者更高效地编写、调试和部署代码。 下面这种方式仅供交流学习,如果有能力还请支持正版 下载安装 下载 IDEA 2024.3 版本的安装包 为了方便,也…

第十六次作业

1、通过华为云沃土云创计划免费薅云服务器 打开链接:https://developer.huaweicloud.com/programs/dev-program.html 使能⽅向选择个⼈在这个 计划权益中申请优惠券免费购买成功2、复现windows、linux权限维持技巧 windows权限维持: 隐藏⽂件:利⽤⽂件属性 ⽂件右键属性,勾…

OpenCL 编程步骤 2. 获取设备

clGetDeviceIDs 查询支持OpenCL设备列表: cl_int clGetDeviceIDs(cl_platform_id platform ,cl_device_type device_type ,cl_uint num_entries ,cl_device_id *devices ,cl_uint *num_devices )与clGetPlatformIDs函数类似,第一次调用时,devic…

记录一下:小华半导体HC32F448建立MDK工程

1.先到官网上下载文件 a>下载驱动库:HC32F448_DDL_Rev1.1.0.zip 驱动库中是包括了例程的。 b>下载样例:HC32F448_Template_Rev1.0.1.zip 可以直接复制官方的样例,就不用自己创建工程了。 c>下载芯片支持包:HC32F448_IDE_Rev1.0.1.zip 下载后双击安装即可。否则KEI…