<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 征程 6 云端 Ota 升級方案設計與實(shí)現

征程 6 云端 Ota 升級方案設計與實(shí)現

發(fā)布人:地平線(xiàn)開(kāi)發(fā)者 時(shí)間:2024-12-19 來(lái)源:工程師 發(fā)布文章
01 引言


在開(kāi)發(fā)、調測過(guò)程中,經(jīng)常通過(guò) Ota 技術(shù)升級應用軟件、底軟。目前,項目上已將 Matrix6 的 Demo 部署在實(shí)車(chē)上,每次軟件、底軟需要版本更替或版本升級時(shí),都需要研發(fā)測試同學(xué)上到車(chē)上使用工控機進(jìn)行手動(dòng)升級。


這流程存在耗費人力多,花費時(shí)間長(cháng),流程易出錯的問(wèn)題,并且車(chē)輛異地時(shí)遠程操作困難的問(wèn)題。


基于當前現狀,需要基于 Trigger 進(jìn)程、Boyan Ota 組件、底軟 Ota 工具等模塊,實(shí)現一套 Matrix6 云端 Ota 升級方案,具有云端下發(fā)到車(chē)輛實(shí)現 Ota 的全自動(dòng)化流程,代替人工升級的方案。




02 全流程方案設計


基于 Trigger 進(jìn)程、Boyan Ota 組件、底軟 Ota 工具等模塊的 Matrix6 云端 Ota 升級方案的方案設計圖如下。



圖片


通過(guò)模塊、數據鏈路,Matrix6 云端 Ota 升級方案的流程可以被分解成如下步驟:

  1. 本地/CICD 服務(wù)器上構建對應版本的 Ota 升級包。

  2. 上傳 Ota 包到云端系統上。

  3. 研發(fā)測試同學(xué)在云端系統上選擇指定車(chē)輛,觸發(fā)云端 Ota 升級。

  4. 車(chē)云系統與工控機上的 Trigger 模塊交互,將對應的 Ota 升級包下發(fā)給 Trigger。

  5. Trigger 模塊與板端 Ota manager 模塊交互,請求發(fā)起 Ota,并將升級包傳輸到板端。

  6. Ota manager 與板端 SM、EM 模塊交互,切換系統狀態(tài)、關(guān)閉上層應用進(jìn)程。

  7. Ota manger 與 Ota service 模塊交互,下發(fā)升級包給 Ota service,并同事 Ota service 進(jìn)行 ota 升級。

  8. Ota service 對升級包進(jìn)行校驗、解壓等操作,并使用 LibUpdate.so 動(dòng)態(tài)庫進(jìn)行刷寫(xiě)升級。

  9. Ota service 刷寫(xiě)成功后,通過(guò) Ota manager 通知 SM 模塊下電重啟域控。

  10. 域控重啟后,Ota manager 通過(guò) SM/EM 校驗系統是否正常,Ota service 通過(guò) Libupdate.so 動(dòng)態(tài)庫校驗刷寫(xiě)、引導是否正常。

  11. 校驗完成后,Ota manager 與 Trigger 模塊通信,通知 Trigger 模塊本次 Ota 升級結果。

  12. Trigger 模塊將本次 Ota 升級結果上傳到云端,研發(fā)測試同學(xué)確認結果。


在方案開(kāi)發(fā)驗證階段,本文聚焦于 征程 6 Ota 包和 征程 6 板端相關(guān)的流程 1 和流程 4~11,使用 ota 測試工具 manager_client_test 程序代替 trigger 模塊,在板端完成開(kāi)發(fā)測試驗證。



03 構建 Ota 整包


制作底軟 Ota 整包用于 ota 升級(應用包等其他包同流程)。底軟 Ota 整包中包括組件:底軟 ota 包 + 簽名文件 + manifest 文件。各組件作用如下:

  • 底軟 ota 包:用于刷寫(xiě)升級底軟;

  • 簽名文件:用于對 Ota 包的校驗,反正 Ota 包損壞或被篡改等;

  • manifest 文件:用于記錄 Ota 包的相關(guān)升級信息。


組件 a 底軟 ota 包來(lái)源于系統軟件發(fā)布;簽名文件和 manifest 文件需按照 Boyan ota 組件的規則生成。最后將這些組件按照規則壓縮成 zip 包即可。



3.1 獲取底軟 Ota 包


底軟包來(lái)源于系統軟件發(fā)布,詳情見(jiàn)系統軟件 release note。獲取步驟如下:

  1. 判斷 征程 6 域控是 secure/non-secure (國密/國際) 類(lèi)型,判斷指令如下:

[ -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. 根據 國密/國際 類(lèi)型,在 releaser note 文檔 - 發(fā)布鏡像 中下載對應的 OTA 包。

  1. 解壓鏡像包,選擇所需要的 ota 包。ota 包目前分為兩種:all_in_one.zip 和 all_in_one_full.zip。

  • all_in_one.zip:只刷寫(xiě)更新底軟分區,不刷寫(xiě)更新中間件和應用。

  • all_in_one_full.zip:同時(shí)刷寫(xiě)底軟 + 中間件 + 應用分區。


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",                   // 包類(lèi)型
                   "name": "all_in_one_full.zip",      // 包名稱(chēng)
                   "manifest": ""
               }
           ],
           "short_name": "J6A"
       }
   ],
   "scripts": []
}


3.3 制作 Ota 整包


將 ota 包、簽名文件、manifest 文件放到同一目錄下,通過(guò) zip 壓縮獲取壓縮包(保證解壓后 all_in_one 目錄下就有 ota 包等文件)。


操作命令如下:

mkdir all_in_one

mv 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 模塊,在板端完成開(kāi)發(fā)測試驗證。操作步驟如下:

  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:10292
  10.97.109.229:10290
b: 10.97.109.229:10292
  10.97.109.229:10290
c: 127.0.0.1:10292
  127.0.0.1:10290
d: you choose enter ip:port manually!

>> c
  1. 5.輸入 5,訂閱 ota 狀態(tài)變化:

---- 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:

>> 4

enter file path:

>> /map/all_in_one.zip

8.等待 ota 升級到 restart_prepared 狀態(tài)并重啟

---- 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整包


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。




相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>