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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

AUTOSAR內(nèi)存分區(qū)和MPU關系簡述

汽車ECU開發(fā) ? 來源:AutomotiveSoftwareEngineer ? 2024-03-18 11:15 ? 次閱讀

MPU的功能

wKgaomX3spuAIr-1AAB0LYdjRW0563.jpg

MPU功能簡述

MPU保護與當前執(zhí)行的代碼“不相關“的所有數(shù)據(jù)。

“不相關”是相關內(nèi)存地址的權限受限制,或者是程序訪問內(nèi)存地址的范圍于其無關,阻止關鍵數(shù)據(jù)被破壞,使嵌入式系統(tǒng)更加健壯與安全。

MPU作用主要有兩個方面:

為兩個保護,一個檢測

1)MPU的保護作用

指訪問區(qū)域的保護和讀寫區(qū)域的保護。

① 訪問區(qū)域的保護。

可以將內(nèi)存區(qū)域劃為特權區(qū)域和普通區(qū)域,特權區(qū)域只有特權用戶才能訪問,普通用戶被禁止訪問,以此來保護特定的數(shù)據(jù)。

常見的應用場景:

1> 對帶系統(tǒng)的來說,可以設置數(shù)據(jù),以防止用戶應用程序破壞操作系統(tǒng)使用過程中的數(shù)據(jù)。

2> 隔離任務,以防止一個任務訪問其他任務的數(shù)據(jù)。

3> 將SRAM或者RAM空間定義為不可執(zhí)行,防止代碼注入。

② 讀寫區(qū)域的保護。

設置指定的區(qū)域為只讀,可以有效的防止比較關鍵的數(shù)據(jù)被錯誤修改。

2)MPU的檢測功能

指可以檢測堆和棧的溢出情況及數(shù)組有沒有越界。

功能安全中對內(nèi)存分區(qū)MPU的相關描述

汽車ECU軟件是高度模塊化的嵌入式軟件,其功能實現(xiàn)是可以為非功能安全,和功能安全的SWC組合,它們分別擁有不同的ASIL安全等級。

wKgaomX3spuAM8-FAAD_AF1j25A516.jpg

根據(jù)ISO26262,如果嵌入式軟件包含不同ASIL等級的SWC,要么整個軟件工程都需要基于最高安全等級的要求進行開發(fā),需要保證擁有更高安全等級的SWC的操作不會受到其他SWC的干擾,也即需要做到FFI(Freedom from interference)的設計。

基于更低安全等級要求開發(fā)的SWC,可能會出現(xiàn)錯誤地訪問到更高安全等級SWC的內(nèi)存區(qū)域,產(chǎn)生干擾。

為此,SWC需要運行在不同的內(nèi)存區(qū)域,或者不同的內(nèi)存分區(qū),來防止類似的內(nèi)存訪問違例。

wKgZomX3spuAK_H2AAEUuQ7-yaI262.jpg

ISO26262中,以下內(nèi)存相關的故障影響被視為SWC之間產(chǎn)生干擾的原因:

內(nèi)容損壞

讀寫區(qū)域?qū)儆诹硪粋€SWC

數(shù)據(jù)不一致

棧溢出或棧下溢

要滿足上述定義,是MPU內(nèi)存保護的目標,也可以通過限制對于內(nèi)存以及內(nèi)存對應的硬件的訪問。

這里的內(nèi)存分區(qū)意味著:

各OS Application運行在相互保護(不干涉)的內(nèi)存區(qū)域,在某一個分區(qū)上運行的代碼,無法修改另一個分區(qū)的內(nèi)存。

內(nèi)存分區(qū)也可以保護只讀內(nèi)存段(例如代碼執(zhí)行)以及內(nèi)存對應的硬件。

內(nèi)存分區(qū)和用戶/特權模式可以保證SWC之前互不干擾——即使某一個SWC出現(xiàn)了內(nèi)存相關的故障,也不會對其他軟件模塊有影響。

如果一個SWC運行在用戶模式,那么它對CPU資源/指令的訪問也是受限制的。

MPU的微控制器有專用的硬件

即內(nèi)存保護單元(MPU),來支持內(nèi)存分區(qū)。

wKgZomX3spuAV2evAABGB8Zm_xE658.jpg

若想深入理解上述的MPU描述,得先來看下,內(nèi)存分區(qū)和MPU的基礎知識。

計算機程序執(zhí)行的基礎簡介

