ARM基础(3):MPU内存保护单元详解及例子

news2024/11/18 5:50:15

MPU(Memory Protection Unit)是ARM处理器中的一个特性,它提供了内存保护和访问控制的功能,通常用于实现操作系统的内存隔离和保护。比如我们可以设置所有的RAM为不可执行,这样就可以避免代码注入攻击。最近做项目过程中,使用的几个Cortex核都用到了MPU,我发现MPU不仅仅起到一个内存保护的作用,它还和Cache有关,还能加快外接存储设备的访问速度。所以这篇文章就来详细地介绍一下MPU。

文章目录

  • 1 MPU特点
  • 2 内存类型
  • 3 内存属性
  • 4 I.MX RT1170的MPU配置例子

这里以Cortex-M7系列内核为例对MPU进行介绍,实际上Cortex-M核在MPU方面基本上都一样,除了Cortex-M33,它取消了子区域和可重叠的特性,因为它能自定义每个区域大小,更加灵活。

1 MPU特点

MPU允许一个进程访问16个内存或外设区域(0~15),每个区域的位置和大小(必须是2^n,且大于32字节)是可配置的。

  • 每一个区域都可以进一步被划分为最多8个子区域,每个子区域的大小至少为32字节,这是由缓存行长度决定的
  • 除了16个区域外,还有一个编号为-1的默认区域,它的优先级是最低的
  • 这些区域可以重叠,也可以嵌套。区域15的优先级最高,区域0的优先级最低,这决定了区域重叠的行为。

来看一个例子:
在这里插入图片描述
上图显示了一个包含六个区域的示例。区域4与区域0和1重叠,区域5包含于区域3。由于优先级按升序排列,重叠区域(橙色)具有优先级。因此,如果区域0是可写的,而区域4是不可写的,那么位于0和4之间重叠的地址是不可写的。

  • MPU对于指令和数据的访问权限并没有做区分,而是使用相同的区域来控制对数据和指令的访问。
  • MPU还能定义其它内存属性,如一个区域的可缓存性,这些属性都会传递给系统的Cache单元或内存控制器。
    • ARM架构支持两级Cache:内部Cache(L1-Cache)和外部Cache(L2-Cache)。其中L1缓存位于处理器核心附近,距离处理器最近,提供最快的访问速度。L2缓存位于L1缓存之外,相对于处理器来说较远,但仍然比主存更快,提供较大的容量。

2 内存类型

一般有三种常见的内存类型:
1、Normal Memory:允许CPU以高效的方式对字节、半字和字进行加载和存储操作(编译器不知道内存区域类型)。对于普通内存区域,加载和存储的顺序不一定按照程序中列出的顺序执行。
2、Device Memory:加载和存储操作严格按照顺序执行,以确保寄存器按照正确的顺序进行设置。
3、Strongly Ordered Memory:一切操作都严格按照程序中列出的顺序执行,CPU会等待加载/存储指令执行完成后才执行程序流中的下一条指令。这会导致性能下降。

3 内存属性

MPU的区域属性和大小寄存器MPU_RASR(Region Attribute and Size Register)用来设置所有内存属性,寄存器各个字段的功能如下表所示:

bitsNameDescription
28XNExecute never
26:24APData access permission field (RO, RW, or No access)
21:19TEXType extension field
18SShareable
17CCacheable
16BBufferable
15:8SRDSubregion disabled. 1 = disabled, 0 = enabled
5:1SIZEthe size of the MPU protection region

(1)XN:控制代码的执行。当XN=1时,访问对应的内存区域将产生MemManage Fault
(2)AP:控制内存区域的访问权限,如下表所示

AP[2:0]Privileged permissionsUnprivileged permissionsDescription
000No accessNo accessAll accesses generate a permission fault
001RWNo accessAccess from a privileged software only
010RWROWritten by an unprivileged software generates a permission fault
011RWRWFull access
100UnpredictableUnpredictableReserved
101RONo accessRead by a privileged software only
110RORORead only, by privileged or unprivileged software
111RORORead only, by privileged or unprivileged software

(3)S:指示内存区域是否可共享。如果一个区域是可共享的,那么多个总线主控可以同时访问它,并且系统会提供数据同步机制。然而,如果一个区域是不可共享的,则需要软件来控制多个总线访问数据的一致性。

  • 对于有的芯片来说,不支持硬件层的数据同步机制,S就用来指示该区域是否为non-cacheable

(4)TEX,C,B:这三个字段定义内存区域的缓存属性,并能在一定程度上确定其可共享性(S字段)

