0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文詳解MPU機(jī)制與實現(xiàn)方法

jf_EksNQtU6 ? 來源:談思實驗室 ? 2024-01-11 09:39 ? 次閱讀

01

MPU機(jī)制與實現(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

多個元素之間沒有可能導(dǎo)致違反安全目標(biāo)的級聯(lián)故障,稱之為免于干涉。

dfa6a82a-afa2-11ee-8b88-92fbcf53809c.png

在左側(cè)的設(shè)計中,ASIL A的軟件模塊不可能影響ASIL C的模塊,因此ASIL C模塊對ASIL A模塊免于干涉。

在右側(cè)的設(shè)計中,存在從ASIL A到ASIL C系統(tǒng)的數(shù)據(jù)/控制流。結(jié)果,至少在沒有任何進(jìn)一步分析的情況下,ASIL C系統(tǒng)無法實現(xiàn)對于ASIL A軟件模塊的免于干涉。ASIL C系統(tǒng)可能會受到ASIL A系統(tǒng)的影響。在這種情況下,需要采取進(jìn)一步的設(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ū)間。針對軟件進(jìn)行的模塊化和分區(qū)可以提高軟件系統(tǒng)的康故障魯棒性。

同一安全等級的軟件或?qū)崿F(xiàn)同一個安全目標(biāo)的軟件劃分到同一個模塊或者OS Application。當(dāng)故障發(fā)生時,可以很好的防止出現(xiàn)錯誤級聯(lián),從而實現(xiàn)freedom form interference.

dfb8d068-afa2-11ee-8b88-92fbcf53809c.png

SC3 SafeContex OS中必須具備整個軟件中最高的 安全等級,例如軟件中最高等級的模塊位ASIL C,那么OS必須要具備ASIL C等級,才能保證軟件模塊的安全等級。

SC3 SafeContex OS會運(yùn)行在Supervisor Mode,保證運(yùn)行在系統(tǒng)的最高權(quán)限。通過Memory Partition,將各個模塊在內(nèi)存訪問上的操作進(jìn)行隔離。如果需要附加模塊之間的訪問安全機(jī)制,可以有效的達(dá)到各個不同安全等級模塊之間的freedom from interference.

3、Partitioning Options

Davinci 針對Memory Partitionning 有兩種解決方案:

1、 BSW運(yùn)行在Non-Trusted,或者QM-partition,配合Safe WDG的時間監(jiān)控(deadline)以及OS Scalability Class 3/4。這種情況適合與ECU Software中只有一小部分的軟件是功能安全目標(biāo)實現(xiàn)模塊,另外較大一部分是QM。與底層的BSW交互較多。這種交互不需要跨越partition,SafeWDG作為有安全等級的模塊出現(xiàn),且由于其功能是監(jiān)控軟件運(yùn)行,一般作為軟件中最高安全等級。

2、BSW所有模塊選擇safety 等級模塊,與ECU中safety等級的其他功能模塊安全等級一致。可以設(shè)置為最高安全等級或者QM的其他安全等級,最好與那些BSW交互較多的軟件模塊設(shè)置成一致的安全等級。這樣可以有效降低跨越partition所帶來的OS切換消耗時間。這種方案適合與有一大部分軟件模塊都是safe-related模塊的ECU。

除此之外,MCAL和外設(shè)模塊與BSW模塊之間的交互也需要評估,與BSW有交互的模塊需要劃分到BSW同級的模塊,并且需要具備該安全等級。

dfc7d3c4-afa2-11ee-8b88-92fbcf53809c.png

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段進(jìn)行訪問,(需要配合編譯器,將軟件模塊編譯到不同到區(qū)域)即可有效防止低安全等級的軟件模塊在故障產(chǎn)生時對高安全等級模塊發(fā)生級聯(lián)醒錯誤。

MPU的配置是通過設(shè)置多個MPU region來實現(xiàn)的,每個MPU region的可配置選項包括: 被保護(hù)的起始地址,訪問權(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è)定好,在軟件運(yùn)行過程中不會被重新設(shè)置,不會在軟件中動態(tài)的更改BUS對內(nèi)存的訪問權(quán)限。

CMPU一般負(fù)責(zé)多核的內(nèi)存保護(hù),一般每個內(nèi)核都具備一定數(shù)量的CMPU,可以為運(yùn)行在該內(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的運(yùn)行過程中是可以更改權(quán)限的。當(dāng)各個OS Application的權(quán)限被設(shè)定好之后,OS會在OS Application切換時對MPU相關(guān)寄存器進(jìn)行重重新初始化,并設(shè)置位即將切換到的OS Application權(quán)限。當(dāng)出現(xiàn)訪問超過MPU權(quán)限允許范圍時,MCU exception會被出發(fā)并進(jìn)入其相應(yīng)的OS 處理函數(shù),用戶可以根據(jù)情況 Shutdown OS或者選擇進(jìn)入安全模式,從而有效阻止了軟件訪問故障的發(fā)生。

在OS SC3/SC4中OS Application分為兩類,具備最高安全等級的OS Application設(shè)定位Tusted Application,其他不具備Trusted屬性的Application 屬于Non-Trusted Application,OS和Trusted Application 運(yùn)行在Supervisor Mode下,Non-Trusted Application則運(yùn)行在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,進(jìn)而實現(xiàn)不同安全等級的軟件模塊的協(xié)同工作,并把故障級聯(lián)的概率降到允許范圍內(nèi)的需求。

2、SMPU和CMPU

2.1、SMPU特性

用于核之間的安全隔離,實現(xiàn)免于干涉SMPU限制核對某些內(nèi)存空間或者M(jìn)CU上通過總線訪問的外部資源,一般只限制寫權(quán)限在OS初始化時被初始化,運(yùn)行過程不會改變。

配置步驟

dfdefb1c-afa2-11ee-8b88-92fbcf53809c.png

2.2、CMPU特性

同一核上OS Application Task ISR之間的安全隔離

在啟動代碼或者運(yùn)行中設(shè)置,限制權(quán)限包括讀、寫、執(zhí)行權(quán)限

配置步驟:

dfedcaa2-afa2-11ee-8b88-92fbcf53809c.png

2.3、Static MPU Regions特性

對MPU Regions不指定具體的Owner,對所有軟件模塊都生效

系統(tǒng)啟動時設(shè)定好,可以是SMPU 或者CMPU,運(yùn)行過程中不會改變

2.4、Dynamic MPU Regions特性

對MPU Regions 指定Owner,Owner可以是OS Application TASK ISRS

根據(jù)Owner 運(yùn)行與否,代碼運(yùn)行過程中進(jìn)行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èi)大量的資源。一般情況下只有一部分軟件會開發(fā)生ASIL等級,其他模塊開發(fā)成相對較低的安全等級,為了達(dá)到freedom from inerference,需要限制低等級模塊對高等級模塊的訪問。下面舉例說明MPU配置的常見思路。

從Safety方面,高等級的軟件模塊可以訪問其Memroy以及安全等級較低的軟件模塊Memory。

從工具方面,MPU可以被配置為各個OS Application TASK ISR 分別獨(dú)立具備訪問范圍,工具并不會因為軟件模塊安全等級的高低而對OS RTE有區(qū)別配置,而只是采用模塊間的隔離策略。隔離機(jī)制不會生成在RTE中。

從系統(tǒng)角度,整體軟件至少需要一個Trusted部分(以O(shè)S Application為單位劃分),并且Trusted部分是安全等級最高的模塊,可以訪問其他模塊的Memory。

總結(jié),使用MemMap機(jī)制,將各個OS Application所占用Code Data資源進(jìn)行良好整齊的存放基礎(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進(jìn)行Stack設(shè)置,因此需要留一個Memory Region給到OS。

共同使用Static MPU 和Dynamic MPU,配合OsAppMemoryProtectionIdentifier的作用,盡量減少M(fèi)PU在代碼運(yùn)行過程中的重新初始化,這樣可以降低OS contex切換的時間。

e00354a8-afa2-11ee-8b88-92fbcf53809c.png

配置思路:

e0118aaa-afa2-11ee-8b88-92fbcf53809c.png

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è)單元

e02adca8-afa2-11ee-8b88-92fbcf53809c.png

在配置工具中查看硬件資源:

e03c867e-afa2-11ee-8b88-92fbcf53809c.png

針對OS Application /TASK /ISR設(shè)定Memory Region,依次設(shè)置其參數(shù)并關(guān)聯(lián)到需要生效的OS Application TASK ISR。根據(jù)需要對SMPU進(jìn)行配置,如果所有MPU都沒有使用SMPU,OS會在初始化時禁止 Gloabl SMPU Control Bit,SMPU將不會生效。同理CMPU,即使OS 設(shè)定為SC3,不設(shè)置任何MPU Region,那么MPU會被disable。

MPU配置如下圖所示,其中被標(biāo)注藍(lán)色框的選項是必須設(shè)置的選項:

e05bcf98-afa2-11ee-8b88-92fbcf53809c.png

MPC系列的特殊配置:

Memory Region Bus Master:設(shè)置允許訪問MPU設(shè)置地址的Master,僅針對SMPU有效

Memory Region Flag :訪問行為的屬性,可以參數(shù)硬件手冊

當(dāng)出現(xiàn)MPU錯誤時,代碼會進(jìn)入

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)限,有一部分寄存器需要在前者模式下才能被訪問,詳細(xì)可以參考RM手冊。OS會運(yùn)行在Privilege Mode,具有最高的訪問權(quán)限,可以訪問所有寄存器。

在采用不同的功能安全等級的軟件模塊協(xié)調(diào)工作的的系統(tǒng)軟件中,需要利用MPU單元防止低安全等級的模塊對硬件寄存器進(jìn)行訪問,同時限制除最高安全等級模塊之外的其他軟件模塊的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)初始化時,進(jìn)行MPU初始化,在此之前MPU處于Disable狀態(tài),一般在OS啟動初始化MCAL模塊,此時可以訪問Protected Register。在OS初始化以后,如果MCAL模塊需要在Privilege Mode運(yùn)行時,基本可以分為以下幾類:

1、Vector Modules,例如CAN/LIN ETH等通訊模塊,一般CAN需要勾選CanUserPeripheralAccessApi,并根據(jù)PROTED AREA中的定義相應(yīng)的OsApplication,CAN將會調(diào)用OS接口進(jìn)行privilege權(quán)限的獲取。

e06dc3b0-afa2-11ee-8b88-92fbcf53809c.png

2、MCAL模塊一般需要開啟User Mode,例如FlsEnableUserModeSupport,勾選以后,MCAL會采用privilege Mode進(jìn)行訪問。

3.1.3 OsShutdown的實現(xiàn)

AUTOSAR要求只有在Trusted OsApplication才可以進(jìn)行OsShutdown,否則將無法shutdown成功??梢酝ㄟ^Event的方式通知Trusted Task調(diào)用OsShutdown Api。但是需要設(shè)置一個高優(yōu)先級/不可搶占/拓展類的TASK,代碼示例如下:

e087d854-afa2-11ee-8b88-92fbcf53809c.png

在向FBL跳轉(zhuǎn)以及系統(tǒng)最后的Reset務(wù)必使用Mcu_PrefromReset,這樣才可以disable MPU,否則可以使用代碼disable MPU之后,在調(diào)用對應(yīng)的API進(jìn)行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ù),舉例如下:

e08f1876-afa2-11ee-8b88-92fbcf53809c.png

e0a2ed1a-afa2-11ee-8b88-92fbcf53809c.png

e0b96ed2-afa2-11ee-8b88-92fbcf53809c.png

e0cafc60-afa2-11ee-8b88-92fbcf53809c.png

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機(jī)制與OS數(shù)據(jù)的存放

MPU需要限制各個OsApplication Task ISR對各個地址的訪問權(quán)限,所以明確并整理好各個軟件模塊的代碼數(shù)據(jù)存放位置是關(guān)鍵。通過MemMap機(jī)制,和Link文件??梢詫⒏鱾€模塊的代碼和數(shù)據(jù)存放到指定的區(qū)域,從而實現(xiàn)MPU保護(hù)。如下圖,MemMap的作用。

e0e5bbfe-afa2-11ee-8b88-92fbcf53809c.png

當(dāng)發(fā)生MPU錯誤時,OS會進(jìn)入ProtectionHook,并返回E_OS_PROTECTION_MEMORY或者E_OS_PROTECTION_EXCEPTION。

