特斯拉的OTA升級過程大致可由幾個關鍵步驟描述。
1)OTA過程云端通過特斯拉自有的握手協議下發固件下載地址后,特斯拉中控屏上的cid-updater會從云端下載固件,進行解密并校驗其完整性
通過類似于A/B Update的方式,車內其他強運算力的聯網組件(如IC、APE等)根據cid-updater提供的固件文件進行升級。
CID-updater還會負責根據固件包中的目錄信息與車輛配置做比照,據此產生release.tgz文件,并和升級軟件boot.img一同提供給網關。然后網關執行上述升級軟件,更新在網關上連接的二十余個ECU。
備注:Tesla的OTA機制中的一些關鍵文件,boot.img和release.tgz,負責向ECU提供固件。 這些文件無法直接在特斯拉服務器發布的更新包中找到,關于如何從特斯拉的服務器獲取更新包以及汽車方面的整個更新過程仍然不清楚,這個過程仍未公開。
1)整車企業的云端:握手和固件包(FIRMWARE BUNDLE)
特斯拉有一個OTA框架,完成OTA程序需要這些模塊:
Message box
Firmware gathering
Job management
大多數模塊放在CID上的QtCar和QtCarServer中,作為云代理的一部分。 一旦建立了可信通道,代理就會設置一個端口,遠程服務器可以將消息直接推送到汽車。必要時將從服務器端消息框中提取未讀消息。 在OTA更新期間,這些代理主要用來傳遞信息,而不是執行實際更新操作。
FOTA過程以消息開頭,開始的時候用帶有命令initiate_firmware_handshake的消息,收到消息后,代理會將握手命令發送到cid-updater,與服務器進行握手。 握手期間需要執行以下步驟:
cid-updater把整車的硬件配置字符串和package_signature一起發送到遠程服務器,package_signature是根據整車ECU現有版本生成
整車企業的云端(固件服務器)將驗證該信息,根據當前版本提供固件包(FIRMWARE BUNDLE),包括固件包的下載地址、校驗和和解密信息。 SquashFS包含除了Autopilot以外的其他所有ECU文件
固件包通過CDN加密渠道分發,cid-updater會進行下載、驗證和解密
一旦提供了合法固件,cid-updater根據汽車配置收集正確的文件,并將這些文件分發到汽車的ECU內。 在OTA更新過程中,作業管理器負責向遠程服務器報告當前狀態和錯誤信息, 每個更新作業都有一個用于跟蹤使用情況的作業ID。
2)車輛端:以太網連接的ECU
中控臺和儀表盤是特斯拉車中兩個主要的更新組建,都有一個名為cid-updater和ic-updater的updater守護進程,這些二進制文件之間共享了一些代碼,但這兩個守護進程的主要目的是不同的。
cid-updater負責在可靠的通信通道建立后與遠程服務器通信,獲取固件包,并提供必要的文件和信息作為輔助服務器,
ic-updater則專注于更新儀表盤本身。可將cid-updater視為本地服務器,ic-updater視為遠程代理。
cid-updater和ic-updater都有一個名為command_service_listener的服務,此服務將打開一個端口,服務器可以執行RPC直接調用代理上的函數。一旦準備好所有內容,代理將使用此服務獲取客戶端的更新代理。服務器使用以下過程控制遠程代理:
1.遠程單元將停止所有其他工作并準備好gostaged,會嘗試下載目標的文件包。
2.本地服務器啟動HTTP服務器并提供更新文件,文件準備好后,將通知遠程代理。
3.遠程代理下載更新文件,下載文件并驗證其簽名后,更新程序將進行分段
4.將更新文件刷入ECU,對于儀表盤來說
假設當前在Part A運行
將新的rootfs圖像和DTB刷入 Part B
將新的Kernal寫入Part B
將主引導鏈和恢復引導鏈切換到Part B
檢查引導鏈以確保下次引導是可接受的
完成所有這些操作后,設備將處于暫停和非活動狀態。
5.經過最后的準備工作后,設備將重新啟動:代理和服務器之間將持續連接,服務器可以獲得有關當前更新狀態的最新信息
3)車輛端:網關轉換的CAN總線ECU
這些ECU的更新文件存儲在文件夾(squashfs-root)/ deploy / seed_artifacts_v2中 :boot.img、release_version.txt 、version_map2.tsv和Signed_metadata_map.tsv、internal_option_defaults.tsv、ECUNAME/, like esp/, gtw/ etc
boot.img文件在升級時運行,并從release.tgz讀取固件文件。 boot.img包含一個簽名,在其原始EOF之后填充。 發送更新命令時,將檢查此簽名是否通過公鑰驗證。
Boot.img中的一個重要步驟是讀取固件包release.tgz,包含網關用來更新相應ECU的所有文件,每個ECU只有一個固件文件。 從ECUNAME / PROVIDERID / ECUFWNAME.hex復制特定的固件文件。 在打包tar文件時,cid-updater從網關獲取ECU信息和汽車信息,并根據signed_metadata_map.tsv中的表選擇正確的PROVIDERID,文件格式如下:
以下是刷寫ECU的關鍵步驟:
1.制作固件包,cid-updater將從網關獲得最新的ECU硬件信息。對于每個ECU,cid-updater將搜索signed_metadata_map.tsv以查看哪條線與當前汽車具有相同的Requirements字段。找到后,它會將PATH_TO_FILE中的文件復制到名為New_name的tar文件中。為了簡化更新包,cid-updater只會將signed_metadata_map.tsv中的相應行復制到release.tgz中具有相同名稱的文件中。
2.根據更新模式,在SD卡中創建UPD文件, updater讀取此文件以了解其當前狀態。
3.更新程序boot.img上傳到SD卡,并使用文件名重新啟動。
當updater執行時,未修改的boot.img將每個文件讀入內存,使用signed_metadata_map.tsv中相應行中的前幾個字段填充,并使用符號值和啟動時保存的公鑰驗證其簽名.IMG。更新程序一旦找到不正確的固件文件就會退出,更新將導致失敗。所有簽名和散列算法都使用帶有SHA512的Ed25519,并仔細選擇所有公鑰和常量。
-
特斯拉
+關注
關注
66文章
6311瀏覽量
126545 -
OTA
+關注
關注
7文章
578瀏覽量
35194
原文標題:特斯拉的OTA升級過程
文章出處:【微信號:QCDZSJ,微信公眾號:汽車電子設計】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論