TEXCBMemory typeDescriptionShareable
00000Strongly orderedStrongly orderedYes
00001DeviceShared deviceYes
00010NormalWrite through, no write allocateS bit
00011NormalWrite-back, no write allocateS bit
00100NormalNon-cacheableS bit
00101ReservedReservedReserved
00110UndefinedUndefinedUndefined
00111NormalWrite-back, write and read allocateS bit
01000DeviceNon-shareable deviceNo
01001ReservedReservedReserved
  • BufferableCacheable的不同?Bufferable主要关注内存访问的读写效率,用于预取数据或者根据其缓冲策略决定何时将数据写回内存。而Cacheable属性则主要关注数据的访问速度,允许处理器将数据存储在高速缓存中以加快访问。
  • Write through with no write allocate:在命中(缓存中存在所需数据)时,将数据写入缓存和主存。在未命中时,它只更新主存中的块,而写入缓存。
  • Write-back with no write allocate:当处理器执行写操作时,如果数据已经在缓存中,则只更新缓存中的数据,而不立即写回主存。只有在需要替换缓存中的数据时,才将最新的数据写回主存。
  • Write-back with write and read allocate:当处理器执行写操作时,如果数据已经在缓存中,则更新缓存中的数据并写到主存。当处理器执行读操作时,数据在缓存中不存在,它会将整个块从主存读取到缓存中

(5)SRD:标志特定子区域的启用或禁用状态。如果禁用了某个子区域,那么在该子区域范围内的访问将会被其他启用的区域所重叠覆盖。如果没有其他启用的区域与禁用的子区域重叠,则MPU会产生一个错误,表示该访问是非法的或不允许的。

Cortex-M7注意事项
(1)TCM(Tightly Coupled Memories,紧耦合内存)始终被视为不可缓存、不共享的普通内存,而不管MPU为TCM中的内存区域定义了什么样的内存类型属性。
(2)speculative prefetch
预取是处理器的一种优化技术,用于提前从主存中将数据加载到处理器的缓存中,以便在需要时可以更快地访问。然而,由于处理器无法事先准确地知道哪些数据将被实际使用,预取操作有时可能会带来不必要的开销。这会对一些对多次访问敏感的存储器或设备产生影响,如FIFO、LCD控制器等。同时,它可能会占用其它主设备的带宽,如LCD、DMA。

为了避免不必要的预取带来的性能损失,Cortex-M7处理器引入了constraint speculative prefetch的约束。这意味着在某些情况下,处理器会对预取操作进行限制,而不会执行预取操作,比如通过MPU的内存属性将内存类型改为Device MemoryStrongly Ordered Memory

4 I.MX RT1170的MPU配置例子

对于I.MX RT1170的Cortex-M7核来说来说,我们可以采用以下宏定义ARM_MPU_RBARARM_MPU_RASR配置一个MPU区域:

* \param Region            The region to be configured, number 0 to 15.
* \param BaseAddress       The base address for the region.
MPU->RBAR = ARM_MPU_RBAR(Region, BaseAddress);

* \param DisableExec       Instruction access disable bit, 1= disable instruction fetches.
* \param AccessPermission  Data access permissions, allows you to configure read/write access for User and Privileged mode.
* \param TypeExtField      Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral.
* \param IsShareable       Region is shareable between multiple bus masters.
* \param IsCacheable       Region is cacheable, i.e. its value may be kept in cache.
* \param IsBufferable      Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy.
* \param SubRegionDisable  Sub-region disable field.
* \param Size              Region size of the region to be configured, for example 4K, 8K.
MPU->RASR = ARM_MPU_RASR((DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size));

RT1170中默认的MPU配置篇幅很长,我也省略了一部分,因为有的内存的配置是一样的。另外对于Cache相关段的初始化我也省略了,这个在后续我会写一篇关于ICache和DCache的文章进行分析。如下所示为RT1170中默认的MPU配置代码:

  • 区域的基地址必须对齐到区域大小的整数倍
	/* Region 0 setting: Instruction access disabled, No data access permission. */
    MPU->RBAR = ARM_MPU_RBAR(0, 0x00000000U);
    MPU->RASR = ARM_MPU_RASR(1, ARM_MPU_AP_NONE, 0, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_4GB);

    /* Region 1 setting: Memory with Device type, not shareable, non-cacheable. */
    MPU->RBAR = ARM_MPU_RBAR(1, 0x80000000U);
    MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_512MB);

    /* Region 3 setting: Memory with Device type, not shareable, non-cacheable. */
    MPU->RBAR = ARM_MPU_RBAR(3, 0x00000000U);
    MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_1GB);

    /* Region 4 setting: Memory with Normal type, not shareable, outer/inner write back */
    MPU->RBAR = ARM_MPU_RBAR(4, 0x00000000U);
    MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_256KB);
    
	/* Region 8 setting: Memory with Normal type, not shareable, outer/inner write back. */
    MPU->RBAR = ARM_MPU_RBAR(8, 0x30000000U);
    MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_RO, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_16MB);

