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