余楚禮 夏鵬 齊同啟 馬敬德
(天津清源電動車輛有限責(zé)任公司)
根據(jù)GB/T 32960—2016《電動汽車遠(yuǎn)程服務(wù)與管理系統(tǒng)技術(shù)規(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)終端本身是可以和服務(wù)器進(jìn)行通信的,因此讓車聯(lián)網(wǎng)直接聯(lián)網(wǎng)更新自身軟件程序和配置文件是完全可行的。車聯(lián)網(wǎng)終端設(shè)計和平臺設(shè)計相關(guān)的研究很多[3-7],但是車聯(lián)網(wǎng)終端的遠(yuǎn)程更新相關(guān)的研究很少。文章設(shè)計了一種更新系統(tǒng),讓車聯(lián)網(wǎng)終端能借助4G網(wǎng)絡(luò)對自身固件進(jìn)行更新。由于網(wǎng)絡(luò)傳輸和數(shù)據(jù)存儲過程中的不可靠性,數(shù)據(jù)的每一步確認(rèn)都使用了md5校驗,來確保刷寫到終端程序的完整性。
系統(tǒng)由車載終端、服務(wù)器及PC客戶端3個部分組成,這3個部分完成固件更新的整體進(jìn)程如下。
1)PC客戶端將開發(fā)人員持續(xù)完善的新固件程序傳輸?shù)椒?wù)器,同時發(fā)送固件程序數(shù)據(jù)的md5校驗碼和版本號。服務(wù)器接收PC客戶端的新固件程序數(shù)據(jù)和md5校驗碼,并計算接收到的新固件程序數(shù)據(jù)的md5校驗碼,核對無誤后將固件程序數(shù)據(jù)、md5校驗碼及版本號存入到數(shù)據(jù)庫。
2)服務(wù)器接收終端的登錄請求和終端的版本信息,比較版本號,如果版本號不一致,發(fā)送更新的指令。
3)終端接收服務(wù)器發(fā)送的固件程序數(shù)據(jù)存入到閃存中,接收md5校驗碼和版本號存入到閃存中,計算固件程序數(shù)據(jù)的md5校驗碼,核對無誤后設(shè)置更新標(biāo)志。
4)終端重啟,讀取更新標(biāo)志,如果需要更新,計算閃存中新固件程序數(shù)據(jù)的md5校驗碼,核對無誤后刷寫終端的程序閃存更新固件,并更新版本號,清除更新標(biāo)志。
由于固件更新過程中要進(jìn)行多次的傳輸和寫入,因此為了確保數(shù)據(jù)的完整性,采用了md5校驗的方法保證數(shù)據(jù)的完整性。
md5是計算機安全領(lǐng)域廣泛使用的一種散列函數(shù),用以提供消息的完整性保護。md5算法具有4個特點:1)壓縮性。任意長度的數(shù)據(jù),算出的md5值長度都是固定的。2)容易計算。從原數(shù)據(jù)計算出md5值很容易。3)抗修改性。對原數(shù)據(jù)進(jìn)行任何改動,哪怕只修改1個字節(jié),所得到的md5值都有很大區(qū)別。4)強抗碰撞。已知原數(shù)據(jù)和其md5值,想找到一個具有相同md5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。
基于以上原因,md5能夠保證數(shù)據(jù)的完整性。
現(xiàn)代的汽車電控單元一般都會設(shè)計Boot Loader程序,Boot Loader程序的作用是用來更新固件程序和引導(dǎo)進(jìn)入固件程序。
車聯(lián)網(wǎng)終端的程序由Boot Loader程序和固件程序兩部分組成,啟動過程如下。
1)Boot Loader程序首先從閃存讀取固件升級標(biāo)志位。如果沒有更新要求,直接跳轉(zhuǎn)到步驟3)。
2)讀取存儲在閃存上的固件,計算md5,并和存儲在閃存上的md5進(jìn)行比較,如果相同,進(jìn)行固件更新,在固件程序更新完成后,清除固件程序更新標(biāo)志位;如果md5校驗失敗,不進(jìn)行固件更新,直接清除固件更新標(biāo)志位,跳轉(zhuǎn)到固件程序。
3)固件程序開啟CAN卡、GPS模塊及4G模塊。通過4G模塊連接服務(wù)器,連接成功后發(fā)送Sim卡的iccid卡號進(jìn)行登錄。登錄成功后,發(fā)送當(dāng)前固件版本信息,接收服務(wù)器端的反饋信息。如果服務(wù)器不要求更新固件,按照文獻(xiàn)[1]的要求周期發(fā)送相關(guān)信息。如果服務(wù)器要求更新固件,則固件程序接收數(shù)據(jù)和md5校驗碼,寫入到閃存中,核對無誤后設(shè)置更新標(biāo)志。待下次上電后,Boot Loader程序檢查更新標(biāo)志,如果更新標(biāo)志被設(shè)置了,則刷寫程序Fl ash更新固件程序。
車聯(lián)網(wǎng)終端程序的流程,如圖1所示。
圖1 車聯(lián)網(wǎng)終端啟動流程圖
PC客戶端負(fù)責(zé)將新版固件程序傳送到服務(wù)器。PC客戶端的程序流程如下:
1)載入包含新固件程序的文件,計算md5校驗碼;
2)請求服務(wù)器接收新固件;
3)發(fā)送新固件程序的數(shù)據(jù)、md5校驗碼及版本號到服務(wù)器;
4)接收服務(wù)器的反饋,完成更新過程。
PC客戶端運行流程,如圖2所示;PC客戶端操作顯示界面,如圖3所示。
圖2 PC客戶端運行流程圖
圖3 PC客戶端操作顯示界面
客戶端選擇Load File載入數(shù)據(jù)后,填入新的版本號,選擇Update后即可以將新固件程序?qū)懭氲椒?wù)器數(shù)據(jù)庫,當(dāng)終端連接服務(wù)器時完成更新。
服務(wù)器端相關(guān)程序分為兩部分。
第1部分是響應(yīng)PC客戶端的固件更新命令,具體流程:1)接收到PC客戶端固件程序更新請求,命令PC客戶端發(fā)送相關(guān)數(shù)據(jù);2)接收PC客戶端發(fā)送的新固件程序數(shù)據(jù)、md5校驗碼及版本號;3)計算新固件程序數(shù)據(jù)的md5,核對無誤后寫入到數(shù)據(jù)庫;4)通知PC客戶端新固件程序更新成功。
服務(wù)器端響應(yīng)PC客戶端的運行流程,如圖4所示。
圖4 服務(wù)器端響應(yīng)PC客戶端的運行流程圖
第2部分程序是響應(yīng)車聯(lián)網(wǎng)終端的,具體流程:1)響應(yīng)車聯(lián)網(wǎng)終端的登錄請求,如果身份驗證合格,接收連接;2)接收車聯(lián)網(wǎng)終端的版本信息數(shù)據(jù),并與服務(wù)器端數(shù)據(jù)庫內(nèi)的版本數(shù)據(jù)進(jìn)行比對,告知車聯(lián)網(wǎng)終端是否需要更新;3)如果無需更新,直接按照GB/T 32960的要求執(zhí)行;4)如果需要更新,發(fā)送新固件程序數(shù)據(jù)、md5校驗碼及版本號到車聯(lián)網(wǎng)終端。
服務(wù)器端響應(yīng)車聯(lián)網(wǎng)終端的運行流程,如圖5所示。
圖5 服務(wù)器端響應(yīng)車聯(lián)網(wǎng)終端的運行流程圖
文章基于GB/T 32960設(shè)計了車聯(lián)網(wǎng)終端的固件自更新系統(tǒng),實際測試顯示固件程序更新系統(tǒng)運行穩(wěn)定可靠。由于使用4G模塊進(jìn)行聯(lián)網(wǎng)下載,徹底擺脫了人力干預(yù),無需車主去售后服務(wù)站進(jìn)行固件更新,減輕了售后服務(wù)站的工作難度;同時固件程序的更新能夠做到更及時以便修復(fù)潛在的bug。因為固件程序的安全要求很高,整個更新的過程中進(jìn)行了4次md5計算校驗,確保寫入到車聯(lián)網(wǎng)終端上的固件程序的完整性。