熟女俱乐部五十路二区av,又爽又黄禁片视频1000免费,国产卡一卡二卡三无线乱码新区,中文无码一区二区不卡αv,中文在线中文a

"); //-->

博客專欄

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

征程 6 云端 Ota 升級方案設(shè)計與實現(xiàn)

發(fā)布人:地平線開發(fā)者 時間:2024-12-19 來源:工程師 發(fā)布文章
01 引言


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


這流程存在耗費人力多,花費時間長,流程易出錯的問題,并且車輛異地時遠程操作困難的問題。


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




02 全流程方案設(shè)計


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



圖片


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

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

  2. 上傳 Ota 包到云端系統(tǒng)上。

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

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

  5. Trigger 模塊與板端 Ota manager 模塊交互,請求發(fā)起 Ota,并將升級包傳輸?shù)桨宥恕?/span>

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

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

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

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

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

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

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


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



03 構(gòu)建 Ota 整包


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

  • 底軟 ota 包:用于刷寫升級底軟;

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

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


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



3.1 獲取底軟 Ota 包


底軟包來源于系統(tǒng)軟件發(fā)布,詳情見系統(tǒng)軟件 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. 根據(jù) 國密/國際 類型,在 releaser note 文檔 - 發(fā)布鏡像 中下載對應(yīng)的 OTA 包。

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

  • all_in_one.zip:只刷寫更新底軟分區(qū),不刷寫更新中間件和應(yīng)用。

  • all_in_one_full.zip:同時刷寫底軟 + 中間件 + 應(yīng)用分區(qū)。


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

  1. 上傳 Ota 測試工具 manager_client_test 到板端。

  2. 查看/記錄升級前域控的分區(qū)面:

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.查看/記錄升級后域控的分區(qū)面:

ota_tool -g


4.2 升級測試操作結(jié)果


  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. 構(gòu)建Ota整包


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




相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