AP 標(biāo)準(zhǔn)在經(jīng)過(guò)幾年的進(jìn)化后,漸漸有了越來(lái)越多的量產(chǎn)項(xiàng)目。其中,作者觀察到AP的一個(gè)重要使用場(chǎng)景為實(shí)現(xiàn)功能安全島。
1
背景
在傳統(tǒng)的硬件架構(gòu)下,一般是一個(gè)MPU搭配一個(gè)從芯片MCU。MPU上運(yùn)行需要高算力的應(yīng)用,而且MCU側(cè)于車(chē)內(nèi)總線(xiàn)(比如CAN)。功能安全的應(yīng)用部署在MCU側(cè),軟件棧比如選用CP AUTOSAR。
在這個(gè)架構(gòu)下,受MCU算力限制,CP側(cè)無(wú)法對(duì)高算力的MPU做細(xì)顆粒的監(jiān)控。目前很多量產(chǎn)項(xiàng)目用到AP AUTOSAR的主要原因是在MPU上實(shí)現(xiàn)功能安全島。最近有好幾個(gè)ADAS項(xiàng)目采用如下軟件架構(gòu):
這樣的架構(gòu)主要使用在高性能ADAS控制器上。在Linux VM側(cè),部署各種開(kāi)源機(jī)器學(xué)習(xí)框架和ADAS算法。算法工程師能夠從廣大Linux軟件生態(tài)中獲益。常見(jiàn)的機(jī)器學(xué)習(xí)框架,算法庫(kù)等等都在Linux上有移植。受限于Linux實(shí)現(xiàn)功能安全能力,所有的項(xiàng)目都把跟功能安全相關(guān)部分放在AUTOSAR側(cè)。AP AUTOSAR側(cè)一般實(shí)現(xiàn)safety應(yīng)用:
-
系統(tǒng)失效后的緊急運(yùn)行功能或降級(jí)功能
-
備份功能滿(mǎn)足Fail-operational的安全策略。
-
實(shí)現(xiàn)不同算法監(jiān)控比對(duì)Linux VM側(cè)結(jié)果實(shí)現(xiàn)算法級(jí)冗余。
當(dāng)然,也有RTOS廠商移植了部分框架。比如opencv等。在這種情況下,可以省去Hypervisor和Linux部分,大大降低開(kāi)發(fā)集成難度。如果Safety應(yīng)用要滿(mǎn)足ASIL等級(jí),那么其下底下AP AUTOSAR協(xié)議棧,RTOS,Hypervisor,和重要的庫(kù)和系統(tǒng)服務(wù)也必須滿(mǎn)足ASIL等級(jí)。
2
底座 - 滿(mǎn)足功能安全的RTOS/Hypervisor和工具
為了滿(mǎn)足功能安全架構(gòu),目前業(yè)界主流的方案采用微內(nèi)核架構(gòu)的RTOS。
和LInux這樣的宏內(nèi)核架構(gòu)不同的是,微內(nèi)核架構(gòu)RTOS的內(nèi)核只有最基本的系統(tǒng)服務(wù),比如IPC,調(diào)度,內(nèi)存管理。其他的所有服務(wù)和應(yīng)用都屬于用戶(hù)態(tài)。包括基礎(chǔ)服務(wù),比如文件系統(tǒng),網(wǎng)絡(luò)協(xié)議棧,板級(jí)支持包BSP,POSIX中間件。任何用戶(hù)態(tài)的應(yīng)用,系統(tǒng)服務(wù)或者外圍驅(qū)動(dòng)宕掉,內(nèi)核仍然可以繼續(xù)運(yùn)行。內(nèi)核對(duì)應(yīng)的恢復(fù)機(jī)制,比如重啟對(duì)應(yīng)的服務(wù)。從信息安全角度,對(duì)于網(wǎng)絡(luò)協(xié)議棧這樣復(fù)雜度的子系統(tǒng)來(lái)說(shuō),其存在信息安全弱點(diǎn)是不可避免的。如果在宏內(nèi)核架構(gòu)下,一旦處在內(nèi)核態(tài)的網(wǎng)絡(luò)協(xié)議棧被攻破,整個(gè)內(nèi)核進(jìn)而整個(gè)系統(tǒng)將有被攻擊者挾持的風(fēng)險(xiǎn)。除了將大部分服務(wù)移出到用戶(hù)態(tài),RTOS內(nèi)核能做到對(duì)不同服務(wù)和應(yīng)用之間的完全隔離。
隔離的范圍包括:CPU時(shí)間片,內(nèi)存,外圍設(shè)備訪(fǎng)問(wèn),總線(xiàn)占用。這樣,從功能安全的角度達(dá)到:
-
故障的隔離(Fault isolation);
-
功能之間互不影響 (Interference-free)。
從軟件架構(gòu)設(shè)計(jì)的角度,ASIL功能只是系統(tǒng)占比很小的的一部分。如果其能與其他QM等級(jí)的應(yīng)用隔離開(kāi)來(lái),那么只有很少的一部分代碼需要做ASIL認(rèn)證。這樣ASIL的工作量會(huì)大大減少。按照作者所在公司測(cè)算,與開(kāi)發(fā)同樣的QM功能相比,符合ASIL-A等級(jí)的開(kāi)發(fā)需要花費(fèi)大概3倍的工作量。更進(jìn)一步,不同ASIL等級(jí)的應(yīng)用能夠在同一系統(tǒng)中共存,實(shí)現(xiàn)Mixed Criticality系統(tǒng)。信息安全架構(gòu)也能很好得益于模塊之間的完全隔離。因?yàn)椋甙踩燃?jí)模塊能夠和低安全等級(jí)模塊之間隔離開(kāi)來(lái)。這也就是TEE (Trusted Execution Environment)的設(shè)計(jì)概念。目前頂級(jí)的商用微內(nèi)核RTOS內(nèi)核部分能滿(mǎn)足ASIL-D等級(jí)。除了RTOS內(nèi)核需要滿(mǎn)足ASIL等級(jí)之外,從軟件平臺(tái)的角度POSIX PSE51的庫(kù)也必須滿(mǎn)足ASIL要求。因?yàn)槿绻粋€(gè)AP AUTOSAR的應(yīng)用有ASIL要求,其依賴(lài)的所有庫(kù)都必須滿(mǎn)足ASIL。其中最重要的是POSIX PSE51。AP標(biāo)準(zhǔn)里定義了應(yīng)用至少需有如下依賴(lài)關(guān)系。
目前業(yè)界的現(xiàn)狀為頂級(jí)RTOS供應(yīng)商能提供滿(mǎn)足ASIL等級(jí)的POSIX PSE51庫(kù)。但是,還沒(méi)有廠商號(hào)稱(chēng)POSIX PSE53/54的庫(kù)也通過(guò)了ASIL認(rèn)證。然后是滿(mǎn)足功能安全的文件系統(tǒng)。值得注意的是,C和C++標(biāo)準(zhǔn)庫(kù)提供文件操作接口,比如,C++ fstream。目前有RTOS供應(yīng)商提供滿(mǎn)足ASIL功能的文件系統(tǒng)。經(jīng)常容易被忽略的一點(diǎn),開(kāi)發(fā)ASIL Safety應(yīng)用使用的編譯器也必須滿(mǎn)足ASIL要求。兩個(gè)方面,第一,如果編譯器不滿(mǎn)足ASIL要求,那么其生成的機(jī)器代碼無(wú)法保證和源代碼的對(duì)應(yīng)關(guān)系。那么對(duì)于源代碼的認(rèn)證并無(wú)法保證機(jī)器代碼的可靠性。第二,如上圖的應(yīng)用依賴(lài)關(guān)系所示,C/C++標(biāo)準(zhǔn)庫(kù)也使用在了ASIL safety應(yīng)用中。那么與編譯器配套的C/C++的標(biāo)準(zhǔn)庫(kù)也必須通過(guò)ASIL認(rèn)證。目前業(yè)界的最新情況來(lái),C99和C++11大部分能允許在Safety應(yīng)用里使用。還無(wú)法達(dá)到認(rèn)證C++14的標(biāo)準(zhǔn)庫(kù)。最后聊一下Hypervisor。和傳統(tǒng)Type-1 Hypervior不一樣的是,最優(yōu)的Hypervisor方案和RTOS是一體的。
也就是說(shuō)AP AUTOSAR能直接在Hypervisor上面運(yùn)行,而不是通過(guò)虛擬化一個(gè)RTOS之后,再在上面運(yùn)行AP AUTOSAR。這樣最大的好處是減少了一次上下文切換,提高的AP AUTOSAR部分的運(yùn)行效率。
3
AP AUTOSAR功能安全
整個(gè)AP AUTOSAR協(xié)議棧的體量非常大。要想整體通過(guò)ASIL作者認(rèn)為可能性不大。在這里作者想特別提醒:一個(gè)號(hào)稱(chēng)有ASIL-D證書(shū)的產(chǎn)品并不能代表產(chǎn)品有多高的功能安全能力。這可能是業(yè)界經(jīng)常用來(lái)marketing的一個(gè)手段。ASIL-D最多表明了產(chǎn)品開(kāi)發(fā)符合了ASIL-D流程。其他任何也說(shuō)明不了。真正能夠能代表一個(gè)產(chǎn)品功能安全能力的,一定需要查看產(chǎn)品的功能安全手冊(cè)。功能安全手冊(cè)的重要性作者無(wú)法更多的強(qiáng)調(diào),上面應(yīng)該解釋了:產(chǎn)品考慮了哪些故障場(chǎng)景,哪些功能允許或不允許在在安全應(yīng)用里使用,在使用某個(gè)功能或者接口的時(shí)候必須滿(mǎn)足怎么的條件和限制。目前AP協(xié)議棧在RTOS的實(shí)現(xiàn)如下圖。
像EM,PHM,COM,PM, DM,UCM這樣功能模塊都是以獨(dú)立的進(jìn)程在系統(tǒng)中出現(xiàn)。值得注意的是,每個(gè)模塊完全包含了所有依賴(lài)的庫(kù),就像每個(gè)模塊運(yùn)行在獨(dú)立的容器里。這方便每個(gè)模塊的獨(dú)立部署和升級(jí)。一般來(lái)講Platform Health Management (PHM)模塊必須符合ASIL,其ASIL等級(jí)必須和系統(tǒng)最高級(jí)別safety應(yīng)用的等級(jí)相當(dāng)。目前已經(jīng)有滿(mǎn)足ASIL-D的PHM模塊。內(nèi)容包括:
-
健康監(jiān)控:檢查應(yīng)用是否正常運(yùn)行,是否異常退出或者處在suspend狀態(tài)不會(huì)被OS調(diào)度。
-
Deadline監(jiān)控:檢查應(yīng)用是否在規(guī)定時(shí)間完成。
-
程序流監(jiān)控:檢查應(yīng)用是否在規(guī)定時(shí)間內(nèi)執(zhí)行配置好的的檢查點(diǎn)(checkpoint)。
-
其他系統(tǒng)監(jiān)控:OS內(nèi)核運(yùn)行狀態(tài),RAM校驗(yàn)值,電壓,等等和平臺(tái)細(xì)節(jié)相關(guān)的參數(shù)。
第二重要的功能安全模塊為EM(Execution Management), EM模塊必須符合ASIL等級(jí),其ASIL等級(jí)必須和系統(tǒng)最高級(jí)別safety應(yīng)用的等級(jí)相當(dāng)。目前已經(jīng)有滿(mǎn)足ASIL-D的EM模塊。內(nèi)容包括:
-
安全初始化:和RTOS一起,保證如果safety應(yīng)用需要被EM啟動(dòng),所有需要的硬件資源都可用。這里包括了CPU時(shí)間片和內(nèi)存等。作者的經(jīng)驗(yàn)是實(shí)現(xiàn)了ASIL等級(jí)的posix_spawn API。
-
可靠運(yùn)行:主要使用軟件Lock-step框架,實(shí)現(xiàn)在規(guī)定時(shí)間內(nèi)執(zhí)行好預(yù)設(shè)應(yīng)用并且比對(duì)結(jié)果。參看EM的Deterministic Client部分。
-
可靠調(diào)度:和RTOS一起,當(dāng)safety應(yīng)用被EM啟動(dòng)之后, 在運(yùn)行過(guò)程中需保證分配的CPU時(shí)間片不受其他應(yīng)用影響。
-
可靠退出:和RTOS一起,當(dāng)safety應(yīng)用被(如果被SM)請(qǐng)求退出時(shí),所有的有依賴(lài)關(guān)系的應(yīng)用按配置的順序正常退出,而且不會(huì)出現(xiàn)系統(tǒng)異常。
順便簡(jiǎn)短提下CM(Communication Management)和SM(State Management)的功能安全實(shí)現(xiàn)。CM模塊代碼量相當(dāng)大。作者的個(gè)人觀點(diǎn)是無(wú)法達(dá)到ASIL等級(jí)。目前在具體項(xiàng)目主要是中搭配使用E2E保護(hù)。SM一般來(lái)講也是達(dá)到ASIL等級(jí)的。但是其和具體項(xiàng)目的上下文強(qiáng)相關(guān),無(wú)法通用性的展開(kāi)討論。
轉(zhuǎn)載汽車(chē)電子相關(guān)文章
轉(zhuǎn)自汽車(chē)電子與軟件