Master理论上可以访问所有的地址空间,可以通过SMMU来对Master的访问进行过滤,只让Master访问受限的区域,那这个区域也可以通过CPU对SMMU建立页表时动态控制。 用户态驱动 现在我们也看到很多系统把设备驱动做在用户态,调用驱动时不需要在切换到内核态,但是存在一些安全隐患,就是用户态直接控制驱动,有可能访问到内核空间,这...
于是引入SMMU(System Memory Management Unit), 也称IOMMU。由Hypervisor来对其编程 ,这样vCPU和DMA看到的将是同一视角的内存。如下: 有了SMMU,一可以避免不同VM之间的隔离被破坏,二可以让vCPU与其他master(如DMA)有一致的内存视角。 三 指令的捕获和模拟 hypervisor需要捕获操作的能力并模拟他们,像VM中的配置底层控制...
通过dma_alloc_coherent()函数分配到的内存,其地址可以提供给系统 I/O 设备的 DMA 配置相关逻辑,后续系统 I/O 设备通过 DMA 访问内存,将经过 SMMU 完成地址转换。通过 DMA 访问内存时,将经过 SMMU 的地址转换。 SMMU 的地址转换借助于相关的数据结构完成,这主要包括流表及其流表项 STE,上下文描述符表及其表项...
static int arm_smmu_add_device(struct device *dev) { struct arm_smmu_device *smmu; struct arm_smmu_master_cfg *cfg; struct iommu_fwspec *fwspec = dev->iommu_fwspec; int i, ret; #ifdef CONFIG_ARCH_PHYTIUM /* FT2000PLUS workaround patch */ if ((read_cpuid_id() & MIDR_CPU_MODEL_...
权限索引在多个master共享相同的表时也有好处。例如,一组表可能同时被 Arm 处理器和 SMMU使用。我们想要应用于软件访问的权限可能与我们想要应用于 SMMU 的权限不同。通过权限索引,处理器和 SMMU 可以使用相同的表,但对权限的解释可以不同。 翻译强化
1.1、SMMU的timeline 1.2、SMMU的简介 SMMU的全称是System Memory Management Units, 它属于Arm的System IP, 主要给其他Master来使用,其连页表格式和Core MMU是一样的,理论上可以让Core的MMU和SMMU使用同一套页表. 那么SMMU都是用在哪些地方呢?*以下展示了一个usecase,来自arm官方博客(February 17, 2014),也是比...
SMMU 驱动中的系统 I/O 设备探测 要使系统 I/O 设备的 DMA 内存访问能通过 IOMMU,需要将系统 I/O 设备和 IOMMU 设备绑定起来,也就是执行 SM...
权限索引在多个master共享相同的表时也有好处。例如,一组表可能同时被 Arm 处理器和 SMMU使用。我们想要应用于软件访问的权限可能与我们想要应用于 SMMU 的权限不同。通过权限索引,处理器和 SMMU 可以使用相同的表,但对权限的解释可以不同。 翻译强化
Linux 系统下的 SMMU 介绍 在计算机系统架构中,与传统的用于 CPU 访问内存的管理的 MMU 类似,IOMMU (Input Output Memory Management Unit) 将来自系统 I/O 设备的 DMA 请求传递到系统互连之前,它会先转换请求的地址,并对系统 I/O
TrustZone aware 一些Master是支持TrustZone,并且像处理器一样,为每个总线访问提供适当的Security比特位。这方面的示例包括根据 Arm SMMUv3 规范构建的系统 MMU (SMMU) Non-TrustZone aware 一些传统 IP 不支持Trustzone。此类Master通常不提供其总线访问的Security BIT,或始终发送相同的值。