余楚禮 夏鵬 齊同啟 馬敬德
(天津清源電動車輛有限責任公司)
根據(jù)GB/T 32960—2016《電動汽車遠程服務與管理系統(tǒng)技術規(guī)范》[1]要求,電動汽車需要配備車聯(lián)網(wǎng)終端,用于監(jiān)控車輛的運行狀態(tài)、故障狀態(tài)、電池狀態(tài)、電機狀態(tài)及運行里程等信息。由于監(jiān)控需求的變化,車聯(lián)網(wǎng)終端的軟件和配置文件的更新是必須的。傳統(tǒng)的車載電控單元的更新方法是使用串口或者CAN卡逐臺更新[2],效率低下,會消耗大量的人力物力。車聯(lián)網(wǎng)終端本身是可以和服務器進行通信的,因此讓車聯(lián)網(wǎng)直接聯(lián)網(wǎng)更新自身軟件程序和配置文件是完全可行的。車聯(lián)網(wǎng)終端設計和平臺設計相關的研究很多[3-7],但是車聯(lián)網(wǎng)終端的遠程更新相關的研究很少。文章設計了一種更新系統(tǒng),讓車聯(lián)網(wǎng)終端能借助4G網(wǎng)絡對自身固件進行更新。由于網(wǎng)絡傳輸和數(shù)據(jù)存儲過程中的不可靠性,數(shù)據(jù)的每一步確認都使用了md5校驗,來確保刷寫到終端程序的完整性。

系統(tǒng)由車載終端、服務器及PC客戶端3個部分組成,這3個部分完成固件更新的整體進程如下。
1)PC客戶端將開發(fā)人員持續(xù)完善的新固件程序傳輸?shù)椒掌鳎瑫r發(fā)送固件程序數(shù)據(jù)的md5校驗碼和版本號。服務器接收PC客戶端的新固件程序數(shù)據(jù)和md5校驗碼,并計算接收到的新固件程序數(shù)據(jù)的md5校驗碼,核對無誤后將固件程序數(shù)據(jù)、md5校驗碼及版本號存入到數(shù)據(jù)庫。
2)服務器接收終端的登錄請求和終端的版本信息,比較版本號,如果版本號不一致,發(fā)送更新的指令。
3)終端接收服務器發(fā)送的固件程序數(shù)據(jù)存入到閃存中,接收md5校驗碼和版本號存入到閃存中,計算固件程序數(shù)據(jù)的md5校驗碼,核對無誤后設置更新標志。
4)終端重啟,讀取更新標志,如果需要更新,計算閃存中新固件程序數(shù)據(jù)的md5校驗碼,核對無誤后刷寫終端的程序閃存更新固件,并更新版本號,清除更新標志。
由于固件更新過程中要進行多次的傳輸和寫入,因此為了確保數(shù)據(jù)的完整性,采用了md5校驗的方法保證數(shù)據(jù)的完整性。
md5是計算機安全領域廣泛使用的一種散列函數(shù),用以提供消息的完整性保護。md5算法具有4個特點:1)壓縮性。任意長度的數(shù)據(jù),算出的md5值長度都是固定的。2)容易計算。從原數(shù)據(jù)計算出md5值很容易。3)抗修改性。對原數(shù)據(jù)進行任何改動,哪怕只修改1個字節(jié),所得到的md5值都有很大區(qū)別。4)強抗碰撞。已知原數(shù)據(jù)和其md5值,想找到一個具有相同md5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。
基于以上原因,md5能夠保證數(shù)據(jù)的完整性。
現(xiàn)代的汽車電控單元一般都會設計Boot Loader程序,Boot Loader程序的作用是用來更新固件程序和引導進入固件程序。
車聯(lián)網(wǎng)終端的程序由Boot Loader程序和固件程序兩部分組成,啟動過程如下。
1)Boot Loader程序首先從閃存讀取固件升級標志位。如果沒有更新要求,直接跳轉到步驟3)。
2)讀取存儲在閃存上的固件,計算md5,并和存儲在閃存上的md5進行比較,如果相同,進行固件更新,在固件程序更新完成后,清除固件程序更新標志位;如果md5校驗失敗,不進行固件更新,直接清除固件更新標志位,跳轉到固件程序。
3)固件程序開啟CAN卡、GPS模塊及4G模塊。通過4G模塊連接服務器,連接成功后發(fā)送Sim卡的iccid卡號進行登錄。登錄成功后,發(fā)送當前固件版本信息,接收服務器端的反饋信息。如果服務器不要求更新固件,按照文獻[1]的要求周期發(fā)送相關信息。如果服務器要求更新固件,則固件程序接收數(shù)據(jù)和md5校驗碼,寫入到閃存中,核對無誤后設置更新標志。待下次上電后,Boot Loader程序檢查更新標志,如果更新標志被設置了,則刷寫程序Fl ash更新固件程序。
車聯(lián)網(wǎng)終端程序的流程,如圖1所示。

