在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

MPU抽象層設計與使用方法

冬至子 ? 來源:半畝方塘8067 ? 作者:半畝方塘8067 ? 2023-09-06 15:43 ? 次閱讀

內存保護單元
內存保護單元是一個可編程的設備,用來指定一塊特定內存區域的訪問權限,比如讀,寫,和從該區域執行代碼的權限。內存保護單元可以增加系統的健壯性,預防一些黑客的攻擊。ARMV7-M和ARMV8-M都提供了內存保護單元,簡稱MPU(Memory Protection Unit)。RISC-V也提供了相似的功能,簡稱PMP(Physical Memory Protection)。

項目進展
目前對ARMV7-M和ARMV8-M架構實現了初步的支持。框架通用的代碼在components/mp目錄下,硬件相關的代碼存放在libcpu,并提供了兩個簡單的例程。

功能簡介
RT-Thread操作系統的任務和內核使用同一個地址空間,全部運行在特權級。所有代碼默認對任何內存都有讀,寫,和執行的權限。使用MPU框架可以給特定的內存區域設置更低的權限,如只讀權限。MPU框架可以被用來實現以下的功能:

把關鍵數據或代碼設置成只讀,防止它們被破壞
任務隔離,設定特定地址只能由特定的任務訪問

檢測棧溢出
把數據區域設置為不可執行,防止棧溢出攻擊

使用方法

Menuconfig配置
通過menuconfig進入RT-Thread Components->Memory Protection配置相關選項

RT_USING_MEM_PROTECTION:開啟MPU抽象層
RT_USING_HW_STACK_GUARD:使用MPU檢測棧溢出。具體實現原理是在任務棧頂和棧底各設置一個MPU區域,權限設置為不可訪問。如果發生棧溢出,代碼訪問了MPU保護的地址,會觸發異常
NUM_MEM_REGIONS:硬件支持的MPU區域數量
NUM_EXCLUSIVE_REGIONS:使用rt_mem_protection_add_exclusive_region函數配置的內存區域數量
NUM_CONFIGURABLE_REGIONS:各任務可以通過rt_mem_protection_add_region函數配置的內存區域數量

內存區域配置
MPU抽象層提供了以下的API來配置任務對內存區域的權限:

rt_err_t rt_mem_protection_add_region(rt_thread_t thread, rt_mem_region_t *region):添加內存區域
rt_err_t rt_mem_protection_delete_region(rt_thread_t thread, rt_mem_region_t *region):刪除內存區域
rt_err_t rt_mem_protection_update_region(rt_thread_t thread, rt_mem_region_t *region):更新內存區域配置
內存區域的特性由rt_mem_region_t結構體定義:

typedef struct {
void start; / 起始地址 /
rt_size_t size; /
區域大小 /
rt_mem_attr_t attr; /
區域特性 */
} rt_mem_region_t;
其中attr可通過以下宏來定義,使用這樣定義的代碼在任何處理器架構下都是通用的:

RT_MEM_REGION_P_RW_U_RW:可讀寫
RT_MEM_REGION_P_RO_U_RO: 只讀
RT_MEM_REGION_P_NA_U_NA:不可訪問
RT_MEM_REGION_P_RWX_U_RWX:可讀寫,執行
RT_MEM_REGION_P_RX_U_RX:只讀,可執行
通常程序需要定義一塊內存區域只能由一個特定的任務訪問。允許訪問該內存區域的任務可以調用以下函數實現這個功能:

rt_err_t rt_mem_protection_add_exclusive_region(void *start, rt_size_t size):添加內存區域
rt_err_t rt_mem_protection_delete_exclusive_region(void *start, rt_size_t size):刪除內存區域
初始化
使用MPU抽象層之前需要在board.h文件定義固定的MPU區域數量:

#define NUM_STATIC_REGIONS 2
在board.c文件定義固定的MPU區域特性:

