当前位置: 首页 > news >正文

内存保护_1:Tricore芯片MPU模块介绍

上一篇 | 返回主目录 | 下一篇

内存保护_1:Tricore芯片MPU模块介绍

  • 1 何为MPU
  • 2 MPU相关的硬件子系统
    • 2.1 基于地址范围保护逻辑说明
      • 2.1.1 地址范围寄存器
      • 2.1.2 读、写、执行权限寄存器
      • 2.1.3 保护集设置位
      • 2.1.4 内存保护功能使能位
      • 2.1.5 核的内存保护范围获取说明
      • 2.1.6 保护使能基本机理
    • 2.2 外设寄存器操作及指令执行保护
      • 2.2.1 用户模式设置状态位(PSW程序状态寄存器)
      • 2.1.2 用户模式下指令及寄存器访问权限设置(SYSCON系统控制寄存器)
    • 2.3 错误处理机制
    • 2.4 寄存器操作指令说明
      • 2.4.1 相关寄存器操作指令
      • 2.4.2 写入指令(MTCR)
      • 2.4.3 读出指令(MFCR)

1 何为MPU

  • MPU(Memory Protection Unit),即存储保护单元,它是位于存储器内部的一个可编程的区域,定义了存储器的属性和存储器的访问权限。用于检测系统访问非法地址或者访问无许可的地址,在触发错误后,会进入硬件错误异常(通过Trap可对错误进行识别,并进行相应的处理)。

  • 在如下的情况中使得系统更加安全:
    1)、避免应用任务破坏其他任务或者OS内核使用的栈或数据存储器。
    2)、避免非特权任务访问对系统可靠性和安全性很重要的外设。
    3)、将SRAM或RAM定义为不可执行的(永不执行,XN),可以防止代码注入攻击。

2 MPU相关的硬件子系统

2.1 基于地址范围保护逻辑说明

注意: 每个核存在各自独立的寄存器,不可认为共用相关寄存器

2.1.1 地址范围寄存器

数据地址范围寄存器:用于限制数据的读取、写入地址范围
DPRx_L:定义数据范围对x的下地址边界
DPRx_U:定义数据范围对x的上地址边界

备注:
a)、D: Data,P: Protection, R: Range, L: Lower
b)、范围存在一个最小粒度,即最小的保护范围(如下图寄存器说明,最低3位为不可写入,所以粒度为8)

代码地址范围寄存器:用于限制代码执行地址范围
CPRx_L:定义代码范围对x的下地址边界
CPRx_U:定义代码范围对x的上地址边界

备注:
a)、C: Code,P: Protection, R: Range, L: Lower
b)、范围存在一个粒度,即最小的保护范围(如下图寄存器说明,最低5位为不可写入,所以粒度为32)

2.1.2 读、写、执行权限寄存器

DPWE_x(数据保护写使能寄存器,x为保护集编号):定义保护集对各个数据范围寄存器的写入权限是否使能

备注:
a)、D: Data,P: Protection, W: Write, E: Enable,x:保护集编号

DPRE_x(数据保护读使能寄存器,x为保护集编号):定义保护集对各个数据范围寄存器的读出权限是否使能

备注:
a)、D: Data,P: Protection, R: Read, E: Enable,x:保护集编号

CPXE_x(代码保护执行使能寄存器,x为保护集编号):定义保护集对各个代码范围寄存器的执行权限是否使能

备注:
a)、C: Code,P: Protection, X: Execute, E: Enable,x:保护集编号

2.1.3 保护集设置位

PRS(保护寄存器集位):用于设置当前核的使能的保护集编号

备注:
a)、P: Protection,P: Register, S:Set

2.1.4 内存保护功能使能位

PROTEN(内存保护使能位):用于使能内存保护功能

备注:
a)、PROT: Protection,E: Enable

2.1.5 核的内存保护范围获取说明

  • 根据核使能的保护集编号,可以知道相应的读、写及执行权限相关寄存器
  • 根据读、写及执行相关寄存器中,关于范围寄存器的范围是否使能,得到单个范围
  • 将所有是能的范围取并集,即可得到当前核的保护范围

2.1.6 保护使能基本机理

  • SYSCON寄存器中的保护启用位(SYSCON. PROTEN)
  • 设置保护寄存器地址范围设置(DPRx_L、DPRx_U,CPRx_L、CPRx_U)
  • 设置访问权限寄存器(DPWE_x、DPRE_x、CPXE_x)
  • 选择保护集(PSW.PRS)