(1)Region 0:将芯片的整个地址映射,即32位寻址的地址最大范围4G,默认赋值为不可执行和不可访问。这是因为MPU的配置是可以被高优先级的配置所覆盖的,所以这样做的意义是给之后没有配置的内存区域默认赋一个权限
(2)Region 1:这是SDRAM的映射地址,这里将其定义为Device Memory,即non-shareable。表示取消CPU对这段内存预取功能。
(3)Region 3:将0x00000000~0x40000000的内存置为Device Memory,和Region 0一样,也是设定一个默认值
(4)Region 4:这是系统的ITCM的地址,设置Memory类型为Normal Memory。这里设置为non-shareablecacheablebufferable,表示使用缓存中的数据,仅当缓存数据被换出时才写入内存中
(5)Region 8:这是NOR Flash的映射地址,和Region 4的配置基本相同,只不过对于NOR Flash来说,使用FlexSPI映射的话,这段内存是只读的。如果需要写NOR Flash则需要调用FlexSPI的xfer函数产生相关的写时序

  • 还有配置AIPS寄存器映射的内存,这里也省略了,实际上也是配置成Device Momory

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度研究微软的资产负债表和财务状况以及未来投资价值

来源:猛兽财经 作者:猛兽财经 微软股票的关键指标 猛兽财经认为,微软公布的2023财年第三季度财务业绩,有三个关键指标值得投资者关注。 第一个关键指标是利息收入。微软的利息收入目前已经同比增长了44%,从2022财年第…

【Kubernetes存储篇】常见存储方案及场景分析

文章目录 一、持久化存储理论1、为什么要做数据持久化存储?2、常见持久化存储方案 二、案例:持久化存储方案1、emptydir临时存储卷2、hostPath本地存储卷3、NFS网络共享存储卷 一、持久化存储理论 官方中文参考文档: 1、为什么要做数据持久…

【三、网络配置与系统管理】

1 网络配置 ifconfig 显示网络接口的配置信息 [rootredis100 ~]# ifconfig ens33: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.100 netmask 255.255.255.0 broadcast 192.168.10.255inet6 fe80::f5c3:6a96:fe05:1965 prefixlen 64 scop…

该怎么学Python?自学Python的方法和资料整理!

导语 Python 作为一门简洁、易学且功能强大的编程语言&#xff0c;备受程序员和初学者的喜爱。如果你也想学习 Python&#xff0c;但不知从何入手&#xff0c;本文将为你整理一些自学 Python 的方法&#xff0c;助你快速入门并掌握这门语言。 为什么学习Python&#xff1f;&a…

【2023华中杯】C题 空气质量预测与预警 56页论文及Python代码

【2023华中杯】C题 空气质量预测与预警 56页论文及Python代码 1 题目 空气污染对人类健康、生态环境、社会经济造成危害&#xff0c;其污染水平受诸多因素的影响&#xff0c; 如 PM2.5、PM10、CO、气温、风速、降水量等&#xff0c;探究 PM2.5 等污染物浓度的因素&#xff0c…

POI导出Excel (满满的干货啊)

已经实现的POI导出Excel 步骤一&#xff1a;导入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi…

【js】js前端技巧之图片格式转换(File、Blob、base64):

文章目录 一、类型简介二、BLOB 与 File&#xff1a;【1】BLOB 转 File【2】File 转 BLOB 三、 BLOB 与 base64&#xff1a;【1】BLOB(url) 转 base64【2】base64 转 BLOB 四、File 与 base64&#xff1a;【1】File 转 base64【2】base64 转 File 五、案例&#xff1a; 一、类型…

AWS CodeWhisperer 心得体会:安装与使用

大家好&#xff0c;今天我要和大家分享一下我在使用 AWS CodeWhisperer 这个工具时的心得体会。首先&#xff0c;让我们了解一下什么是 AWS CodeWhisperer。 什么是 AWS CodeWhisperer&#xff1f; AWS CodeWhisperer 是一个用于帮助开发者在 AWS 云平台上更轻松地编写、测试…