圖1 車聯(lián)網(wǎng)終端啟動流程圖
PC客戶端負責將新版固件程序傳送到服務器。PC客戶端的程序流程如下:
1)載入包含新固件程序的文件,計算md5校驗碼;
2)請求服務器接收新固件;
3)發(fā)送新固件程序的數(shù)據(jù)、md5校驗碼及版本號到服務器;
4)接收服務器的反饋,完成更新過程。
PC客戶端運行流程,如圖2所示;PC客戶端操作顯示界面,如圖3所示。

圖2 PC客戶端運行流程圖

圖3 PC客戶端操作顯示界面
客戶端選擇Load File載入數(shù)據(jù)后,填入新的版本號,選擇Update后即可以將新固件程序寫入到服務器數(shù)據(jù)庫,當終端連接服務器時完成更新。
服務器端相關程序分為兩部分。
第1部分是響應PC客戶端的固件更新命令,具體流程:1)接收到PC客戶端固件程序更新請求,命令PC客戶端發(fā)送相關數(shù)據(jù);2)接收PC客戶端發(fā)送的新固件程序數(shù)據(jù)、md5校驗碼及版本號;3)計算新固件程序數(shù)據(jù)的md5,核對無誤后寫入到數(shù)據(jù)庫;4)通知PC客戶端新固件程序更新成功。
服務器端響應PC客戶端的運行流程,如圖4所示。

圖4 服務器端響應PC客戶端的運行流程圖
第2部分程序是響應車聯(lián)網(wǎng)終端的,具體流程:1)響應車聯(lián)網(wǎng)終端的登錄請求,如果身份驗證合格,接收連接;2)接收車聯(lián)網(wǎng)終端的版本信息數(shù)據(jù),并與服務器端數(shù)據(jù)庫內的版本數(shù)據(jù)進行比對,告知車聯(lián)網(wǎng)終端是否需要更新;3)如果無需更新,直接按照GB/T 32960的要求執(zhí)行;4)如果需要更新,發(fā)送新固件程序數(shù)據(jù)、md5校驗碼及版本號到車聯(lián)網(wǎng)終端。
服務器端響應車聯(lián)網(wǎng)終端的運行流程,如圖5所示。

圖5 服務器端響應車聯(lián)網(wǎng)終端的運行流程圖
文章基于GB/T 32960設計了車聯(lián)網(wǎng)終端的固件自更新系統(tǒng),實際測試顯示固件程序更新系統(tǒng)運行穩(wěn)定可靠。由于使用4G模塊進行聯(lián)網(wǎng)下載,徹底擺脫了人力干預,無需車主去售后服務站進行固件更新,減輕了售后服務站的工作難度;同時固件程序的更新能夠做到更及時以便修復潛在的bug。因為固件程序的安全要求很高,整個更新的過程中進行了4次md5計算校驗,確保寫入到車聯(lián)網(wǎng)終端上的固件程序的完整性。