rt_mem_region_t static_regions[NUM_STATIC_REGIONS] = {
/* Flash region, read only */
{
.start = (void )STM32_FLASH_START_ADRESS,
.size = (rt_size_t)STM32_FLASH_SIZE,
.attr = RT_MEM_REGION_P_RX_U_RX,
},
/
SRAM regin, no execute */
{
.start = (void *)STM32_SRAM_START_ADDRESS,
.size = (rt_size_t)STM32_SRAM_SIZE,
.attr = RT_MEM_REGION_P_RW_U_RW,
},
};
任何代碼進行內存訪問,都要遵守這些區域的配置。可以用固定的MPU區域,把代碼段配置為只讀,可執行,把數據段配置成可讀寫,不可執行。

另外必須確保配置的MPU區域數量滿足以下的關系:

如果開啟了RT_USING_HW_STACK_GUARD:NUM_STATIC_REGIONS + NUM_CONFIGURABLE_REGIONS + NUM_EXCLUSIVE_REGIONS + 2 <= NUM_MEM_REGIONS
如果沒有開啟RT_USING_HW_STACK_GUARD:NUM_STATIC_REGIONS + NUM_CONFIGURABLE_REGIONS + NUM_EXCLUSIVE_REGIONS <= NUM_MEM_REGIONS
異常檢測
程序可以注冊鉤子函數,用來檢測內存異常:

rt_err_t rt_hw_mp_exception_set_hook(rt_hw_mp_exception_hook_t hook)
hook函數會在發生內存異常時被調用。函數聲明如下:

typedef void (*rt_hw_mp_exception_hook_t)(rt_mem_exception_info_t *)
rt_mem_exception_info_t結構體根據處理器機構定義,對于ARM架構,提供以下用來診斷內存異常的信息

typedef struct {
rt_thread_t thread; /* 觸發異常的線程 */
void addr; / 發生異常的地址 /
rt_mem_region_t region; /
地址對應的內存區域 /
rt_uint8_t mmfsr; /
MemManage Status寄存器的值 */
} rt_mem_exception_info_t;

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM處理器
    +關注

    關注

    6

    文章

    361

    瀏覽量

    41851
  • MPU
    MPU
    +關注

    關注

    0

    文章

    374

    瀏覽量

    48882
  • RT-Thread
    +關注

    關注

    31

    文章

    1303

    瀏覽量

    40293
  • 內存保護單元

    關注

    0

    文章

    6

    瀏覽量

    1620