从源码全面解析 dubbo 服务订阅的来龙去脉

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;CSDN博客专家&#xff0c;阿里云专家博主&#x1f4d5;系列专栏&#xff1a;Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

LearnOpenGL-高级光照-1.Blinn-Phong

本人初学者&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 文章目录 高级光照Phong光照的缺点Blinn-Phong介绍例子 GLSL中遇到的BUG 高级光照 Phong光照的缺点 造成Phong光照缺点的两个条件 当物体的高光反光度&#xff08;shiness&#xff09;比较小时 什么是高光…

测试员将迎来春天

这几年因为疫情、经济寒冬&#xff0c;导致IT从业者工作地很不容易。 而IT从业者中的测试员&#xff0c;这两年过得尤为艰难。大家都知道&#xff0c;不直接生产的测试员&#xff0c;在企业降本增效的口号下一定是首当其冲被优化掉的成本。所以&#xff0c;小厂倒了一大批&…

沐风晓月个人博客折腾记: 从零开始加上漂亮的前端模板,轻松提升博客品味

前言 在个人博客折腾记的专栏里&#xff0c;我们已经安装好了wordpress&#xff0c;能用但看上去不够好看&#xff1a; 我们希望让前端模板好看一点&#xff0c;如果你有好的前端模板推荐&#xff0c;可以评论区留言哦。 如果你还没有搭建wordpress 可以参考&#xff1a; 利…

C++开发—远程控制

C开发—远程控制 一&#xff0c;准备二&#xff0c;安装版本控制工具1&#xff0c;安装gitforwindows2&#xff0c;安装乌龟git1&#xff0c;安装乌龟git应用2&#xff0c;安装乌龟git对应的语言包 3&#xff0c;设置Visual Studio的git插件4&#xff0c;创建git项目 三&#x…

React Hook入门小案例 在函数式组件中使用state响应式数据

Hook是react 16.8 新增的特性 是希望在不编写 class的情况下 去操作state和其他react特性 Hook的话 就不建议大家使用class的形式了 当然也可以用 这个他只是不推荐 我们还是先创建一个普通的react项目 我们之前写一个react组件可以这样写 import React from "react&qu…

Java学习笔记(视频:韩顺平老师)2.0

如果你喜欢这篇文章的话&#xff0c;请给作者点赞哟&#xff0c;你的支持是我不断前进的动力。 因为作者能力水平有限&#xff0c;欢迎各位大佬指导。 变量 基本数据类型⭐️ 数值型 基本数据类型转化 自动类型转换 强制类型转换 基本数据类型和String类型转换 变量 变量…

Vulnhub靶机渗透:MY FILE SERVER: 1

MY FILE SERVER: 1 nmap扫描端口扫描服务扫描漏洞扫描选择渗透方向 21/2121 ftp445 samba2049/20048 nfs80 http目录爆破 获得立足点提权4061140847 获取flag 靶机链接: https://www.vulnhub.com/entry/my-file-server-1,432/ 靶机IP&#xff1a;192.168.54.33 kali IP&#x…

人工智能轨道交通行业周刊-第48期(2023.6.5-6.11)

本期关键词&#xff1a;铁路测绘、动车组限速、铁路四电、智源大会、苹果AR眼镜、AIGC商业落地 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMet…

如何通过绩效考核对互联网人精准打击条条致命?

在“经济形势就业压力”的双重打击下&#xff0c;打工人变得越来越温顺。曾经闹着要整顿职场的大多年轻人&#xff0c;也从年少轻狂逐步走向少年老成&#xff0c;突然少了许多“XX后整顿职场”这样的声音。在严峻的复杂形势下&#xff0c;大多公司为了降本增效&#xff0c;殚精…

2017~2018学年《信息安全》考试试题(A3卷)

北京信息科技大学 2017 ~2018 学年第一学期 《信息安全》考试试题 (A3 卷) 课程所在学院&#xff1a;计算机学院 适用专业班级&#xff1a; - 考试形式&#xff1a;闭卷 一、单选题(本题满分 20 分&#xff0c;共含 10 道小题&#xff0c;每小题 2 分) Wanncry 勒索攻击通过加…

LLM下的讨论230611

三、我们能研究什么&#xff1f; 在大模型时代&#xff0c;可以考虑深挖的方向&#xff0c;供大家参考&#xff1a; 3.1 Retrieval augmented in-context learningGPTs完成了NLP范式的更新迭代&#xff1a;从传统的有监督学习&#xff08;Supervised Learning&#xff09;转变…