MMU 与 IOMMU 案例串联

本文对应 成长路径 中优先级:在 如何通过虚拟地址查找物理地址 基础上,补上 IOMMUDMA 地址 的完整图景。


两条地址路径

路径谁用转换
CPU MMU内核/用户 VA页表 → PA
IOMMU设备 DMA 地址IOVA → PA

CPU 看到的 PA 与设备 DMA 的 PA 可经 IOMMU 隔离映射 不同。


案例:网卡 DMA

  1. 驱动 dma_alloc_coherent 得到 cpu_addrdma_handle
  2. dma_handle 写入设备描述符。
  3. 设备发起 DMA → 若经 IOMMU,dma_handle 实为 IOVA
  4. CPU 读缓冲区用 cpu_addr(走 MMU)。

若无 IOMMU,dma_handle 可能等于 物理地址(仍建议用 DMA API)。


与 SMMU / VT-d

ARM SMMU、x86 VT-d 为 IOMMU 实现。设备树常见:

iommu = <&smmu>;

缺 IOMMU 时,错误映射可能导致 损坏其他内存


调试


延伸阅读