ARM-MPU内存保护单元详解

本文详细介绍了ARM-MPU在armv7-m架构下的工作原理和功能,包括其增强系统健壮性、防止非法访问的能力。讨论了MPU的寄存器模块,如MPU_TYPER、MPU_CTRL、MPU_RNR和MPU_RASR,并提供了一个简单的MPU配置示例。通过启用MPU,可以保护关键数据区域,防止堆栈溢出、数组越界等错误,确保系统安全。
摘要由CSDN通过智能技术生成

ARM-MPU 详解

简介

​ MPU(Memory Protection Unit) 内存保护单元。 本文主要讲 armv7-m 架构 架构下的 MPU。在 armv7-m 架构下,Cortex-M3 和 Cortex-M4 处理器对 MPU 都是选配的,不是必须的。

​ MPU 是一个可以编程的 device 设备,可以用来定义内存空间的属性,比如特权指令和非特权指令以及 cache 是否可访问。armv7-m 通常支持 8 个 region。一个 region 就代表一段连续的区域。

​ MPU 可以让嵌入式系统更加健壮,以及保护一些加密区域,可以用来防止黑客攻击。

​ MPU 有以下能力可以增加系统的健壮性:

  • 可以阻止用户去破坏操作系统需要使用的数据
  • 可以防止一个任务去非法访问其他任务的数据,将任务完全隔离开
  • 可以把关键数据区设为只读,从而不被破坏
  • 检测其他意外访问,比如,堆栈溢出,数组越界等。

原理讲解

​ 通常 MPU 功能这个是由操作系统提供的服务。在嵌入式调试的时候,我们经常会遇到 hardfault,这个时候一般情况可能是某个指针指到未知的地方,然后对该地址进行修改赋值,会触发 hardfault。MPU 的功能其实和这个功能基本类似。

​ 首先理解以下两点,基本上可以大概理解 MPU:

  1. MPU 可以定义某些特定的地址区域的属性,这个属性可以定义成很多类型,比如定义成非特权状态下不可以赋值
  2. 如果非特权指针不小心访问到这个地址区域并且尝试给该区域赋值修改,这个时候会触发 MemManage fault 或者 hardfault 中断,代表你的程序不被允许修改该区域。

MPU 本质上就是为了保护某一段地址区域不被非授权状态的程序进行访问。

比如,RTOS中的一些特殊的变量,用户线程是不被允许访问和修改的,这个时候如果你启用了 MPU,并且保护了这些变量,那用户即使知道这里的实际的物理地址,也是不被允许访问和修改的。

MPU 寄存器模组

MPU 主要有以下寄存器

名称 地址偏移
MPU 类型寄存器 TYPER 0xE000ED90
MPU 控制寄存器 CTRL 0xE000ED94
MPU region 号寄存器 RNR 0xE000ED98
MPU region 基地址寄存
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值