打印
[RISC-V MCU 应用开发]

RISC-V物理内存保护(PMP)

[复制链接]
175|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
SpiritSong|  楼主 | 2025-6-4 19:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

RISC-V物理内存保护(Physical Memory Protection, PMP)是M模式特权级下的硬件安全模块,PMP 机制适用于所有特权模式为 S 或 U 的指令和数据访问,通过在 M 态下修改每个 hart 对应的控制寄存器,可以指定每个物理内存区域的读、写和执行等访问权限。此外,PMP 机制也可用于 S 态中的页表访问。违反 PMP 机制的访存将被处理器捕获并触发异常。主要解决嵌入式场景中的内存隔离与权限控制问题。与ARM TrustZone的全局安全域划分不同,PMP采用精细化区域保护策略,通过配置寄存器组实现以下核心功能:

  • 区域隔离:将物理内存划分为最多16个独立区域(不同实现可能扩展)
  • 权限控制:为每个区域设置读/写/执行(R/W/X)权限组合
  • 特权级约束:限制U/S/M模式对指定区域的访问权限

典型应用场景包括:实时操作系统内核保护、物联网设备固件隔离、多任务环境内存沙箱等。

PMP硬件实现机制

在《RISC-V 特权指令集手册》的第 3.7 节中介绍了内存保护机制。每一个 PMP 项定义了一个访问控制区域。一个 PMP 项包括一个 8 位控制寄存器和一个地址寄存器,仅可在 M 态下访问,处理器支持最多 64 个 PMP 项。PMP 访问控制区域的大小是可设置的,最小可支持 4 字节大小的区域。

  1. 寄存器架构

PMP通过两组CSR寄存器协同工作:

  • pmpcfgX(配置寄存器):8位字段定义区域权限(R/W/X)和匹配模式
  • pmpaddrX(地址寄存器):设置区域边界(支持NAPOT/TOR等编码模式)
  1. 地址匹配模式

模式编码特点TOR00通过pmpaddr[N-1]:pmpaddr[N]确定区域范围(适合非连续区域)NAPOT11利用地址寄存器低比特位表示区域大小(如0x1000-0x1FFF编码为0x1001)NA401固定4字节对齐区域(极简场景适用)

  1. 权限检查流程

当CPU发起内存访问时,硬件按以下顺序验证:[遍历所有PMP条目(序号从小到大)] => [若地址匹配某条目且权限满足 → 放行] => [若所有条目均不匹配 → 根据mstatus.MPRV决定是否拒绝访问]

  1. 优先级机制

PMP 条目间采用静态优先级,当区间重叠时,编号小的条目优先级更高。匹配到访问中任何字节的最低编号的 PMP 条目决定本次访问是成功还是失败。

  1. 原子性

匹配的 PMP 条目必须包含访问的所有字节,否则无论 L、R、W 和 X 位的值是什么,访问都将失败。例如,如果一个 PMP 条目被配置为匹配 4 字节区域 0xC–0xF,且为最高优先级条目,那么对区域 0x8–0xF 的 8 字节访问将失败。

PMP典型应用

RTOS内存保护:在FreeRTOS等系统中,通过PMP隔离内核数据与用户任务空间,防止任务越界访问

安全启动链:在Bootloader阶段锁定固件存储区(如Flash)为只读,防止恶意篡改

PMP局限性

  1. 区域数量瓶颈:标准PMP仅支持8-16个区域,难以满足复杂系统需求
  2. 动态调整延迟:修改PMP配置需触发CPU流水线刷新,实时性受影响
  3. 无加密保护:仅提供访问控制,不防御物理总线嗅探攻击

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

16

帖子

0

粉丝