收藏 人收藏

    評論

    相關推薦

    硬件抽象的設置

    我在進行PCI板的開發時經常能夠遇到硬件抽象這個概念,不知道這個硬件抽象是在PCI板上設置還是在軟件中設置的,用什么軟件設置
    發表于 07-21 12:06

    嵌入式操作系統的通用硬件抽象設計

    引言為了便于操作系統在不同硬件結構上進行移植,美國微軟公司首先提出了將底層與硬件相關的部分單獨設計成硬件抽象美國微軟公司提出了將操作系統底層與硬件相關的部分單獨設計成硬件抽象HAL
    發表于 12-07 10:30

    如何使用抽象設計可移植代碼?

    可移植代碼有什么重要性如何使用抽象設計可移植代碼求一種可移植軟件的設計方案
    發表于 04-26 06:57

    STM32Cube硬件抽象

      STM32Cubemx是一個便捷,方便管理的軟件平臺。極大的優化了開發的過程,盡管很多人對此不適應。它包括了ST產品的每個系列除了STM8。平臺包括了STM32Cube硬件抽象(一個STM32
    發表于 08-03 07:45

    芯片設計中的不同抽象

    在了解Verilog語言的更多細節之前,我們最好先了解一下芯片設計中的不同抽象
    發表于 11-10 08:05

    嵌入式系統硬件抽象的設計思想簡析

    嵌入式系統硬件抽象(HAL & BSP)的設計思想1 前言1.1 層次化思想1.2 模塊化思想1.3 對象化思想2 板級支持包(BSP)3 嵌入式系統硬件抽象的原理3.1 硬件
    發表于 02-11 07:49

    一文解讀RT-Thread MPU抽象的相關知識

    一、介紹MAL(MPU Abstract Layer),即mpu抽象。是RT-Thread自主研發的,支持安全的內存訪問。用戶代碼可以任意的訪問任務、外地的內存(內存任務的訪問權限、
    發表于 04-28 13:01

    將BLE抽象添加到新項目的正確方法是什么,應該從哪里下載抽象

    將BLE抽象添加到新項目的正確方法是什么,應該從哪里下載抽象
    發表于 04-11 07:06

    求分享SDK軟件組件和抽象文檔

    SDK 軟件組件和抽象文檔
    發表于 04-21 07:18

    嵌入式操作系統的通用硬件抽象設計

    摘要 基于嵌入式操作系統硬件抽象層理論,設計一種用于嵌入式操作系統內核開發的通用硬件抽象平臺。通用硬件抽象能夠為嵌入式操作系統內核的設計
    發表于 03-29 15:16 ?1218次閱讀
    嵌入式操作系統的通用硬件<b class='flag-5'>抽象</b><b class='flag-5'>層</b>設計

    電機控制硬件抽象(HAL)

    硬件抽象( Hardware Abstraction Layer,HAL)為更高層(例如:應用程序框架和客戶應用程序等等)提供基于API函數的服務,允許更高層獨立于實際的硬件細節執行面向硬件的操作。本文檔提供了硬件抽象
    發表于 03-21 16:38 ?3次下載

    芯片設計抽象及其設計風格

    在了解Verilog語言的更多細節之前,我們最好先了解一下芯片設計中的不同抽象
    發表于 11-05 15:51 ?12次下載
    芯片設計<b class='flag-5'>抽象</b><b class='flag-5'>層</b>及其設計風格

    STM32 硬件抽象(Hardware Abstraction la

    STM32 硬件抽象(Hardware Abstraction la
    發表于 12-09 12:06 ?1次下載
    STM32 硬件<b class='flag-5'>抽象</b><b class='flag-5'>層</b>(Hardware Abstraction la

    電纜護保護器的使用方法

    電纜護保護器的使用方法 電纜護保護器是一種用于保護電力電纜護套的裝置。其主要作用是對電纜護進行監測,當電纜護層出現泄漏時,能夠自動切斷電力系統,以保護設備和人身安全。 以下是電纜
    發表于 02-17 14:52 ?1079次閱讀

    AUTOSAR架構MCAL、服務、ECU抽象介紹

    1 微控制器抽象(MCAL) AUTOSAR CP的微控制器抽象(MCAL)是AUTOSAR軟件架構中的一個重要組成部分,它提供了對底層硬件的
    的頭像 發表于 10-27 15:36 ?6823次閱讀
    主站蜘蛛池模板: 妇女交性大片| 欧美成人亚洲欧美成人| 久久久久久久国产| 国产精品福利视频手机免费观看| 国产午夜一区二区在线观看| 插插插操操操| 91午夜在线观看| 美女免费视频一区二区三区| 在线观看网址你懂得| 樱桃磁力bt天堂| 天堂在线.www资源在线观看| 日本最色网站| 国内精品久久久久久影院老狼| a免费在线| 日日干狠狠干| 午夜黄色影院| 免费的黄视频| 四虎影院欧美| 另类free性欧美护士| 成人永久免费视频网站在线观看| 午夜免费啪在线观看视频网站| 免费观看午夜在线欧差毛片| 日本69sex护士www| 高h肉宠文1v1男男| 色视网站| 精品手机在线| 夜夜骑夜夜操| 波多野结衣的毛片| 男女交性视频免费播放| 特级aaaaaaaaa毛片免费视频| 美女黄网站| 午夜免费啪在线观看视频网站| 国产18到20岁美女毛片| 男女草逼视频| 色在线视频网站| 国产久爱青草视频在线观看| 天天干夜夜夜操| 中文字幕一区二区三区四区五区人| 一级毛片无毒不卡直接观看| 五月婷婷网站| 国产干美女|