2. R-Car硬件架构与虚拟化支撑
R-Car SoC 之所以能承载 Hypervisor 并实现多域隔离,根本原因在于其硬件层面已经为“多个操作系统同时运行、彼此不可见、资源可被安全划分”提供了结构性支撑。理解这些硬件模块的职责边界,是后续配置 Hypervisor、划分 Guest、分配外设与调试隔离问题的前提。本节从 CPU 集群、内存体系、中断控制器、系统 MMU、IOMMU 以及虚拟化扩展六个方面展开,说明硬件究竟为多域隔离提供了哪些基础能力。
CPU 集群与虚拟化扩展
R-Car 的 CPU 子系统通常由多个 Cortex-A 核组成集群,并可能搭配 Cortex-R 实时核用于安全或实时域。对 Hypervisor 而言,最关键的硬件能力是 ARM 虚拟化扩展(Virtualization Extensions)。它引入了 EL2 异常级别,使 Hypervisor 运行在比 Guest OS(EL1)更高的特权层,从而能够拦截 Guest 对敏感资源的访问。
具体机制包括:HCR_EL2 寄存器控制 Guest 对某些指令和寄存器的访问是否陷入 EL2;VTTBR_EL2 指向 Stage-2 页表基址,用于把 Guest 物理地址(IPA)转换为真实物理地址(PA);VBAR_EL2 定义 Hypervisor 的异常向量入口。当 Guest 执行 WFI、访问系统寄存器或触发缺页时,硬件会自动切换到 EL2,由 Hypervisor 决定是模拟、转发还是拒绝。这套“陷入—处理—返回”的机制,是 CPU 层面实现域隔离的核心。
内存体系与两级地址转换
R-Car 的内存体系包含多级缓存、片上 SRAM 以及外部 DDR 控制器。虚拟化场景下,地址转换由两级页表协同完成:Stage-1 由 Guest OS 维护,把虚拟地址(VA)映射为 IPA;Stage-2 由 Hypervisor 维护,把 IPA 映射为 PA。硬件 MMU 在一次访问中依次完成两级转换,Guest 完全感知不到 Stage-2 的存在。
这种设计带来两个直接好处:其一,Hypervisor 可以通过 Stage-2 页表把某个 Guest 的 IPA 限制在指定物理内存区间,实现内存隔离;其二,当 Guest 访问未映射的 IPA 时,硬件产生 Stage-2 缺页异常并陷入 EL2,Hypervisor 可据此实现按需分配或直接终止该域。此外,缓存与 TLB 需要按 VMID(Virtual Machine Identifier)打标签,避免不同 Guest 的地址转换结果互相污染。
中断控制器与虚拟中断
R-Car 采用 GICv3 或更高版本的中断控制器。虚拟化场景下,中断需要被“路由”到正确的域。GIC 提供虚拟 CPU 接口(Virtual CPU Interface),Hypervisor 通过 List Register 把物理中断注入到 Guest 的虚拟中断线上。当某个外设中断到达时,硬件先交给 EL2,Hypervisor 判断该中断属于哪个 Guest,再通过 GIC 的虚拟化扩展注入对应 vIRQ。
这里的关键配置是中断分组与优先级:Hypervisor 自身的中断应配置为 Group 0 或高优先级,Guest 中断配置为 Group 1,并通过 ICC_SRE_EL2、ICH_* 系列寄存器控制虚拟中断的使能与挂起状态。若配置错误,典型现象是 Guest 收不到中断或中断被错误域处理,表现为某个域“卡死”而另一个域异常繁忙。
系统 MMU 与 IOMMU
系统 MMU 负责 CPU 侧的地址转换与内存保护,而 IOMMU(在 ARM 体系中常称 SMMU)负责设备侧的地址转换。没有 IOMMU 时,外设 DMA 可以直接访问任意物理地址,一个 Guest 控制的网卡或 GPU 就能读写其他域的内存,隔离形同虚设。SMMU 通过 Stream ID 识别发起 DMA 的设备,并查对应的 Stage-2 页表,把设备看到的地址限制在所属域的物理区间内。
在 R-Car 上配置 SMMU 时,需要关注设备树中 iommus 属性的绑定、Stream ID 与设备对应关系,以及 SMMU 的页表基址寄存器。典型教学示例中,可把某个以太网控制器绑定到 Guest A 的 SMMU 域,使其 DMA 缓冲区只能落在 Guest A 的 IPA 区间;若 Guest B 试图通过该设备访问 Guest A 内存,SMMU 会产生 fault 并上报 Hypervisor。
硬件能力到隔离策略的映射
把上述模块串起来看,R-Car 为多域隔离提供了一条清晰的硬件支撑链:CPU 虚拟化扩展提供特权级与陷入能力,MMU 两级转换提供内存隔离,GIC 虚拟化提供中断归属,SMMU 提供外设 DMA 隔离。Hypervisor 的工作,本质上就是正确配置这些硬件单元,并把它们的异常上报转化为域调度与资源仲裁决策。
需要强调的是,硬件提供的是“能力”,而非“策略”。例如 Stage-2 页表可以隔离内存,但具体把哪段物理内存分给哪个域、是否允许共享、共享时如何保护,仍由 Hypervisor 与系统配置决定。因此,理解硬件边界之后,下一步才是如何在软件层把这些能力组织成可管理、可验证的多域隔离方案。