RISC-V IOMMU 硬件设计学习计划|第 1 天:IOMMU 在 RISC-V SoC 中解决什么问题
RISC-V IOMMU 硬件设计学习计划第 1 天IOMMU 在 RISC-V SoC 中解决什么问题 计划日期2026-07-27。本系列基于官方 RISC-V IOMMU Architecture Specification 与官方 riscv-iommu/iommu_ref_model C 参考模型整理。本文自包含阅读不要求读者同时打开规范或代码仓库。当日主题今天建立全局视图IOMMU 位于 IO bridge 与系统内存之间拦截设备发出的 DMA、ATS 翻译请求、PRI Page Request 和 MSI 写请求。它的核心任务不是“让设备更快访问内存”而是在可控性能成本下把设备访问纳入和 CPU MMU 类似的地址翻译、权限检查、隔离、虚拟化与故障报告框架。核心概念与原理讲解没有 IOMMU 时DMA-capable 设备通常可以用总线地址直接访问内存。一旦设备固件、驱动或硬件出错就可能覆盖内核、其他进程或其他虚拟机的内存。RISC-V IOMMU 通过每个设备的 device_id 查找 Device ContextDC并按 DC 中的控制字段决定该设备的 IOVA 应怎样被翻译。四类典型模式1. Bare/Bare第一阶段和第二阶段都关闭IOVA 近似作为 SPA 使用主要用于早期启动或受信任设备。2. 第一阶段开启、第二阶段 Bare设备使用进程/内核虚拟地址IOMMU 执行 S-stage 翻译适合 native OS 下的 DMA remap 或 SVA。3. 第一阶段 Bare、第二阶段开启设备被直通给 VMguest 驱动看到 GPAIOMMU 用 G-stage 把 GPA 限制到该 VM 的 SPA。4. 两阶段都开启设备请求 VA先 VS/S-stage 得到 GPA再 G-stage 得到 SPA适合带 PASID/SVA 的虚拟化直通。设备侧有三类地址类型Untranslated、Translated、PCIe ATS Translation Request。Untranslated 表示设备提交的地址仍需 IOMMU 判断Translated 表示设备声称地址已由设备 ATC 缓存翻译ATS Translation Request 表示设备请求 IOMMU 返回翻译结果以填充 DevATC。关键流程与硬件行为分析一个普通 DMA 读写进入 IOMMU 后硬件可抽象为流水线textIO bridge request- 解析 device_id / process_id / transaction type- 检查 ddtp.iommu_mode- DDT walk 定位 Device Context- 如有 PASID/process_idPDT walk 定位 Process Context- 查询 IOATCmiss 时执行一阶段/二阶段 page-table walk- 可选 MSI 识别与 MSI page-table 翻译- 返回 SPA、权限、PBMT、MSI/MRIF 标志或报告 fault从硬件实现角度要把 IOMMU 看成一个带内存读端口的翻译协处理器。它不只处理设备请求还会主动发起隐式内存访问读取 DDT、PDT、页表、命令队列、故障队列、页请求队列和 MSI 表。这些访问需要 QoS、endianness、PMA/PMP/总线错误处理并且不能被原始设备请求阻塞到死锁。对应代码片段解读参考模型的请求结构浓缩了硬件输入面c// host bridge 输入到 IOMMU 的抽象请求参考 iommu_req_rsp.htypedef struct {uint32_t device_id; // 最多 24 位设备身份PCIe 可映射为 BDF/RIDDSEGuint8_t pid_valid; // 是否携带 process_id/PASIDuint32_t process_id; // 最多 20 位进程身份uint8_t no_write; // ATS translation request 可请求 no-writeuint8_t exec_req; // 读是否带 execute intentuint8_t priv_req; // 1Supervisor, 0Useriommu_trans_req_t tr; // 地址类型、IOVA、长度、读写属性} hb_to_iommu_req_t;主入口在 iommu_translate.c。它先统计请求类型再从 ddtp.iommu_mode 判断 Off/Bare/DDT 模式随后调用 locate_device_context()、locate_process_context()、lookup_ioatc_iotlb() 和 two_stage_address_translation()。这正好对应硬件中的配置检查、上下文缓存、TLB lookup 和 page-walk pipeline。当天掌握要点小结- IOMMU 的基本角色是把设备 DMA 纳入地址翻译、权限检查、隔离和虚拟化。- device_id 选择 DCprocess_id/PASID 选择 PC它们共同决定地址空间。- Untranslated、Translated、ATS Translation Request 是硬件入口分类的第一层。- 实现 IOMMU 时要同时考虑设备请求路径和 IOMMU 自身的隐式内存访问路径。

