内存保护
简介
为保障系统的可靠性与安全性,防止软件缺陷或恶意代码对关键内存区域进行非法访问,芯片为不同类型的 CPU 内核提供了针对性的硬件内存保护机制。用户可以通过软件配置来实现灵活的硬件保护。
各个 CPU 的内存保护模块类型和区域数量如下表所示:
处理器 |
内存保护模块 |
区域数量 |
|---|---|---|
KM4 |
8 |
|
4 |
||
KM0 |
4 |
备注
支持 TrustZone 的 CPU 各自拥有独立的安全 MPU(Secure MPU)和非安全 MPU(Non-Secure MPU)。
安全 MPU 仅在 Secure World 中生效,保护安全内存区域不被非安全代码访问;非安全 MPU 在 Non-Secure World 中生效,用于普通应用代码的内存保护。两者相互独立,区域配置互不干扰。
处理器 |
内存保护模块 |
区域数量 |
|---|---|---|
KM4 |
8 |
|
4 |
||
KR4 |
16 |
备注
支持 TrustZone 的 CPU 各自拥有独立的安全 MPU(Secure MPU)和非安全 MPU(Non-Secure MPU)。
安全 MPU 仅在 Secure World 中生效,保护安全内存区域不被非安全代码访问;非安全 MPU 在 Non-Secure World 中生效,用于普通应用代码的内存保护。两者相互独立,区域配置互不干扰。
处理器 |
内存保护模块 |
区域数量 |
|---|---|---|
KM4 |
8 |
|
4 |
||
KR4 |
16 |
|
DSP |
16 |
备注
支持 TrustZone 的 CPU 各自拥有独立的安全 MPU(Secure MPU)和非安全 MPU(Non-Secure MPU)。
安全 MPU 仅在 Secure World 中生效,保护安全内存区域不被非安全代码访问;非安全 MPU 在 Non-Secure World 中生效,用于普通应用代码的内存保护。两者相互独立,区域配置互不干扰。
处理器 |
内存保护模块 |
区域数量 |
|---|---|---|
CA32 |
使用 MMU 实现内存保护 |
- |
KM4 |
8 |
|
4 |
||
KM0 |
4 |
备注
支持 TrustZone 的 CPU 各自拥有独立的安全 MPU(Secure MPU)和非安全 MPU(Non-Secure MPU)。
安全 MPU 仅在 Secure World 中生效,保护安全内存区域不被非安全代码访问;非安全 MPU 在 Non-Secure World 中生效,用于普通应用代码的内存保护。两者相互独立,区域配置互不干扰。
处理器 |
内存保护模块 |
区域数量 |
|---|---|---|
KM4TZ |
8 |
|
8 |
||
KM4NS |
8 |
备注
支持 TrustZone 的 CPU 各自拥有独立的安全 MPU(Secure MPU)和非安全 MPU(Non-Secure MPU)。
安全 MPU 仅在 Secure World 中生效,保护安全内存区域不被非安全代码访问;非安全 MPU 在 Non-Secure World 中生效,用于普通应用代码的内存保护。两者相互独立,区域配置互不干扰。
内存保护单元 (Arm®v8-M)
Arm®v8-M 内存保护单元 (Memory Protection Unit, MPU) 是 ARM Cortex-M 处理器中用于管理内存访问权限的硬件组件。它允许特权软件定义内存区域(Regions),并给每个区域分配特定的访问权限和存储器属性,为内存系统提供细粒度的硬件控制。
MPU 可以通过以下方式提高系统的安全性和可靠性:
访问控制:可将内存区域设置为只读(Read-Only)或禁止执行(No-Execute,XN)等属性,防止代码段被意外覆写、数据段被非法执行。
属性管理:控制 Cache 策略(Cacheable、Bufferable)和设备内存的共享属性,确保对内存的访问行为可预期。
故障检测:当访问违反 MPU 配置的区域时,触发 MemManage 异常,帮助用户快速定位越界访问或权限错误。
MPU 区域编号越大,优先级越高。若两个区域地址范围存在重叠,该重叠区域的属性以编号较大的区域定义为准。
备注
未被 MPU 配置的区域,或 MPU 被全局禁用时,处理器使用系统默认地址映射的内存属性访问该区域。
MPU 区域的起始地址和大小均须按 32 字节的倍数对齐。
备注
有关 ARM Cortex-M MPU 的更多信息,参考 Arm®v8-M Architecture Reference Manual。
内存保护单元 (HiFi 5 DSP)
HiFi 5 DSP 集成了一个基于 Xtensa 架构的内存保护单元(Memory Protection Unit,MPU)。该模块为 DSP 程序提供内存访问控制与属性管理机制,允许特权软件定义多个独立的内存区域,并为每个区域分配特定的访问权限和内存类型。
DSP MPU 的主要功能包括:
内存隔离:区分内核模式(Kernel/Privileged)和用户模式(User/Non-privileged)的访问权限,防止用户态代码访问特权内存区域。
访问控制:可将内存区域配置为只读(Read-Only)或禁止执行(No-Execute,XN),实现精细化权限管理。
缓存策略:定义特定内存区域是可缓存(Cacheable,Write-Back/Write-Through)还是不可缓存(Uncached/Device),影响 DSP 的访问延迟和一致性行为。
访问检测:拦截未授权的读、写或执行操作,并触发异常,便于定位运行时内存错误。
当 MPU 被禁用时,处理器使用默认的后台映射。此时,整个 4GB 物理地址空间具有统一的默认属性。后台映射的属性配置如下:
字段 |
值 |
描述 |
|---|---|---|
AccessRights [3:0] |
0x7 |
内核全权限,用户无权限
|
MemoryType [8:0] |
0x6 |
设备内存 (Device / Strong Ordered)
|
物理内存保护单元 (RISC-V PMP)
RISC-V 处理器集成了物理内存保护(Physical Memory Protection,PMP)单元。PMP 直接作用于物理地址空间,允许机器模式(M-Mode)软件为每个定义的内存区域独立配置读(Read)、写(Write)和执行(Execute)权限,从而在不依赖 MMU 的前提下实现硬件级访问隔离。
RISC-V 处理器集成了物理内存保护(Physical Memory Protection,PMP)单元。PMP 允许特权软件定义多个独立的内存区域(Regions),并为每个区域分配特定的访问权限。
PMP 的主要功能包括:
机器模式专属配置:PMP 控制寄存器(CSR)仅能在机器模式(M-Mode)下进行配置,确保最高特权级的安全控制权不可被低特权代码篡改。
细粒度权限管理:可为每个物理内存区域独立指定读/写/执行权限,支持灵活的访问控制策略。
与 PMA 并行检查:PMP 的权限检查与物理内存属性(PMA,Physical Memory Attributes)检查并行执行,只有两者均允许时,访问请求才会被放行。
备注
PMP 仅控制 R/W/X 访问权限,不能控制缓存属性(缓存策略由 PMA 决定)。
PMP 内存保护的最小粒度为 1 KB,配置区域的起始地址和大小须满足对齐要求。
备注
有关 PMP 的更多信息,参考 RISC-V Privileged Architecture Specification。