1. 應(yīng)用軟件
在AUTOSAR架構(gòu)中,應(yīng)用軟件位于RTE上方,由互連的AUTOSAR SWC組成,這些組件以原子方式封裝了應(yīng)用軟件功能的各個(gè)組成部分。
圖1:應(yīng)用程序軟件
AUTOSAR SWC獨(dú)立于硬件,因此可以集成到任何可用的ECU硬件上。為了便于ECU內(nèi)部和內(nèi)部的信息交換,AUTOSAR SWC僅通過RTE進(jìn)行通信。
AUTOSAR SWC包含許多提供內(nèi)部功能的函數(shù)和變量。AUTOSAR SWC的內(nèi)部結(jié)構(gòu),即其變量和函數(shù)調(diào)用,通過頭文件隱藏在公眾視野之外。只有外部RTE調(diào)用才會(huì)在公共接口上生效。
圖2:SWC
AUTOSAR SWC還包含必須在運(yùn)行時(shí)調(diào)用的函數(shù)。這些C函數(shù)在AUTOSAR中稱為Runnables。
Runnables不能由它們自己執(zhí)行;它們必須分配給 OS的可執(zhí)行實(shí)體。可以通過將Runnables的函數(shù)調(diào)用插入OS任務(wù)主體來執(zhí)行此類分配。
然后,Runnables在調(diào)用方OS-Task的上下文中循環(huán)執(zhí)行和/或事件驅(qū)動(dòng)。Runnables對(duì)任務(wù)的分配是根據(jù)圖3和圖4執(zhí)行的。
圖3:AUTOSAR分層軟件架構(gòu)-Runnables的映射
2. OS-Applications
圖4顯示了對(duì)圖3中關(guān)系的解釋。根據(jù)此圖,AUTOSAR SWC中的Runnables被分配給 OS任務(wù)。
圖4:SWC到 OS-Applications的映射
AUTOSAR OS-Applications是 OS對(duì)象(如任務(wù)、ISR、調(diào)度表、計(jì)數(shù)器和警報(bào))的集合,它們構(gòu)成了一個(gè)內(nèi)聚的功能單元。屬于同一 OS-Applications的所有對(duì)象都可以相互訪問。
OS-Applications中的 OS對(duì)象可能屬于不同的AUTOSAR SWC。RTE實(shí)現(xiàn)了一個(gè)內(nèi)存區(qū)域, OS-Applications的所有成員都可以不受限制地訪問該區(qū)域,以方便SWC之間有效地進(jìn)行通信。
OS-Applications有兩類:
受信任的 OS-Applications:“允許受信任的 OS-Applications在運(yùn)行時(shí)禁用監(jiān)控或保護(hù)功能的情況下運(yùn)行。他們可能不受限地訪問內(nèi)存和 OS模塊的API。受信任的 OS-Applications不需要在運(yùn)行時(shí)強(qiáng)制執(zhí)行其時(shí)序行為。當(dāng)處理器支持時(shí),它們被允許在特權(quán)模式下運(yùn)行。
不受信的 OS-Applications:“不允許在運(yùn)行時(shí)禁用監(jiān)控或保護(hù)功能的情況下運(yùn)行不受信的 OS-Applications。它們限制了對(duì)內(nèi)存的訪問,限制了對(duì) OS模塊的API的訪問,并在運(yùn)行時(shí)強(qiáng)制執(zhí)行其時(shí)序行為。當(dāng)處理器支持時(shí),不允許它們?cè)谔貦?quán)模式下運(yùn)行。
3. 通信和代碼共享
根據(jù)圖4和圖3,一個(gè) OS-Applications可以包含多個(gè)AUTOSAR SWC和關(guān)聯(lián)的Runnables。僅允許Runnables直接訪問變量并在其各自的 SWC中執(zhí)行函數(shù)調(diào)用。
SWC的內(nèi)部函數(shù)調(diào)用和變量不被其他 SWC公開獲取,因?yàn)樗鼈兊亩x不由外部接口的頭文件提供,因此不能規(guī)劃通過變量直接通信并執(zhí)行其他 SWC的代碼。
在圖5中,代碼共享示例對(duì)此進(jìn)行了說明,代碼共享只允許在 SWC內(nèi)使用,而不允許在一個(gè)OS-Application的 SWC之間共享。與其他 SWC的通信應(yīng)通過RTE執(zhí)行。Runnable4可能無法執(zhí)行屬于SWC2.2的功能。
圖5:OS-Applications中的代碼共享
4. 應(yīng)用軟件中的內(nèi)存分區(qū)
AUTOSAR ECU中的應(yīng)用軟件可以由與安全相關(guān)的 SWC和非安全相關(guān)的 SWC組成。應(yīng)根據(jù)ISO26262的要求,確保具有不同ASIL等級(jí)的 SWC之間的免干擾性。
AUTOSAR OS通過將 OS-Applications放入獨(dú)占的內(nèi)存區(qū)域,從而不受與內(nèi)存相關(guān)的故障的干擾。此機(jī)制稱為內(nèi)存分區(qū)。OS-Applications之間彼此受到保護(hù),因?yàn)樵谝粋€(gè) OS-Applications的內(nèi)存分區(qū)中執(zhí)行的代碼不能修改其他內(nèi)存區(qū)域。AUTOSAR OS規(guī)范中的相應(yīng)要求如表1所示。
要求ID | 要求文本 |
---|---|
[SWS_Os_00207] | OS模塊應(yīng)阻止對(duì) OS的寫入訪問來自其他不受信的OS-Applications的應(yīng)用程序的私有數(shù)據(jù)分區(qū)。 |
[SWS_Os_00355] | OS模塊應(yīng)阻止從其他不受信的 OS-Applications對(duì) OS-Applications的任務(wù)/2類ISR的所有私有堆棧進(jìn)行寫入訪問。 |
[SWS_Os_00356] | OS模塊應(yīng)阻止從其他不受信的 OS-Applications對(duì) OS-Applications的任務(wù)/2類ISR的所有私有數(shù)據(jù)分區(qū)進(jìn)行寫入訪問。 |
表1:AUTOSAR OS- OS-Applications的內(nèi)存分區(qū)
應(yīng)用程序軟件可以由具有不同ASIL等級(jí)的 SWC組成。但是,具有不同ASIL分級(jí)的 SWC不應(yīng)分配給同一個(gè) OS-Applications。內(nèi)存分區(qū)不能提供分配給同一 OS-Applications的 SWC之間的免干擾性。OS僅阻止其他 OS-Applications執(zhí)行不正確的訪問。不會(huì)阻止有故障的 SWC修改同一 OS-Applications中其他SWC的內(nèi)存區(qū)域。
注意:有關(guān)任務(wù)級(jí)分區(qū)的詳細(xì)信息,請(qǐng)參閱后續(xù)分區(qū)。
5. SWC中的內(nèi)存分區(qū)
混合ASIL SWC可能由具有不同ASIL評(píng)級(jí)的Runnable組成,因此需要一個(gè)支持不受這些Runnable之間干擾的執(zhí)行環(huán)境。由于以下原因,無法在不同的內(nèi)存分區(qū)中執(zhí)行一個(gè) SWC的不同Runnables:
內(nèi)存分區(qū)在 OS-Applications級(jí)別執(zhí)行。如圖所示圖3和圖4,一個(gè) SWC只能分配給一個(gè)OS-Applications,因此只有一個(gè)內(nèi)存分區(qū)。此外, SWC的Runnables只能由一個(gè) OS-Applications的任務(wù)調(diào)用。
如圖6所示, SWC的Runnables不能分發(fā)到多個(gè) OS-Applications的任務(wù)。
圖6:SWC與分區(qū)
內(nèi)存分區(qū)不能用于分隔同一SWC中的Runnables。如果有必要讓 SWC包含具有不同ASIL的Runnable,并且這些Runnable需要免干擾的獨(dú)立執(zhí)行,那么在 OS-Applications級(jí)進(jìn)行內(nèi)存分區(qū)是不夠的,內(nèi)存分區(qū)必須在任務(wù)級(jí)別執(zhí)行。方法如圖7所示。
圖7:任務(wù)級(jí)分區(qū)
與任務(wù)級(jí)別的內(nèi)存分區(qū)相關(guān)的要求列在表2的AUTOSAR OS規(guī)范中。使用弱詞“may”表明任務(wù)級(jí)分區(qū)的實(shí)現(xiàn)對(duì)于AUTOSAR OS是可選的。因此,并非每個(gè)AUTOSAR OS實(shí)現(xiàn)都支持任務(wù)級(jí)內(nèi)存分區(qū)。
要求ID | 要求文本 |
---|---|
[SWS_Os_00208] | OS模塊可能會(huì)阻止從同一 OS-Applications中的所有其他任務(wù)/ISR寫入對(duì)非受信任應(yīng)用程序的任務(wù)/2類ISR的專用堆棧的寫入訪問。 |
[SWS_Os_00195] | OS模塊可能會(huì)阻止從同一 OS-Applications中的所有其他任務(wù)/ISR寫入對(duì)非受信任應(yīng)用程序的任務(wù)/2類ISR的私有數(shù)據(jù)分區(qū)的寫入訪問。 |
表2:AUTOSAR OS要求–任務(wù)級(jí)的內(nèi)存分區(qū)
6. 內(nèi)存分區(qū)的實(shí)現(xiàn)
可以使用內(nèi)存分區(qū)機(jī)制在系統(tǒng)和軟件級(jí)別上實(shí)現(xiàn)各種技術(shù)安全概念。
圖8顯示了一個(gè)可能的實(shí)現(xiàn),而所有基礎(chǔ)軟件模塊都在一個(gè)受信任/監(jiān)控模式內(nèi)存分區(qū)中執(zhí)行(圖8中以紅色突出顯示)。某些SWC在邏輯上分組并放在單獨(dú)的非受信任/用戶模式內(nèi)存分區(qū)中(以綠色突出顯示)。選定的軟件模塊與基礎(chǔ)軟件模塊屬于同一可信/管理模式內(nèi)存分區(qū)(參見圖8中紅色高亮的第四個(gè)SWC)??赡苡卸鄠€(gè)不受信的/用戶模式分區(qū),每個(gè)分區(qū)包含一個(gè)或多個(gè)SWC。
在非受信任/用戶模式內(nèi)存分區(qū)中執(zhí)行SWCs會(huì)受到限制,不能修改其他內(nèi)存區(qū)域,而受信任/監(jiān)控程序內(nèi)存分區(qū)的SWCs的執(zhí)行不受限制。
用于安全相關(guān)應(yīng)用的現(xiàn)代微控制器支持通過專用硬件(內(nèi)存保護(hù)單元(MPU))進(jìn)行內(nèi)存分區(qū)。
注意:假設(shè)內(nèi)存分片將在具有MPU或類似硬件功能的微控制器上實(shí)現(xiàn)。
使用典型的MPU實(shí)現(xiàn),不受信的應(yīng)用程序可以允許訪問微控制器地址空間的多個(gè)分區(qū)。訪問控制定義為讀取、寫入和執(zhí)行訪問的組合。MPU的配置僅在監(jiān)控模式下是允許的。
注意:在某些微控制器實(shí)現(xiàn)中,MPU集成在處理器內(nèi)核中。因此,MPU僅控制關(guān)聯(lián)內(nèi)核的訪問。其他總線主站(如DMA控制器和其他內(nèi)核)不受此分段MPU實(shí)例的控制。
下表和用例說明了內(nèi)存保護(hù)單元的配置派生自系統(tǒng)要求時(shí)的一組可能方案。注意:對(duì)于正在使用的特定硬件設(shè)備的功能,此表可能不完整。
地址空間 | 理由 | 讀 | 寫 | 執(zhí)行 |
---|---|---|---|---|
閃存 | 讀取、執(zhí)行和寫入訪問不會(huì)修改閃存內(nèi)容。必須首先擦除閃存,并啟用其他機(jī)制才能寫入。注意:從安全角度來看,以下含義:讀取和執(zhí)行外來代碼可能用于獲取原本不適用于軟件的信息。 | O | O | O |
RAM | 對(duì)RAM的寫入訪問可能會(huì)導(dǎo)致內(nèi)存損壞,從而影響軟件的行為。 | O | X | O |
外設(shè) | 即使從外設(shè)地址空間讀取,也可能產(chǎn)生副作用。例如通過對(duì)中斷控制器的讀取訪問來執(zhí)行中斷確認(rèn),對(duì)外圍設(shè)備的讀取訪問可能會(huì)導(dǎo)致I/O錯(cuò)誤。 | X | X | X |
表3:內(nèi)存保護(hù)的配置方案
圖標(biāo)說明:
X–需要保護(hù)
O–可選保護(hù)
注意:從性能角度來看,由于總線爭(zhēng)用、接口仲裁等原因,可能會(huì)產(chǎn)生副作用。
用例1:SWC位于同一分區(qū)中。
同一分區(qū)中的 SWC可以訪問彼此的RAM區(qū)域,因此可能會(huì)損壞彼此的內(nèi)存內(nèi)容。
根據(jù)定義, SWC無法訪問外圍設(shè)備,因?yàn)樗鼈儾粦?yīng)了解底層微控制器架構(gòu)。當(dāng) SWC被允許直接訪問外圍設(shè)備時(shí),可能會(huì)創(chuàng)建不安全的系統(tǒng)。
用例2:不同分區(qū)中的 SWC。
不同分區(qū)中的 SWC無法訪問彼此的RAM區(qū)域,因此無法損壞彼此的內(nèi)存內(nèi)容。
根據(jù)定義, SWC無法訪問外圍設(shè)備,因?yàn)樗鼈儾粦?yīng)了解底層微控制器架構(gòu)。當(dāng) SWC被授予對(duì)外圍設(shè)備的直接訪問權(quán)限時(shí),可能會(huì)創(chuàng)建可能不安全的系統(tǒng)。
用例3:MCAL驅(qū)動(dòng)程序
MCAL驅(qū)動(dòng)程序是函數(shù)的集合,例如讀/寫/初始化。它們必須由另一個(gè)實(shí)體執(zhí)行,例如BSW或CDD。有關(guān)詳細(xì)信息,請(qǐng)參見圖8。
MCAL驅(qū)動(dòng)程序需要對(duì)相應(yīng)外設(shè)硬件模塊的外設(shè)空間進(jìn)行讀/寫訪問。根據(jù)硬件架構(gòu),可能還需要處理器的監(jiān)控模式。
2.1.3檢測(cè)和響應(yīng)
功能安全機(jī)制內(nèi)存分區(qū)通過限制對(duì)內(nèi)存和內(nèi)存映射硬件的訪問來提供保護(hù)。在一個(gè)分區(qū)中執(zhí)行的代碼不能修改另一個(gè)分區(qū)的內(nèi)存。內(nèi)存分區(qū)可以保護(hù)只讀內(nèi)存段,以及保護(hù)內(nèi)存映射硬件。此外,在用戶模式下執(zhí)行的SWC對(duì)CPU指令的訪問受到限制,例如重新配置。
內(nèi)存分區(qū)機(jī)制可以在微控制器硬件(如內(nèi)存保護(hù)單元或內(nèi)存管理單元)的支持下實(shí)現(xiàn)。微控制器硬件必須由 OS進(jìn)行適當(dāng)配置,以便于檢測(cè)和防止不正確的內(nèi)存訪問。然后監(jiān)控在不受信的/用戶模式內(nèi)存分區(qū)中SWC的執(zhí)行。
如果內(nèi)存訪問違規(guī)或非受信任/用戶模式分區(qū)中的CPU指令沖突,則錯(cuò)誤訪問將被阻止,微控制器硬件會(huì)引發(fā)異常。OS和RTE通過執(zhí)行分區(qū)關(guān)閉或重新啟動(dòng)此分區(qū)的所有軟件分區(qū)來消除錯(cuò)誤的軟件分區(qū)。
注意:OS的實(shí)際響應(yīng)可以通過保護(hù)掛鉤實(shí)現(xiàn)進(jìn)行配置。有關(guān)更多詳細(xì)信息,請(qǐng)參閱 OS SWS[i]文檔。
注:AUTOSAR文檔“應(yīng)用程序級(jí)錯(cuò)誤處理說明”[ii]提供了有關(guān)錯(cuò)誤處理的其他信息。在文檔中,解釋了如何執(zhí)行錯(cuò)誤處理以及可以從何處獲取所需數(shù)據(jù)(例如替代值)。此外,本文檔還提供了有關(guān)如何在AUTOSAR中執(zhí)行 OS-Applications/分區(qū)終止和重新啟動(dòng)的詳細(xì)說明(用戶手冊(cè))。
2.1.4限制
1. 具有相同ASIL分級(jí)的SWC的內(nèi)存分區(qū)。
ISO26262標(biāo)準(zhǔn)要求不同ASIL等級(jí)[iii]的 SWC之間的免干擾性。但是,標(biāo)準(zhǔn)不要求在具有相同ASIL等級(jí)的 SWC之間的免干擾性。
允許使用由大量 SWC組成的 OS-Applications。如果單個(gè) SWC導(dǎo)致沖突,從而導(dǎo)致關(guān)閉或重新啟動(dòng)整個(gè)內(nèi)存分區(qū),則此內(nèi)存分區(qū)的所有其他正常工作的SWC也會(huì)受到影響。
2. 內(nèi)存分區(qū)不適用于受信任的 OS-Applications。
受信任/監(jiān)控模式內(nèi)存分區(qū)的執(zhí)行不受 OS和某些MMU/MPU硬件實(shí)現(xiàn)的控制。
3. 任務(wù)級(jí)別不支持內(nèi)存分區(qū)。
任務(wù)級(jí)分區(qū)的實(shí)現(xiàn)對(duì)于AUTOSAR OS實(shí)現(xiàn)不是必需的。因此,可能不支持 OS-Applications中的免干擾性。
4. 由于內(nèi)存分區(qū)導(dǎo)致的性能損失。
根據(jù)應(yīng)用軟件的架構(gòu)以及微控制器硬件和 OS的實(shí)現(xiàn),使用內(nèi)存分區(qū)會(huì)降低性能。此損失隨著每個(gè)時(shí)間單位執(zhí)行的上下文切換數(shù)的增加而增加。
5. 無基礎(chǔ)軟件分區(qū)。
基礎(chǔ)軟件的當(dāng)前規(guī)范未指定來自不同供應(yīng)商的不同ASIL等級(jí)的基礎(chǔ) SWC的內(nèi)存分區(qū)。
審核編輯:劉清
評(píng)論
查看更多