相关新闻

HarmonyOS应用开发实战:猫猫大作战-NavPathStack 的完整 API 方法、生命周期关联、参数传递技巧,以及基于 NavPathStack

HarmonyOS应用开发实战:猫猫大作战-NavPathStack 的完整 API 方法、生命周期关联、参数传递技巧,以及基于 NavPathStack

前言 NavPathStack 是 Navigation 路由体系的核心控制器——它封装了所有页面栈操作,包括压栈、弹栈、替换、查询、清空等能力。与传统的 router 函数式 API 不同,NavPathStack 以对象的形式持有页面栈状态,更加灵活、可控。 本文以「猫猫大…

2026/10/19 16:14:14 阅读更多 →
从“今日头条”商标案看品牌保护:大厂的商标布局有多重要?

从“今日头条”商标案看品牌保护:大厂的商标布局有多重要?

从“今日头条”商标案看品牌保护:大厂的商标布局有多重要?一个卖油条的早餐店,因为店名里带了“今日”两个字,被互联网大厂告上法庭索赔200万元——听起来像段子,但这是真实发生的“今日头条诉今日油条案”。更出人意料…

2026/10/19 20:30:10 阅读更多 →
中科复兴:城市生命线安全监测的感知、研判与协同处置技术路径

中科复兴:城市生命线安全监测的感知、研判与协同处置技术路径

当一座城市的体量突破千万人口、地下管网绵延数万公里、桥梁隧道等设施服役超过二十年,传统的安全监管模式便走到了必须变革的十字路口。这不仅是管理规模的量变挑战,更是一场关乎风险认知与治理能力的质变考验。如何让沉默的基础设施“开口说话”&#…

2026/10/20 12:54:20 阅读更多 →

最新新闻

React项目实战:从极简标题到完整前端方案的技术选型与性能优化

React项目实战:从极简标题到完整前端方案的技术选型与性能优化

1. 从“rea”这个标题说起:一个被极简命名掩盖的完整项目第一次看到“rea”这个标题,我承认自己愣了几秒。没有正文,没有关键词,没有摘要,只有一个三字母的短词。这种极简到近乎空白的输入,反而让我觉得有意…

2026/10/20 19:00:00 阅读更多 →
新概念第四册Lesson 35精读:用英语重装思维操作系统

新概念第四册Lesson 35精读:用英语重装思维操作系统

1. 为什么这篇课文值得花时间精读:不是背单词,而是重建思维节奏“新概念英语第四册Lesson 35 — The Pegasus Book of Inventors”,光看标题,很多人第一反应是:“哦,老教材,讲发明家故事的阅读课…

2026/10/20 19:00:00 阅读更多 →
零信任架构结合SPIFFE/SPIRE的本地大模型WebUI服务

零信任架构结合SPIFFE/SPIRE的本地大模型WebUI服务

开篇先把话说明白:这套东西不是“我搭了个聊天机器人”,而是一套完整的本地化WebUI作品集,底层用的开源社区12B参数级别的指令微调大模型,也就是标题里的Gemma-3-12B-IT,外层再包一层交互展示界面,同时把整…

2026/10/20 19:00:00 阅读更多 →
社交网络分析中的数据建模:从属性图到图数据库的工程实践

社交网络分析中的数据建模:从属性图到图数据库的工程实践

2021年我在某社交平台的数据团队做用户分析时,每天要处理的数据量级以亿计,但真正困扰我们的不是存储和计算,而是“这些数据到底该怎么组织”。同样是“用户”和“用户之间发生了互动”,在关系数据库里拆成三张表,在图…

2026/10/20 19:00:00 阅读更多 →
VHDL手写FFT:参数化定点RTL实现,摆脱IP核依赖

VHDL手写FFT:参数化定点RTL实现,摆脱IP核依赖

FFT的VHDL手写实现,我在项目里折腾过好几版,从最简单的16点验证到1024点应用,踩了不少坑也积累了一些经验。这次分享的这套代码,核心特点是完全绕开厂商IP核,N点长度通过顶层参数配置,输入16位有符号定点数…

2026/10/20 19:00:00 阅读更多 →
Claude Skill 下载安装完全指南:三种方法与排错思路

Claude Skill 下载安装完全指南:三种方法与排错思路

我估摸着不少人和我一样,第一次听到"Claude Skill"这四个字的时候,脑子里冒出来的问题就一个:这到底是个插件、一套配置,还是一个能自动干活的小助手?等你真正打开搜索框开始找下载安装教程,又会…

2026/10/20 18:58:59 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →