05 ARM64 KVM 与 virt 目录边界详解
1. 为何必须读 arch/arm64/kvm
virt/ 仅 19 文件;RK3588 上可运行的 KVM 依赖 arch/arm64/kvm/(~98 文件 + hyp/)实现:
| 能力 | 主要位置 |
|---|---|
| EL2 hypervisor | hyp/nvhe/、hyp/vhe/ |
| Guest 退出处理 | handle_exit.c |
| Stage-2 MMU | mmu.c |
| 虚拟 GIC | vgic/vgic-v3.c、vgic-its.c 等 |
| PSCI 关机/CPU on | psci.c |
| 系统寄存器陷阱 | sys_regs.c |
| 指针认证/MTE(视配置) | sys_regs、特性检测 |
| Protected KVM | pkvm.c + hyp 内存保护 |
| 虚拟 architected timer | arch_timer.c |
| PMU 虚拟化 | pmu.c、pmu-emul.c |
arch/arm64/kvm/Makefile:
1 | include $(srctree)/virt/kvm/Makefile.kvm |
kvm.o = virt 公共对象 + 上表 arch 对象;hyp/ 单独构建 EL2 镜像对象。
2. arm.c — 架构枢纽
kvm_arch_hardware_setup、kvm_vm_ioctl_enable_cap;- VHE vs nVHE 模式(
kvm_mode、kvm_protected_mode_initialized); - per-CPU
kvm_arm_hardware_enabled、kvm_hyp_vector; - 与 PSCI、PMU、指针认证 特性交互。
kvm_arch_vcpu_ioctl_run 最终进入汇编 guest entry(hyp)。
3. vGIC 子系统
1 | arch/arm64/kvm/vgic/ |
文档:Documentation/virt/kvm/devices/arm-vgic-v3.rst、arm-vgic-its.rst。
virt/irqchip.c 负责 GSI 路由表;vgic 负责 IRQ 注入到 guest CPU 接口。
4. hyp/ — EL2 代码
- nVHE(Non-VHE):hypervisor 运行在 EL2,host 内核在 EL1;
- VHE(Virtualization Host Extensions):host 与 hyp 同在 EL2 部分合并;
- pKVM:将部分内存标记为 hypervisor protected,隔离恶意 host。
RK3588 Cortex-A76/A55 是否支持 VHE 取决于 ARMv8.1+ 与内核配置;需查 BSP config 与 /proc/cpuinfo。
5. 与 virt/kvm 的调用边界
| 调用方向 | 示例 |
|---|---|
| virt → arch | kvm_arch_vcpu_ioctl_run, kvm_arch_init_vm |
| arch → virt | kvm_set_irq, kvm_vcpu_kick, file_is_kvm |
| 用户态 → virt ioctl → arch | KVM_RUN 路径 |
弱符号:virt 中 __weak 默认空实现,arch 提供强符号。
6. 其它 virt 相关树(非 virt/)
| 路径 | 说明 |
|---|---|
drivers/virtio/ |
paravirt I/O 设备前端/后端 |
drivers/vfio/ |
设备直通框架 |
drivers/virt/coco/ |
机密虚拟机(SEV 等,非 ARM RK 主流) |
tools/virtio/、tools/kvm/ |
用户态工具 |
7. 阅读路线图(ARM64 KVM)
virt/kvm/kvm_main.c— ioctl 与 VM 生命周期;arch/arm64/kvm/arm.c— caps 与 run;arch/arm64/kvm/handle_exit.c— exit 原因;arch/arm64/kvm/mmu.c— Stage-2;arch/arm64/kvm/vgic/vgic-v3.c— 中断;Documentation/virt/kvm/arm/hyp-abi.rst— ABI 约定。
8. 小结
分析 virt/ 目录 ≠ 分析完 ARM64 KVM。RK3588 虚拟化问题 多数应在 arch/arm64/kvm 与 hyp 下定位,virt/ 提供 VM 容器与通用 IRQ/内存/VFIO 框架。
正在加载留言…