2.2 外设寄存器操作及指令执行保护

2.2.1 用户模式设置状态位(PSW程序状态寄存器)

IO:用于设置当前的用户模式(仅在非可信应用集中会设置为User,与SYSCON的U1_IED、U1_IOS配合使用)

  • 00B : User-0 Mode :禁止访问具有外设空间属性的内存区域,并导致PSE或MPP陷阱
  • 01B : User-1 Mode :定期访问外围。允许访问没有特殊保护的常见外围设备,包括对串行I/O端口的读/写访问,对计时器的读访问,以及对大多数I/O状态寄存器的访问。这个级别的任务可以禁用中断。(该模式的默认行为可能会被系统控制寄存器覆盖,即可设置)
  • 10B : Supervisor Mode :允许访问所有外围设备。它允许对核心寄存器和受保护的外围设备进行读写访问。这个级别的任务可以禁用中断

2.1.2 用户模式下指令及寄存器访问权限设置(SYSCON系统控制寄存器)

  • U1_IOS:控制外设寄存器访问权限(User_1 Mode)
  • U1_IED:指令访问/执行权限使能(User_1 Mode)

2.3 错误处理机制

在违背内存保护范围进行访问相应地址时(或者其他行为),会触发相应的Trap(内存保护属于其中的class 1)。在此基础上存在TIN(Trap Identification Number),用于定位更具体的错误原因,如图所示

注意:
基于范围的存储保护系统(MPU)产生三个陷阱,每个陷阱对应三个保护模式寄存器位:

  • MPW trap = WE bit (MPW = memory protection write)
  • MPR trap = RE bit (MPR = memory protection read)
  • MPX trap = XE bit (MPX = memory protection execute)

2.4 寄存器操作指令说明

2.4.1 相关寄存器操作指令

如图所示 ,内存保护寄存器、PSW以及SYSCON这些与内存保护相关寄存器属于特殊功能寄存器(CSFRs),并且此类寄存器操作需要特殊指令(MTCR:写入指令、MFCR:读出指令)

2.4.2 写入指令(MTCR)

MTCR(Move To Core register): 数据写入寄存器
该指令包含两个参数:

  • 寄存器地址(从芯片手册获取)
  • 写入的值
    例:MTCR(RegAddr, RegVaule);

2.4.3 读出指令(MFCR)

MFCR(Move From Core register) 从寄存器读出数据
该指令包含一个参数:

  • 寄存器地址(从芯片手册获取)
    例:RegVaule = MTCR(RegAddr );

上一篇 | 返回主目录 | 下一篇

http://www.lryc.cn/news/23080.html

相关文章:

  • Vue3 -- PDF展示、添加签名(带笔锋)、导出
  • 行测-判断推理-图形推理-样式规律-属性规律-曲直性
  • idea集成Alibaba Cloud Toolkit插件
  • Win11 文件夹打开慢或卡顿解决方案
  • 【PostgreSQL的idle in transaction连接状态】
  • cityengine自定义纹理库资源
  • taobao.top.secret.bill.detail( 服务商的商家解密账单详情查询 )
  • 2023软件测试金三银四常见的软件测试面试题-【抓包和网络协议篇】
  • vue脚手架多页自动化生成实践
  • 【SQL语句优化】
  • 阿里P8:做测试10年我的一些经验分享,希望你们少走弯路
  • 栈在括号匹配中的应用(栈/链栈 纯C实现)
  • C语言Switch语句用法
  • Curl编码请求参数,API接口请求示例参数
  • 【C/C++】类型限定符extern、const、Volatile、register
  • day54【代码随想录】二刷数组
  • 哪个品牌蓝牙耳机性价比高?性价比高的平价蓝牙耳机推荐
  • 揭秘关于TFRcord的五脏六腑
  • 【Shell学习笔记】3.Shell 传递参数及数组
  • 【终结Bug】ModuleNotFoundError: No module named ‘cv2’
  • SQL Server2008详细安装步骤(保姆式教程)
  • Linux常用操作
  • Golang 处理parquet文件实战教程
  • 腾讯TIM实现即时通信 v3+ts实践
  • 华为OD机试 - 回文字符串(Java JS Python)
  • APP测试的7大注意点。
  • 设计模式-第4章(装饰模式)
  • 【算法设计-分治】快速幂与龟速乘
  • 基于新一代kaldi项目的语音识别应用实例
  • 【GO】31.grpc 客户端负载均衡源码分析