內(nèi)存

計算機的主要作用是對輸入數(shù)據(jù)進行處理和運算后輸出,CPU處理器主要完成數(shù)據(jù)的處理運算,但輸入輸出數(shù)據(jù)包括處理過程中的臨時數(shù)據(jù)需要有一個空間去存放,這個臨時存放數(shù)據(jù)供處理器和外設使用的地方就是內(nèi)存。

wKgaomX3spuAV7RuAABnBrStZBE939.jpg

如上圖,為了提高效率把存放程序(也即控制指令)和數(shù)據(jù)(也即操作數(shù))的空間分開,同時把訪問指令與訪問數(shù)據(jù)的總線分開,使取指令和執(zhí)行指令能夠重疊(處理器的流水線)。

內(nèi)存尋址

wKgZomX3spuAEbAgAACsXxyhfJY935.jpg

處理器與內(nèi)存之間有地址總線用于尋址,有數(shù)據(jù)總線用于傳輸數(shù)據(jù),當然也有相應的控制線來讀寫操作。

wKgaomX3spuASCcBAAIFx9TNW5k653.jpg

存儲器地址的映射簡介

wKgaomX3spuAJsYQAAS_VxC0iTA783.jpg

存儲器本身不具有地址信息,它的地址是由芯片廠商或用戶分配,如圖所示,給存儲器分配地址的過程稱為存儲器映射。

如果內(nèi)核整體可以尋址的 0 到 2^32 -1 共計 4GB 的尋址空間。功能部件RAM, Flash,外設等共同排列在一個4GB的地址空間內(nèi)。

地址分配

程序C語言通過這些地址可以訪 問 RAM、Flash、外設等,進行讀寫操作。

C編譯的程序占用的內(nèi)存分為以下幾個部分:

wKgZomX3spuAZ98xAACXKaK0p4w862.jpg

棧區(qū)(stack)— 由編譯器自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構中的棧。