04

Partition元素-RTE

RTE 作為動態(tài)配置的虛擬總線模塊,負(fù)責(zé) OS application 之間的數(shù)據(jù)交互和訪問,在具備 Memory。

partition 的系統(tǒng)中, OS application 之間的訪問會存在跨越安全等級的情況, RET 具備一定的免于干擾的。

機(jī)制,分別針對各 OS application 產(chǎn)生代碼和變量,在后續(xù)的軟件分區(qū)過程中分別將 RET 生成的對應(yīng)各。

OS application 的 memory 內(nèi)容分別歸其所屬。由于大部分的機(jī)制由 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)







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5294

    瀏覽量

    119817
  • ROM
    ROM
    +關(guān)注

    關(guān)注

    4

    文章

    562

    瀏覽量

    85623
  • MPU
    MPU
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    48701
  • ISR
    ISR
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    14389
  • BSW
    BSW
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    3500

原文標(biāo)題:MPU機(jī)制與實現(xiàn)詳解

文章出處:【微信號:談思實驗室,微信公眾號:談思實驗室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    詳解Linux內(nèi)核搶占實現(xiàn)機(jī)制

    本文詳解了Linux內(nèi)核搶占實現(xiàn)機(jī)制。首先介紹了內(nèi)核搶占和用戶搶占的概念和區(qū)別,接著分析了不可搶占內(nèi)核的特點及實時系統(tǒng)中實現(xiàn)內(nèi)核搶占的必要性。然后分析了禁止內(nèi)核搶占的情況和內(nèi)核搶占的時
    發(fā)表于 08-06 06:16

    虛擬示波器觸發(fā)機(jī)制實現(xiàn)方法

    由于源程序有些看不懂!虛擬示波器觸發(fā)機(jī)制實現(xiàn)方法。。以及屏幕波形的穩(wěn)定。實現(xiàn)方法。
    發(fā)表于 10-25 08:45

    MPU9255英手冊

    MPU9255英手冊
    發(fā)表于 10-24 11:07 ?25次下載

    詳解藍(lán)牙模塊原理與結(jié)構(gòu)

    電子發(fā)燒友網(wǎng)站提供《詳解藍(lán)牙模塊原理與結(jié)構(gòu).pdf》資料免費(fèi)下載
    發(fā)表于 11-26 16:40 ?94次下載

    詳解精密封裝技術(shù)

    詳解精密封裝技術(shù)
    的頭像 發(fā)表于 12-30 15:41 ?1604次閱讀

    詳解分立元件門電路

    詳解分立元件門電路
    的頭像 發(fā)表于 03-27 17:44 ?2867次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>詳解</b>分立元件門電路

    詳解pcb和smt的區(qū)別

    詳解pcb和smt的區(qū)別
    的頭像 發(fā)表于 10-08 09:31 ?3144次閱讀

    詳解pcb地孔的作用

    詳解pcb地孔的作用
    的頭像 發(fā)表于 10-30 16:02 ?1510次閱讀

    詳解TVS二極管

    詳解TVS二極管
    的頭像 發(fā)表于 11-29 15:10 ?1457次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>詳解</b>TVS二極管

    詳解pcb不良分析

    詳解pcb不良分析
    的頭像 發(fā)表于 11-29 17:12 ?1108次閱讀

    詳解PCB半成品類型

    詳解PCB半成品類型
    的頭像 發(fā)表于 12-11 15:41 ?1224次閱讀

    詳解pcb的msl等級

    詳解pcb的msl等級
    的頭像 發(fā)表于 12-13 16:52 ?8676次閱讀

    詳解pcb微帶線設(shè)計

    詳解pcb微帶線設(shè)計
    的頭像 發(fā)表于 12-14 10:38 ?2691次閱讀

    詳解pcb的組成和作用

    詳解pcb的組成和作用
    的頭像 發(fā)表于 12-18 10:48 ?1399次閱讀

    詳解pcb回流焊溫度選擇與調(diào)整

    詳解pcb回流焊溫度選擇與調(diào)整
    的頭像 發(fā)表于 12-29 10:20 ?1469次閱讀