STM32MP2 RIF资源隔离框架详解:从架构到实践

概述

RIF(Resource Isolation Framework)是STM32MP2系列微处理器中引入的资源隔离框架,用于实现外设和内存区域的访问控制。本文将深入解析RIF的架构设计、核心组件以及实际配置方法。

RIF架构设计

RIF框架采用分层架构设计,主要包含以下核心组件:

1. RIFSC(Resource Isolation Framework for Secure Control)

  • 功能:外设访问控制
  • 作用:管理外设的访问权限,控制哪些安全域可以访问特定外设
  • 配置位置:CubeMX → RIF → Preipherals (RIFSC)

2. RISAB(Resource Isolation for SRAM, Access Buffer)

  • 功能:SRAM访问控制
  • 作用:管理内部SRAM区域的访问权限
  • 配置位置:CubeMX → RIF → Internal Memories (RISAB)

3. RISAF(Resource Isolation for External Memory, Access Filter)

  • 功能:外部内存访问控制
  • 作用:管理DDR、QSPI等外部存储器的访问权限
  • 配置位置:CubeMX → RIF → External Memorys (RISAF)

RIF权限配置详解

安全域(CID)

STM32MP2支持多个安全域(CID0-CID3),每个安全域代表一个独立的信任环境:

  • CID0:安全世界(Secure World)
  • CID1:非安全世界(Non-Secure World)
  • CID2/CID3:其他安全域

权限位配置

RIF权限通过以下参数进行配置:

c 复制代码
RISABPROT(delegate_en, // 0: 锁定配置;1: 允许由 delegate_cid 指定的 ID 动态修改此规则。
          delegate_cid, // 通常为 1 (Cortex-A35/Linux) 或 2 (Cortex-M33/RTOS)。
          sec,  // 0: 非安全访问 (Non-Secure);1: 仅限安全访问 (Secure)。
          default_priv, // 0: 允许非特权访问;1: 必须有特权级 (Privileged) 才能访问。
          enabled, // 0: 该条过滤规则关闭;1: 规则生效,拦截非法访问。
          cid_read_list, // 位掩码。例如 0x3 表示 CID0 和 CID1 都能读。
          cid_write_list, // 位掩码。例如 0x2 表示仅允许 CID1 写入。
          cid_priv_list // 位掩码。指出哪些 CID 必须在特权模式下才能访问。位掩码。指出哪些 CID 必须在特权模式下才能访问。
         )

实际配置示例

1. DDR内存区域配置

在CubeMX中配置RISAF4(DDR):

复制代码
RIF → External Memorys (RISAF) → RISAF4 (DDR)

注意事项:

  • STM32MP257F支持DDR加密/解密功能
  • STM32MP257D不支持DDR加密功能
  • 如遇"RISAF4: encryption feature error"错误,需取消DDR加密选项

2. 外设访问权限配置

为Display Controller配置访问权限:

复制代码
RIF → Preipherals (RIFSC) → Display Controller

3. GPIO访问权限配置

为特定GPIO配置RIF访问权限:

复制代码
RIF → GPIO → GPIOG7, GPIOI11

常见问题与解决方案

问题1:IAC异常(RISAB安全访问错误)

错误现象:

复制代码
E/TC:0 0 stm32_iac_itr:192 IAC exceptions [159:128]: 0x1
E/TC:0 0 stm32_iac_itr:197 IAC exception ID: 128
E/TC:0 0 Panic at core/drivers/firewall/stm32_iac.c:212 <stm32_iac_itr>

解决方案:修改OP-TEE设备树中的RISAB保护寄存器配置:

diff 复制代码
 &tfa_bl31 {
-    st,protreg = <RISABPROT(RIF_DDCID_DIS, RIF_UNUSED, RIF_NSEC, RIF_NPRIV, RIF_CFDIS, RIF_UNUSED, RIF_UNUSED, RIF_UNUSED)>;
+    st,protreg = <RISABPROT(RIF_DDCID_DIS, RIF_UNUSED, RIF_SEC, RIF_NPRIV, RIF_CFEN, RIF_CID1_BF, RIF_CID1_BF, RIF_CID1_BF)>;
 };

问题2:外设访问被拒

错误现象:

复制代码
stm32_rifsc bus@42080000: vdec@480d0000 not allowed on bus (-13)
stm32_rifsc bus@42080000: venc@480e0000 not allowed on bus (-13)

解决方案:在CubeMX中为视频编解码器配置RIF权限。

问题3:GPIO访问失败

错误现象:

复制代码
gpio_stm32 gpio@442a0000: Failed to acquire RIF access on IO GPIOG 7
gpio_stm32 gpio@442c0000: Failed to acquire RIF access on IO GPIOI 11

解决方案:在CubeMX中为GPIOG7、GPIOI11配置正确的RIF访问权限。

最佳实践

  1. 规划安全域:在项目初期规划好各安全域的职责和权限
  2. 最小权限原则:只授予必要的访问权限
  3. 测试验证:在开发阶段充分测试各安全域的访问控制
  4. 文档记录:记录RIF配置的详细说明,便于后期维护

总结

RIF资源隔离框架是STM32MP2安全架构的核心组件,通过合理的配置可以实现细粒度的访问控制。理解RIF的架构设计和配置方法,对于开发安全可靠的嵌入式系统至关重要。


参考文档:

  • STM32MP2系列参考手册
  • CubeMX用户指南
  • OP-TEE安全扩展文档
相关推荐
北漂人Java8 分钟前
单智能体三:Router-Skill 工业级 Agent 分工解耦架构,解决大模型技能泛滥难题
架构
乐维_lwops17 分钟前
汽车集团网管平台建设案例:乐维网管工具实现跨区域网络统一监控与链路可视化
网络·网管平台·it监控·链路·统一监控
一次调频AGCAVC25 分钟前
一次调频系统控制柜的组成及一次调频装置主机功能详述
人工智能·嵌入式硬件
金色光环31 分钟前
【DSP学习】C2000_PWM中断程序_笔记
笔记·单片机·学习
智购科技智能售货柜1 小时前
顾客已经关门,视觉售货柜还在处理旧画面:延迟积压怎么查?~YH
python·单片机·嵌入式硬件·物联网·eclipse
糖糖单片机设计1 小时前
基于 STM32 的智能电蚊香控制系统
stm32·单片机·嵌入式硬件
运维行者_1 小时前
供应链安全成最大风险源,企业如何构建可控的运维体系?
运维·开发语言·网络·数据库·安全·云计算·流量监控
懿路向前1 小时前
唤醒工作台全实录(六):数据层——5ms 竞态窗口与“查询即引用“
华为·架构·harmonyos
pt10431 小时前
Cisco设备网络安全系列-20:DevSecOps集成
网络·安全·架构
IT古董1 小时前
Modbus TCP 详解:工业设备通信协议与 MES 集成实战
网络·网络协议·tcp/ip