堆區(qū)(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時可能由OS回收 。注意它與數(shù)據(jù)結(jié)構中的堆是兩回事,分配方式倒是類似于鏈表。

全局區(qū)(靜態(tài)區(qū))(static)—全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。

文字常量區(qū)(.const)—常量字符串就是放在這里的。

程序代碼區(qū)(.text)—存放函數(shù)體的二進制代碼。

棧:只要棧的剩余空間大于所申請空間,系統(tǒng)將為程序提供內(nèi)存,否則將報異常提示棧溢出。MPU也支持堆棧溢出檢測,簡單如下圖。

wKgZomX3spuAExeKAAA7Nz-KGd4060.jpg

代碼例子

wKgaomX3spuAEL-iAAFP6IaP8H4378.jpg

inta=0;//全局初始化區(qū)
int a = 0; //全局初始化區(qū)
char *p1; //全局未初始化區(qū)
main() {
int b; //棧
char s[] = "abc"; //棧
char *p2; //棧
char *p3 = "123456"; //123456?在常量區(qū),p3在棧上。
static int c = 0; //全局(靜態(tài))初始化區(qū)
    p1 = (char *)malloc(10);
    p2 = (char *)malloc(20);
//分配得來得10和20字節(jié)的區(qū)域就在堆區(qū)。
strcpy(p1, "123456"); //123456?放在常量區(qū),編譯器可能會將它與p3所指向的"123456"優(yōu)化成一個地方。
}

MPU內(nèi)存保護單元

Memory Protection Unit

上文描述的內(nèi)存區(qū),堆棧區(qū),數(shù)據(jù)區(qū),代碼區(qū)都可以被MPU保護,安全相關的微處理器通常都在硬件級別上支持內(nèi)存分區(qū)保護,MPU主要是通過內(nèi)存映射的地址范圍限制,和監(jiān)控非受信區(qū)域的內(nèi)存訪問來實現(xiàn)的。

wKgaomX3staAYDmPAADRYBF8LkQ452.jpg

MPU可以保護的區(qū)域為內(nèi)存映射區(qū)memory map,可以設置不同存儲區(qū)域的存儲器訪問特性(如只支持特權訪問或全訪問)和存儲器屬性(如可緩存、可緩沖、可共享),對存儲器(主要是內(nèi)存和外設)提供保護,保護可執(zhí)行程序的(data、code和stack)區(qū)域。

MPU 的Region區(qū)域

是可編程保護區(qū)域(需要控制器硬件支持),如下圖

wKgZomX3staAYErPAADVW2HyLQg573.jpg

wKgZomX3steAVnDwAADdh7eBgy0792.jpg

MPU的配置是通過設置多個MPU寄存器,定義多個MPU region,每個MPU region的可配置選項包括: 被保護的起始地址,大小size,訪問權限,所屬硬件MPU分類,Region Owner 以及有效ID等。

wKgZomX3staAYEeTAABc-R9FvWU751.jpg

MPU在執(zhí)行其功能時,也是以“region區(qū)域”為單位的。

通過上述的MPU配置,各個軟件模塊將具備對不同memory區(qū)域的不同訪問權限。

如圖,一個region上述配置的一段連續(xù)的地址,它們的位置和范圍都要滿足一些限制。

MPU是可以管理所有的存儲空間(如圖 4G),可以劃分不同的Region內(nèi)存區(qū)域,并為每個Region設置訪問權限與規(guī)則,不同的Region允許相互重疊,重疊區(qū)域受多重訪問規(guī)則的限制。

Link命令對于內(nèi)存的設置

編譯器關聯(lián)的,可參考下面TI的解釋

https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_Linker-Command-File-Primer.html

特權模式與用戶模式

是內(nèi)核的執(zhí)行模式。

當代碼運行在特權模式下,代碼擁有所有的訪問許可;

而代碼運行在用戶模式,則訪問權限受限制。

也是MPU中所定義的內(nèi)存訪問規(guī)則。

AUTOSAR中的定義

內(nèi)存分區(qū)的定義

wKgaomX3staALuhYAAGS7b0Zu-Y658.jpg

如上圖,一般來說,

BSW模塊運行在授信模式/監(jiān)控者模式內(nèi)存分區(qū)當中。

部分SWC分組并放置到非授信/用戶模式內(nèi)存分區(qū)當中。

個別SWC也運行在授信/監(jiān)控者模式內(nèi)存分區(qū)當中。

項目中可以有多個非授信/用戶分區(qū),每個分區(qū)都可以包含一個或多個SWC。

上圖中,分區(qū)是以應用軟件OS-Application為對象定義的,OS-Application和內(nèi)存分區(qū)(Partition)之間,是一對一的關系。

如何理解OS-Application?

下文簡述

如下圖中,應用程序內(nèi)的 AUTOSAR SWC

wKgaomX3syOAXsBZAABizeS-lKU542.jpg

在AUTOSAR架構中,應用程序位于RTE之上的,基于應用功能邏輯定義,內(nèi)部包含一組存在信息交換的軟件組件(SWC)。

軟件組件SWC是實現(xiàn)一系列的原子功能(最小單元不可拆分),SWC包含一系列的功能實現(xiàn)和變量定義,這些功能實現(xiàn)和變量定義對于外部是不可見的,僅能通過公布的RTE接口使用。

SWC以周期性執(zhí)行或者以外部觸發(fā)的runnable中執(zhí)行。

從分配的角度來看,一個SWC可以由多個Runnable構成,一個OS-Task可以觸發(fā)多個Runnable(同一個SWC內(nèi)的Runnable可以在不同的OS-Task上執(zhí)行),一個OS-Application可以管理多個OS-Task。

AUTOSAR OS-Application

wKgaomX3steAIR9EAACTN05oCzs270.jpg

AUTOSAR的OS-Application是操作系統(tǒng)對象的集合體,其中包括任務(Tasks),中斷服務程序 (ISRs),調(diào)度表 (Schedule Tables),計數(shù)器 (Counters)和警報 (Alarms),這些對象構成一個內(nèi)聚的功能單元。

OS-Application可以分為2類:

受信任 (Trusted)的OS-Application

可以不受那些運行時的監(jiān)控 (Monitoring)或者保護 (Protection)特性的限制執(zhí)行。

這類應用可以不受限的訪問內(nèi)存和操作系統(tǒng)API。受信任的應用對于執(zhí)行時間上也不受限制,同時也可以在任何支持的處理器上以特權模式執(zhí)行。

不受信任 (Non-trusted)的OS-Application

不可以在運行時監(jiān)控及保護機制關閉的時候執(zhí)行。這類應用在訪問內(nèi)存、操作系統(tǒng)API時都有限制,同時也不允許以特權模式執(zhí)行。

AUTOSAT Memory Mapping

AUTOSAR有memory mapping的特性可支持上述內(nèi)存分區(qū)Memory

Partitioning,從而提供MPU需要的Non-trusted 和Trusted的內(nèi)存分配區(qū)域設置。

wKgZomX3steAWHEqAABp2IxsNUY035.jpg

詳細見AUTOSAR_SWS_MemoryMapping.pdf

MPU的限制規(guī)則

內(nèi)存分區(qū)Memory Partitioning的限制

wKgaomX3steAfKDnAAHadi3TSC4049.jpg

在同一個OS-Application內(nèi)的對象相互訪問,提供了不受限的通信支持。

在一個OS-Application內(nèi)的各個對象可以互相訪問,可以分屬于不同的SWC。

MPU工作的過程

wKgZomX3steATe9VAAS_OlEHQfQ712.jpg

操作系統(tǒng)要事先根據(jù)功能,和軟件架構,定義軟件分區(qū),進行MPU region配置,

任務運行時,操作系統(tǒng)根據(jù)MPU的配置,檢測和阻止不正確的內(nèi)存訪問,若出現(xiàn)了在非受信區(qū)域的內(nèi)存訪問或者執(zhí)行了不合法的CPU指令,這些訪問首先會被阻止,然后處理器硬件會產(chǎn)生一個異常 (Exception),記錄故障碼DTC。

操作系統(tǒng)和RTE會處理這些異常:執(zhí)行內(nèi)存分區(qū)的關閉 (Shutdown),或重啟分區(qū)內(nèi)的所有SWC的動作。

總結(jié)語

AUTOSAR中提供的內(nèi)存分區(qū)機制,通過SWC,RTE,Mem映射實現(xiàn),限制訪問內(nèi)存,支持內(nèi)存保護。而內(nèi)存分區(qū)的定義(trust/un trust)和限制規(guī)則由控制器的系統(tǒng)設計決定。



審核編輯:劉清

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

    關注

    48

    文章

    7454

    瀏覽量

    150853
  • C語言
    +關注

    關注

    180

    文章

    7594

    瀏覽量

    135857
  • MPU
    MPU
    +關注

    關注

    0

    文章

    340

    瀏覽量

    48699
  • AUTOSAR
    +關注

    關注

    10

    文章

    349

    瀏覽量

    21444
  • SRAM芯片
    +關注

    關注

    0

    文章

    65

    瀏覽量

    12044

原文標題:AUTOSAR 內(nèi)存分區(qū)和MPU關系講解

文章出處:【微信號:eng2mot,微信公眾號:汽車ECU開發(fā)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Autosar軟件開發(fā)技術概述

    AUTOSAR是由全球汽車制造商、部件供應商及其他電子、半導體和軟件系統(tǒng)公司聯(lián)合建立,各成員保持開發(fā)合作伙伴關系。自2003年起,各伙伴公司攜手合作,致力于為汽車工業(yè)開發(fā)一個開放的、標準化的軟件架構
    發(fā)表于 12-26 10:34

    AUTOSAR的工作原理是什么?為什么需要AUTOSAR?

    AUTOSAR的工作原理是什么?為什么需要AUTOSAR?
    發(fā)表于 05-17 06:44

    如何在MCU系統(tǒng)中實現(xiàn)完全分區(qū)隔離

    的處理器來實現(xiàn)可接受的進程切換時間,而且在任務級別并不合適。使用內(nèi)存保護單元 (MPU) 實現(xiàn) MCU 的完全分區(qū)隔離是可能的,但難度很大。這是討論如何在 MCU 系統(tǒng)中實現(xiàn)完全分區(qū)
    發(fā)表于 11-01 08:17

    AUTOSAR是什么

    一、AUTOSAR是什么AUTOSAR組織自己的介紹是AUTOSAR (AUTomotive Open System ARchitecture) is a worldwide development
    發(fā)表于 11-10 07:47

    介紹AUTOSAR支持的四種功能安全機制

    1、AUTOSAR的四種功能安全機制雖然AUTOSAR不是一個完整的安全解決方案,但它提供了一些安全機制用于支持安全關鍵系統(tǒng)的開發(fā)。本文用于介紹AUTOSAR支持的四種功能安全機制:內(nèi)存
    發(fā)表于 06-10 17:33

    AUTOSAR功能安全機制之內(nèi)存分區(qū)與實現(xiàn)

    1、AUTOSAR功能安全機制之內(nèi)存分區(qū)與實現(xiàn)  在AUTOSAR架構中,應用軟件位于RTE上方,由互連的AUTOSAR SWC組成,這些組
    發(fā)表于 09-19 15:55

    基于迭代填充的內(nèi)存計算框架分區(qū)映射算法

    針對內(nèi)存計算框架Spark在作業(yè)Shuffle階段一次分區(qū)產(chǎn)生的數(shù)據(jù)傾斜問題,提出一種內(nèi)存計算框架的迭代填充分區(qū)映射算法(IFPM)。首先,分析Spark作業(yè)的執(zhí)行機制,建立作業(yè)效率模
    發(fā)表于 12-05 16:32 ?0次下載
    基于迭代填充的<b class='flag-5'>內(nèi)存</b>計算框架<b class='flag-5'>分區(qū)</b>映射算法

    簡單剖析虛擬內(nèi)存與交換分區(qū)

    很多朋友會把虛擬內(nèi)存認為就是交換分區(qū)。其實,虛擬內(nèi)存并非真正存在的物理空間,它僅僅是一個虛擬的東西。
    的頭像 發(fā)表于 02-09 08:44 ?6221次閱讀

    存儲器的分區(qū)內(nèi)存管理與分區(qū)存儲管理

    內(nèi)存固定地劃分為若干個大小不等的分區(qū)供各個程序使用,每個分區(qū)的大小和位置都固定,系統(tǒng)運行期間不再重新劃分。
    發(fā)表于 05-26 10:28 ?3084次閱讀
    存儲器的<b class='flag-5'>分區(qū)內(nèi)存</b>管理與<b class='flag-5'>分區(qū)</b>存儲管理

    Cortex-M內(nèi)核的MPU內(nèi)存保護單元

    講講Cortex-M內(nèi)核的MPU內(nèi)存保護單元
    的頭像 發(fā)表于 03-04 11:17 ?3598次閱讀
    Cortex-M內(nèi)核的<b class='flag-5'>MPU</b><b class='flag-5'>內(nèi)存</b>保護單元

    為什么要使用MPUMPU如何實現(xiàn)內(nèi)存保護?

    如果你開發(fā)的嵌入式項目,因內(nèi)存溢出,或者內(nèi)存故障等一些原因,造成了重大經(jīng)濟損失,或者造成了重大事故,你就能體會為什么要使用內(nèi)存保護單元(MPU)了。
    的頭像 發(fā)表于 07-05 17:38 ?6641次閱讀
    為什么要使用<b class='flag-5'>MPU</b>?<b class='flag-5'>MPU</b>如何實現(xiàn)<b class='flag-5'>內(nèi)存</b>保護?

    AUTOSAR SWC內(nèi)存分區(qū)與實現(xiàn)

    AUTOSAR架構中,應用軟件位于RTE上方,由互連的AUTOSAR SWC組成,這些組件以原子方式封裝了應用軟件功能的各個組成部分。
    發(fā)表于 10-08 11:58 ?2535次閱讀
    <b class='flag-5'>AUTOSAR</b> SWC<b class='flag-5'>內(nèi)存</b><b class='flag-5'>分區(qū)</b>與實現(xiàn)

    AUTOSAR架構之內(nèi)存分區(qū)與實現(xiàn)

    AUTOSAR SWC獨立于硬件,因此可以集成到任何可用的ECU硬件上。為了便于ECU內(nèi)部和內(nèi)部的信息交換,AUTOSAR SWC僅通過RTE進行通信。
    發(fā)表于 11-11 11:49 ?1176次閱讀

    為什么要使用MPU?MPU如何實現(xiàn)內(nèi)存保護?

    如果你開發(fā)的嵌入式項目,因內(nèi)存溢出,或者內(nèi)存故障等一些原因,造成了重大經(jīng)濟損失,或者造成了重大事故,你就能體會為什么要使用內(nèi)存保護單元(MPU)了。
    的頭像 發(fā)表于 02-24 11:59 ?2594次閱讀

    什么是MPU?MPU在哪些方面保護內(nèi)存安全?

    內(nèi)存保護單元(MPU)是一種硬件機制,通過只允許代碼訪問需要的內(nèi)存和外設來提高嵌入式設備的安全性。
    的頭像 發(fā)表于 06-12 09:06 ?1w次閱讀
    什么是<b class='flag-5'>MPU</b>?<b class='flag-5'>MPU</b>在哪些方面保護<b class='flag-5'>內(nèi)存</b>安全?