01
MPU機制與實現(xiàn)詳解
1、freedom from interference
此概念來自ISO26262-1:absence of cascading failures (1.13) between two or more elements (1.32) that could lead to the violation of a safety requirement
多個元素之間沒有可能導致違反安全目標的級聯(lián)故障,稱之為免于干涉。
在左側(cè)的設(shè)計中,ASIL A的軟件模塊不可能影響ASIL C的模塊,因此ASIL C模塊對ASIL A模塊免于干涉。
在右側(cè)的設(shè)計中,存在從ASIL A到ASIL C系統(tǒng)的數(shù)據(jù)/控制流。結(jié)果,至少在沒有任何進一步分析的情況下,ASIL C系統(tǒng)無法實現(xiàn)對于ASIL A軟件模塊的免于干涉。ASIL C系統(tǒng)可能會受到ASIL A系統(tǒng)的影響。在這種情況下,需要采取進一步的設(shè)計或驗證措施,以免受到干擾。例如,ASIL C系統(tǒng)可以首先檢查ASIL A系統(tǒng)數(shù)據(jù)的正確性。考慮到這一措施,ASIL C組件將實現(xiàn)免于干涉。
2、Separation in Memory
Vector 的MICROSAR OS將TASK ISR IOC等集合成OS Application,以便將不同的應(yīng)用劃分到不同的內(nèi)存區(qū)間。針對軟件進行的模塊化和分區(qū)可以提高軟件系統(tǒng)的康故障魯棒性。
同一安全等級的軟件或?qū)崿F(xiàn)同一個安全目標的軟件劃分到同一個模塊或者OS Application。當故障發(fā)生時,可以很好的防止出現(xiàn)錯誤級聯(lián),從而實現(xiàn)freedom form interference.
SC3 SafeContex OS中必須具備整個軟件中最高的 安全等級,例如軟件中最高等級的模塊位ASIL C,那么OS必須要具備ASIL C等級,才能保證軟件模塊的安全等級。
SC3 SafeContex OS會運行在Supervisor Mode,保證運行在系統(tǒng)的最高權(quán)限。通過Memory Partition,將各個模塊在內(nèi)存訪問上的操作進行隔離。如果需要附加模塊之間的訪問安全機制,可以有效的達到各個不同安全等級模塊之間的freedom from interference.
3、Partitioning Options
Davinci 針對Memory Partitionning 有兩種解決方案:
1、 BSW運行在Non-Trusted,或者QM-partition,配合Safe WDG的時間監(jiān)控(deadline)以及OS Scalability Class 3/4。這種情況適合與ECU Software中只有一小部分的軟件是功能安全目標實現(xiàn)模塊,另外較大一部分是QM。與底層的BSW交互較多。這種交互不需要跨越partition,SafeWDG作為有安全等級的模塊出現(xiàn),且由于其功能是監(jiān)控軟件運行,一般作為軟件中最高安全等級。
2、BSW所有模塊選擇safety 等級模塊,與ECU中safety等級的其他功能模塊安全等級一致。可以設(shè)置為最高安全等級或者QM的其他安全等級,最好與那些BSW交互較多的軟件模塊設(shè)置成一致的安全等級。這樣可以有效降低跨越partition所帶來的OS切換消耗時間。這種方案適合與有一大部分軟件模塊都是safe-related模塊的ECU。
除此之外,MCAL和外設(shè)模塊與BSW模塊之間的交互也需要評估,與BSW有交互的模塊需要劃分到BSW同級的模塊,并且需要具備該安全等級。
4、Memory Protection
Davinci Safe提供了針對software partition的memory protection,是實現(xiàn)同一個ECU中具備不同安全等級的軟件模塊時必須要實現(xiàn)的freedom form interference 方法。
02
Partition元素-MPU
1、MPU介紹
Memory Protection 的實現(xiàn)需要配合硬件MPU。通過MPU配置,各個軟件模塊將具備對不同memory區(qū)域的不同訪問權(quán)限,主要包括RAM ROM,以及外設(shè)寄存器的訪問權(quán)限。例如,配置低安全等級軟件模塊無法對高安全等級軟件模塊的flash RAM段進行訪問,(需要配合編譯器,將軟件模塊編譯到不同到區(qū)域)即可有效防止低安全等級的軟件模塊在故障產(chǎn)生時對高安全等級模塊發(fā)生級聯(lián)醒錯誤。
MPU的配置是通過設(shè)置多個MPU region來實現(xiàn)的,每個MPU region的可配置選項包括: 被保護的起始地址,訪問權(quán)限,所屬硬件MPU分類,Region Owner 以及有效ID等。
一般來講,MPU分為兩類,System Memory Protection Uint 和 Core Memory Protection Uint。SMPU主要存在與多核系統(tǒng)中,用于對各個BUS設(shè)定內(nèi)存訪問權(quán)限。一般來講,SPMU由OS在啟動時設(shè)定好,在軟件運行過程中不會被重新設(shè)置,不會在軟件中動態(tài)的更改BUS對內(nèi)存的訪問權(quán)限。
CMPU一般負責多核的內(nèi)存保護,一般每個內(nèi)核都具備一定數(shù)量的CMPU,可以為運行在該內(nèi)核上的OS Application TASK ISR等分別設(shè)定不同的內(nèi)存區(qū)域以及外設(shè)地址的訪問權(quán)限,從而實現(xiàn)軟件模塊的分區(qū)。
CMPU的訪問權(quán)限包括讀、寫、執(zhí)行權(quán)限,可以根據(jù)內(nèi)存區(qū)域存儲內(nèi)容設(shè)定,CMPU在OS的運行過程中是可以更改權(quán)限的。當各個OS Application的權(quán)限被設(shè)定好之后,OS會在OS Application切換時對MPU相關(guān)寄存器進行重重新初始化,并設(shè)置位即將切換到的OS Application權(quán)限。當出現(xiàn)訪問超過MPU權(quán)限允許范圍時,MCU exception會被出發(fā)并進入其相應(yīng)的OS 處理函數(shù),用戶可以根據(jù)情況 Shutdown OS或者選擇進入安全模式,從而有效阻止了軟件訪問故障的發(fā)生。
在OS SC3/SC4中OS Application分為兩類,具備最高安全等級的OS Application設(shè)定位Tusted Application,其他不具備Trusted屬性的Application 屬于Non-Trusted Application,OS和Trusted Application 運行在Supervisor Mode下,Non-Trusted Application則運行在User模式下。推薦為Truesd Application 設(shè)定除Stack區(qū)域以外的所有地址方位的讀、寫、執(zhí)行權(quán)限,包括外設(shè)地址。
為Non-Trusted Application設(shè)定屬于其私有的CFlash 和RAM段的訪問權(quán)限,以及共享數(shù)據(jù)區(qū)域的讀寫權(quán)限。
用戶可以根據(jù)ECU軟件各個模塊的安全等級情況,將軟件劃分的到多個OS Application 中,依據(jù)MCU資源設(shè)定MPU,進而實現(xiàn)不同安全等級的軟件模塊的協(xié)同工作,并把故障級聯(lián)的概率降到允許范圍內(nèi)的需求。
2、SMPU和CMPU
2.1、SMPU特性
用于核之間的安全隔離,實現(xiàn)免于干涉SMPU限制核對某些內(nèi)存空間或者MCU上通過總線訪問的外部資源,一般只限制寫權(quán)限在OS初始化時被初始化,運行過程不會改變。
配置步驟
2.2、CMPU特性
同一核上OS Application Task ISR之間的安全隔離
在啟動代碼或者運行中設(shè)置,限制權(quán)限包括讀、寫、執(zhí)行權(quán)限
配置步驟:
2.3、Static MPU Regions特性
對MPU Regions不指定具體的Owner,對所有軟件模塊都生效
系統(tǒng)啟動時設(shè)定好,可以是SMPU 或者CMPU,運行過程中不會改變
2.4、Dynamic MPU Regions特性
對MPU Regions 指定Owner,Owner可以是OS Application TASK ISRS
根據(jù)Owner 運行與否,代碼運行過程中進行enable/disable
2.5、Optimized /Fast Core MPU Handing
利用Memory Protection Identifiers值的變化,選擇性使用MPU Regions,在不重新初始化MPU寄存器的情況下,OS切換到某線程,同時具備PID MPU Region ,實現(xiàn)Dynamic MPU切換。
3、MPU的配置
在常見的軟件設(shè)計中,由于將軟件整體開發(fā)到相同的ASIL等級會耗費大量的資源。一般情況下只有一部分軟件會開發(fā)生ASIL等級,其他模塊開發(fā)成相對較低的安全等級,為了達到freedom from inerference,需要限制低等級模塊對高等級模塊的訪問。下面舉例說明MPU配置的常見思路。
從Safety方面,高等級的軟件模塊可以訪問其Memroy以及安全等級較低的軟件模塊Memory。
從工具方面,MPU可以被配置為各個OS Application TASK ISR 分別獨立具備訪問范圍,工具并不會因為軟件模塊安全等級的高低而對OS RTE有區(qū)別配置,而只是采用模塊間的隔離策略。隔離機制不會生成在RTE中。
從系統(tǒng)角度,整體軟件至少需要一個Trusted部分(以O(shè)S Application為單位劃分),并且Trusted部分是安全等級最高的模塊,可以訪問其他模塊的Memory。
總結(jié),使用MemMap機制,將各個OS Application所占用Code Data資源進行良好整齊的存放基礎(chǔ)上,MICROSAR 的推薦MPU配置為:
設(shè)置軟件中等級最高的軟件模塊為Trusted Os Application,同時設(shè)置位privilege。并設(shè)置Memory Region,允許該Application訪問呢所有Memory段和外設(shè)。
其他每個安全等級模塊各設(shè)定至少一個OS Applcaiton,并設(shè)置為Non-Trusted,針對其設(shè)定允許對整個Memory的讀權(quán)限,和模塊代碼的執(zhí)行權(quán)限,以及Stack的寫權(quán)限,共享數(shù)據(jù)區(qū)域的讀或者讀寫權(quán)限。
關(guān)于Stack,不需要用戶自己設(shè)定,OS會占用一個Memory Region進行Stack設(shè)置,因此需要留一個Memory Region給到OS。
共同使用Static MPU 和Dynamic MPU,配合OsAppMemoryProtectionIdentifier的作用,盡量減少MPU在代碼運行過程中的重新初始化,這樣可以降低OS contex切換的時間。
配置思路:
3.1、MPC MPU硬件特性及配置
以MPC5744 單核為例介紹,硬件資源如下:
16個SMPU,24個CMPU,12個data 6個instruction 6個 shared
2個supervisor ,3種訪問權(quán)限
6個可以選擇的SMPU訪問對象,即6個master ID,分別對應(yīng)MCU總線上的外設(shè)單元
在配置工具中查看硬件資源:
針對OS Application /TASK /ISR設(shè)定Memory Region,依次設(shè)置其參數(shù)并關(guān)聯(lián)到需要生效的OS Application TASK ISR。根據(jù)需要對SMPU進行配置,如果所有MPU都沒有使用SMPU,OS會在初始化時禁止 Gloabl SMPU Control Bit,SMPU將不會生效。同理CMPU,即使OS 設(shè)定為SC3,不設(shè)置任何MPU Region,那么MPU會被disable。
MPU配置如下圖所示,其中被標注藍色框的選項是必須設(shè)置的選項:
MPC系列的特殊配置:
Memory Region Bus Master:設(shè)置允許訪問MPU設(shè)置地址的Master,僅針對SMPU有效
Memory Region Flag :訪問行為的屬性,可以參數(shù)硬件手冊
當出現(xiàn)MPU錯誤時,代碼會進入
Os_Hal_Exception_Machine_MCSRR
Os_Hal_Exception_Data
Os_Hal_Exception_Instrcution
03
Partition實現(xiàn)元素OSApplication
3.1、OS/OsApplication權(quán)限以及訪問的權(quán)限切換
硬件MCU支持兩種訪問模式,Privileded 和Non-privileded。其中前者具有比較高的權(quán)限,有一部分寄存器需要在前者模式下才能被訪問,詳細可以參考RM手冊。OS會運行在Privilege Mode,具有最高的訪問權(quán)限,可以訪問所有寄存器。
在采用不同的功能安全等級的軟件模塊協(xié)調(diào)工作的的系統(tǒng)軟件中,需要利用MPU單元防止低安全等級的模塊對硬件寄存器進行訪問,同時限制除最高安全等級模塊之外的其他軟件模塊的Memory訪問。
3.1.1、 OS/OsApplication權(quán)限
OS 具備最高權(quán)限 Privilege Mode Trusted
Trusted OS Application - Privileged Mode Trusted,一般將軟件按照安全等級劃分,并分別歸屬到不同的OsApplication中,其中安全等級最高的部分設(shè)置為Trusted,屬于可信度最高的模塊。目前建議Trusted OsApplication具備其他Application Stack的所有區(qū)域訪問權(quán)限。
3.1.2 MCAL模塊Protected Registers 訪問
系統(tǒng)初始化時,進行MPU初始化,在此之前MPU處于Disable狀態(tài),一般在OS啟動初始化MCAL模塊,此時可以訪問Protected Register。在OS初始化以后,如果MCAL模塊需要在Privilege Mode運行時,基本可以分為以下幾類:
1、Vector Modules,例如CAN/LIN ETH等通訊模塊,一般CAN需要勾選CanUserPeripheralAccessApi,并根據(jù)PROTED AREA中的定義相應(yīng)的OsApplication,CAN將會調(diào)用OS接口進行privilege權(quán)限的獲取。
2、MCAL模塊一般需要開啟User Mode,例如FlsEnableUserModeSupport,勾選以后,MCAL會采用privilege Mode進行訪問。
3.1.3 OsShutdown的實現(xiàn)
AUTOSAR要求只有在Trusted OsApplication才可以進行OsShutdown,否則將無法shutdown成功。可以通過Event的方式通知Trusted Task調(diào)用OsShutdown Api。但是需要設(shè)置一個高優(yōu)先級/不可搶占/拓展類的TASK,代碼示例如下:
在向FBL跳轉(zhuǎn)以及系統(tǒng)最后的Reset務(wù)必使用Mcu_PrefromReset,這樣才可以disable MPU,否則可以使用代碼disable MPU之后,在調(diào)用對應(yīng)的API進行Reset操作。
3.2 、Trusted/Non-Trusted 配置舉例
不同等級的OsApplication之間互相調(diào)用時涉及到安全問題,需要做安全訪問的權(quán)限轉(zhuǎn)換。
1.Trusted Funtion
Trusted OS Application供給其他Application調(diào)用的函數(shù),應(yīng)在Privilege Mode下執(zhí)行。用于Non-Trusted OsApplication調(diào)用Trusted OsApplication內(nèi)部函數(shù),舉例如下:
2.Non-Trusted Funtion
Non-Trusted OsApplication供給其他Application調(diào)用的函數(shù),應(yīng)在User Mode下執(zhí)行,用于其他OsApplication調(diào)用Non-Trusted OsApplication 內(nèi)部函數(shù)。配置方式與上面類似。
3.3、MemMap機制與OS數(shù)據(jù)的存放
MPU需要限制各個OsApplication Task ISR對各個地址的訪問權(quán)限,所以明確并整理好各個軟件模塊的代碼數(shù)據(jù)存放位置是關(guān)鍵。通過MemMap機制,和Link文件。可以將各個模塊的代碼和數(shù)據(jù)存放到指定的區(qū)域,從而實現(xiàn)MPU保護。如下圖,MemMap的作用。
當發(fā)生MPU錯誤時,OS會進入ProtectionHook,并返回E_OS_PROTECTION_MEMORY或者E_OS_PROTECTION_EXCEPTION。
04
Partition元素-RTE
RTE 作為動態(tài)配置的虛擬總線模塊,負責 OS application 之間的數(shù)據(jù)交互和訪問,在具備 Memory。
partition 的系統(tǒng)中, OS application 之間的訪問會存在跨越安全等級的情況, RET 具備一定的免于干擾的。
機制,分別針對各 OS application 產(chǎn)生代碼和變量,在后續(xù)的軟件分區(qū)過程中分別將 RET 生成的對應(yīng)各。
OS application 的 memory 內(nèi)容分別歸其所屬。由于大部分的機制由 RTE 自動完成,需要用戶設(shè)置的主要。
有以下幾點:
為 OS application 分別關(guān)聯(lián) ECUC partition
生成代碼,按照 RTE 段的內(nèi)容分別歸屬到相應(yīng)的 OS application,并各自設(shè)置訪問權(quán)限的允許,
公共的 RTE code(如 RTE_START_SEC_CODE) 需要對所有的 OS application 開放訪問權(quán)限。
尤其針對跨越 OS application 的訪問,分別做好 runnable 的 task mapping,確保調(diào)用端和被調(diào)用端
分別 mapping 到對應(yīng) task。
RTE 端口盡量不要出現(xiàn)懸空狀態(tài),或鏈接不處理數(shù)據(jù)的狀態(tài)
審核編輯:劉清
-
寄存器
+關(guān)注
關(guān)注
31文章
5317瀏覽量
120002 -
ROM
+關(guān)注
關(guān)注
4文章
562瀏覽量
85672 -
MPU
+關(guān)注
關(guān)注
0文章
346瀏覽量
48735 -
ISR
+關(guān)注
關(guān)注
0文章
38瀏覽量
14404 -
BSW
+關(guān)注
關(guān)注
0文章
15瀏覽量
3502
原文標題:MPU機制與實現(xiàn)詳解
文章出處:【微信號:談思實驗室,微信公眾號:談思實驗室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論