劉志軍、顧睿、黃若瓊
(上汽通用五菱汽車(chē)股份有限公司 545007)
當(dāng)今車(chē)輛從設(shè)計(jì)到發(fā)售的周期越來(lái)越短,過(guò)短的開(kāi)發(fā)周期導(dǎo)致發(fā)動(dòng)機(jī)控制單元ECU軟件中難免出現(xiàn)安全漏洞。通過(guò)OTA技術(shù),整車(chē)廠商能夠遠(yuǎn)程進(jìn)行ECU開(kāi)發(fā)調(diào)試、數(shù)據(jù)標(biāo)定、文件更新和故障診斷等操作。相較于傳統(tǒng)刷寫(xiě)ECU的方式,利用OTA技術(shù)進(jìn)行ECU刷寫(xiě)高效便捷,能夠大大降低售后成本。
空中下載技術(shù)(Over-The-Air)是一種成熟的無(wú)線通信技術(shù),最早被運(yùn)用在移動(dòng)通信領(lǐng)域。OTA技術(shù)步入汽車(chē)行業(yè)較晚,主要原因是汽車(chē)產(chǎn)品發(fā)布周期相比移動(dòng)智能設(shè)備要長(zhǎng),消費(fèi)者更新?lián)Q代的時(shí)間也更長(zhǎng)。同時(shí)汽車(chē)安全涉及人的生命財(cái)產(chǎn)安全,相關(guān)法律法規(guī)的制定遠(yuǎn)比技術(shù)發(fā)展要慢。
圖1 ECU遠(yuǎn)程刷寫(xiě)用例圖
OTA功能架構(gòu)建立在車(chē)聯(lián)網(wǎng)體系中,主要由云服務(wù)器端、車(chē)輛端、用戶(hù)和OEM組成。圖1是進(jìn)行ECU遠(yuǎn)程刷寫(xiě)的應(yīng)用示例圖。
服務(wù)器的作用是負(fù)責(zé)數(shù)據(jù)收集、數(shù)據(jù)存儲(chǔ),以及提供數(shù)據(jù)分析挖掘的基礎(chǔ)規(guī)范接口[1]。在需要對(duì)大量數(shù)據(jù)進(jìn)行存儲(chǔ)和處理的情況下,自行組建服務(wù)器平臺(tái)并對(duì)服務(wù)器硬件、軟件進(jìn)行定期的維護(hù)往往價(jià)格高昂,因此租用云服務(wù)器是一種不錯(cuò)的解決方案。
2.1.1 云服務(wù)器部署
云服務(wù)器架構(gòu)如圖2所示。云服務(wù)器主要由OTA服務(wù)器、公鑰基礎(chǔ)設(shè)施(PKI)服務(wù)器、統(tǒng)一通訊端口服務(wù)器和內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)服務(wù)器構(gòu)成。
OTA服務(wù)器主要由分布式存儲(chǔ)服務(wù)器組成,通過(guò)虛擬化技術(shù)劃分為3種類(lèi)型服務(wù)器:存儲(chǔ)更新數(shù)據(jù)和更新數(shù)據(jù)的版本信息;存儲(chǔ)ECU軟件及ECU軟件的版本信息;存儲(chǔ)車(chē)輛信息,例如車(chē)型、VIN、遠(yuǎn)程信息處理器(T-Box)序列、ECU相關(guān)數(shù)據(jù)以及車(chē)輛升級(jí)狀態(tài)等。
圖2 OTA功能系統(tǒng)架構(gòu)圖
OTA服務(wù)器通過(guò)統(tǒng)一通訊端口服務(wù)器來(lái)完成更新數(shù)據(jù)的下發(fā)。
CDN服務(wù)器負(fù)責(zé)轉(zhuǎn)發(fā)相關(guān)的ECU軟件更新包到車(chē)輛端,最終在車(chē)輛端完成ECU軟件的升級(jí)。
PKI服務(wù)器對(duì)證書(shū)進(jìn)行公鑰管理,通過(guò)第三方可信任機(jī)構(gòu),把公鑰和用戶(hù)標(biāo)識(shí)信息捆綁在一起。通過(guò)這種方式使得通過(guò)CDN服務(wù)器分發(fā)更新數(shù)據(jù)的時(shí)候,能夠驗(yàn)證車(chē)輛身份[2]。
2.1.2 數(shù)據(jù)庫(kù)管理系統(tǒng)
在OTA服務(wù)器中,需要部署相應(yīng)的數(shù)據(jù)庫(kù)管理系統(tǒng),以應(yīng)對(duì)大規(guī)模并發(fā)更新請(qǐng)求,并需要保證高并發(fā)場(chǎng)景數(shù)據(jù)的安全性和一致性。
在車(chē)輛信息存儲(chǔ)服務(wù)器中存儲(chǔ)車(chē)輛的信息,如發(fā)動(dòng)機(jī)型號(hào)、變速器型號(hào)、車(chē)型、VIN、生產(chǎn)/停產(chǎn)日期、T-Box序列號(hào)、搭載的發(fā)ECU信息以及ECU更新?tīng)顟B(tài)等。在服務(wù)器中能夠利用相關(guān)數(shù)據(jù)對(duì)每次升級(jí)的時(shí)間和成功率做出統(tǒng)計(jì)。
車(chē)輛用戶(hù)端由傳輸控制單元(TCU)和控制器端兩部分組成,其中TCU的作用主要是為整車(chē)提供遠(yuǎn)程通訊接口。云服務(wù)器數(shù)據(jù)通過(guò)CDN服務(wù)器或統(tǒng)一通訊端口服務(wù)器轉(zhuǎn)發(fā)到TCU中,TCU把數(shù)據(jù)轉(zhuǎn)發(fā)到超級(jí)網(wǎng)關(guān),再通過(guò)CAN總線把更新數(shù)據(jù)下發(fā)到制定的ECU中。
2.2.1 傳輸控制單元
在實(shí)際的應(yīng)用環(huán)境下,一般把TCU和網(wǎng)關(guān)集成在一起,例如市面上常見(jiàn)的T-Box。同時(shí)由于存在無(wú)線通信網(wǎng)絡(luò)和汽車(chē)總線之間的速率不匹配的問(wèn)題,為了保證可靠性、實(shí)時(shí)性和有效性并滿足汽車(chē)功能安全標(biāo)準(zhǔn),TCU一般采用雙處理器架構(gòu),即STM32F核心+ARM A9核心的搭配方式[3]。
圖3展示了一種以STM32F搭配BM817C全網(wǎng)通模組作為通信單元的T-Box硬件設(shè)計(jì)方案。在BM817C的4G模組中搭載基于ARM的AP,并利用Linux系統(tǒng)來(lái)管理模組的通訊和安全。
圖3 一種T-Box硬件設(shè)計(jì)方案
在進(jìn)行ECU遠(yuǎn)程刷寫(xiě)過(guò)程中,Server通過(guò)移動(dòng)通信網(wǎng)絡(luò)對(duì)TCU下達(dá)對(duì)某個(gè)或者某幾個(gè)ECU進(jìn)行刷寫(xiě)的命令,TCU再通過(guò)汽車(chē)總線把命令傳輸?shù)揭?xiě)的ECU節(jié)點(diǎn),ECU節(jié)點(diǎn)則進(jìn)入刷寫(xiě)模式,完成ECU軟件遠(yuǎn)程刷寫(xiě)。
2.2.2 控制器端
控制器端主要是ECU軟件和硬件,其硬件作為車(chē)輛中最常見(jiàn)的電子控制單元,其主要由微型控制單元(MCU)、存儲(chǔ)單元、通信單元、高級(jí)定時(shí)單元和數(shù)字/模擬量采集器等組成。對(duì)于控制端而言,ECU要成功地刷寫(xiě)軟件,需要具備CAN通信功能和BootLoader(引導(dǎo)加載程序),以及包含UDS/KWP2000診斷協(xié)議。
在ECU中從軟件的角度來(lái)劃分嵌入式系統(tǒng),從底層到上層可分為BootLoader、系統(tǒng)內(nèi)核、文件系統(tǒng)和用戶(hù)應(yīng)用程序4個(gè)層次。BootLoader的作用主要是初始化堆棧區(qū)、全局變量、建立并分類(lèi)內(nèi)存地址空間的映射關(guān)系等,建立調(diào)用操作系統(tǒng)內(nèi)核的軟硬件環(huán)境[4]。ECU的BootLoader在下載模式下,通過(guò)串口通信或CAN總線從TCU上獲取文件,文件先被BootLoader寫(xiě)入RAM最后再寫(xiě)入ROM中。
控制器端與TCU之間的通信往往基于UDS診斷通信協(xié)議。UDS本身基于OSI七層體系模型,通過(guò)UDS服務(wù),可以從控制器端獲取故障信息,進(jìn)行遠(yuǎn)程診斷,亦可以通過(guò)UDS服務(wù),讓TCU下發(fā)新的ECU軟件到控制器BootLoader。
在面向ECU遠(yuǎn)程刷寫(xiě)系統(tǒng)中,OTA功能架構(gòu)應(yīng)該滿足3個(gè)條件:一是減少用戶(hù)等待的時(shí)間;二是ECU軟件能夠完整的更新;三是ECU軟件更新是安全的。
對(duì)于條件1,采用減少傳送數(shù)據(jù)包大小的方法,例如使用ECU增量壓縮工具基于差分壓縮算法來(lái)提高更新數(shù)據(jù)包的壓縮比,或者通過(guò)讓更新數(shù)據(jù)在不同總線上并行傳輸來(lái)減少更新的時(shí)間。對(duì)于條件2,需要在更新數(shù)據(jù)包發(fā)送的前后進(jìn)行更新版本的校驗(yàn),并獲取ECU版本信息,在ECU刷寫(xiě)完成后對(duì)數(shù)據(jù)進(jìn)行一致性檢查。對(duì)于條件3,因?yàn)镋CU軟件刷寫(xiě)出現(xiàn)故障可能關(guān)系到駕駛?cè)说纳踩栽诓煌?wù)端進(jìn)行更新數(shù)據(jù)傳輸?shù)倪^(guò)程中,需要對(duì)更新數(shù)據(jù)進(jìn)行加密,以防止惡意攻擊,信息泄露等威脅。
圖4展示了ECU軟件更新的過(guò)程。在更新ECU軟件時(shí),主要在管理更新數(shù)據(jù)的服務(wù)器、TCU(遠(yuǎn)程通信單元)和更新目標(biāo)ECU之間進(jìn)行通信。
圖4 ECU軟件更新過(guò)程
差分壓縮算法又分為差分算法和壓縮算法,是一種以時(shí)間換空間的策略。軟件升級(jí)的本質(zhì)是軟件舊版本通過(guò)一些面向字節(jié)流的操作,使得軟件升級(jí)為新版本。
差分算法是通過(guò)對(duì)新舊版本之間進(jìn)行差異性比對(duì)生成delta文件(圖5)。在軟件開(kāi)發(fā)中,新舊版本的變更往往對(duì)邏輯關(guān)系的變動(dòng)不大,這使得新舊軟件之間存在較大的關(guān)聯(lián)性。在差分算法中使用以下3種指令來(lái)描述新舊版本之間的差異。
圖5 差分壓縮算法原理圖
DATA指令:當(dāng)軟件新版本的某個(gè)程序塊在一些位置與上一版本完全不相同時(shí),DATA指令負(fù)責(zé)把新程序塊插入進(jìn)來(lái)。
SKIP命令:當(dāng)軟件新版本的某個(gè)程序塊內(nèi)容和起始地址都和上一版本相同時(shí),SKIP指令負(fù)責(zé)跳過(guò)該程序塊。
COPY命令:當(dāng)軟件新版本某個(gè)程序塊的內(nèi)容和上一版本相同,但起始地址不同時(shí),通過(guò)COPY命令來(lái)移位。
由上述可知道,delta文件大小取決于COPY、SKIP和DATA命令的數(shù)量。設(shè)[NUM]_c為COPY指令數(shù),[NUM]_s為SKIP指令數(shù),[NUM]_d為DATA指令數(shù),L_d代表新添加數(shù)據(jù)塊的長(zhǎng)度,地址的長(zhǎng)度為L(zhǎng)_add。由以上可得出delta的大小如下。
[delta]_size=(1+L_add+1+L_d )×[NUM]_d+(2+L_add )×([NUM]_c+[NUM]_s )
對(duì)于壓縮算法,提高壓縮率需要耗費(fèi)時(shí)間,節(jié)約時(shí)間則壓縮率就會(huì)低。ECU固件更新包體積很小,因此不需要采用高壓縮率算法,甚至不壓縮。而對(duì)于車(chē)載娛樂(lè)信息系統(tǒng)軟件更新,對(duì)差分文件進(jìn)行壓縮則很有必要。
尋址技術(shù)有靜態(tài)和動(dòng)態(tài)之分。靜態(tài)尋址技術(shù)在軟件開(kāi)發(fā)階段,提前對(duì)每個(gè)數(shù)據(jù)塊提前預(yù)留存儲(chǔ)空隙。日后修改時(shí),相對(duì)應(yīng)的數(shù)據(jù)塊起始地址不會(huì)改變,但會(huì)耗費(fèi)過(guò)多存儲(chǔ)空間。且當(dāng)預(yù)留的空間用盡之后,仍然需要使用動(dòng)態(tài)尋址技術(shù)。
動(dòng)態(tài)尋址技術(shù)通過(guò)維護(hù)地址表,使得能夠靈活利用地址空間,從而在一定程度上會(huì)增加升級(jí)包大小。
根據(jù)A-SPICE評(píng)估標(biāo)準(zhǔn),在集成測(cè)試階段進(jìn)行靜態(tài)代碼檢查,能有效檢測(cè)代碼漏洞。在代碼發(fā)布前進(jìn)行本地化測(cè)試檢查,并模擬入侵手段,能提前發(fā)現(xiàn)漏洞,最后進(jìn)行trust zone的滲透測(cè)試。
為保證OTA遠(yuǎn)程刷寫(xiě)ECU軟件的網(wǎng)絡(luò)服務(wù)器安全,可以采用Uptane安全架構(gòu)。Uptane是一種用于汽車(chē)OTA的開(kāi)源軟件更新框架規(guī)范,專(zhuān)門(mén)為ECU上運(yùn)行的軟件安全需求設(shè)計(jì),可以有效保護(hù)用于簽名和交付更新的服務(wù)器和網(wǎng)絡(luò)。
該技術(shù)指在升級(jí)ECU出現(xiàn)刷寫(xiě)故障時(shí),可以回退到上一版本或者初始版本,以保障車(chē)輛正常運(yùn)行。在系統(tǒng)設(shè)計(jì)中,搭載RTOS的ECU在硬件上有一個(gè)額外的存儲(chǔ)空間,以存儲(chǔ)上一次更新的完整鏡像以及初始版本鏡像。當(dāng)原有系統(tǒng)升級(jí)成功時(shí),把完整鏡像覆蓋到備用存儲(chǔ)空間中。當(dāng)系統(tǒng)升級(jí)失敗時(shí),通過(guò)系統(tǒng)調(diào)用備用存儲(chǔ)空間的鏡像,來(lái)還原上一版本的系統(tǒng)。如果再次刷寫(xiě)失敗,則再次觸發(fā)系統(tǒng)調(diào)用,跳轉(zhuǎn)到初始版本鏡像的地址,完成初始鏡像刷寫(xiě)。
本文對(duì)車(chē)輛OTA升級(jí)場(chǎng)景和關(guān)鍵技術(shù)進(jìn)行了分析探討,搭建了一種基于Uptane架構(gòu)的云服務(wù)平臺(tái),通過(guò)移動(dòng)無(wú)線通信網(wǎng)絡(luò)完成對(duì)汽車(chē)ECU軟件的遠(yuǎn)程在線刷寫(xiě)。本文的場(chǎng)景,有效地滿足車(chē)輛智能化的軟件快速迭代需求,更好地提升ECU的功能。