virt 源码目录与模块索引

virt 源码目录与模块索引

源码根:rk3588/kernel-6.1/virt/19 文件

1. 目录树

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
virt/
├── Makefile # obj-y += lib/
├── kvm/
│ ├── kvm_main.c # KVM 核心 (~6k 行)
│ ├── eventfd.c # irqfd、ioeventfd
│ ├── irqchip.c # GSI 路由、irq routing API
│ ├── vfio.c / vfio.h # KVM-VFIO 桥
│ ├── dirty_ring.c # 脏页环
│ ├── pfncache.c # PFN 缓存
│ ├── async_pf.c / .h # 异步 page fault
│ ├── coalesced_mmio.c/.h # MMIO 合并环
│ ├── binary_stats.c # 二进制统计导出
│ ├── kvm_mm.h # MMU 辅助宏/声明
│ ├── Makefile.kvm # 公共 kvm-y 对象列表
│ └── Kconfig # HAVE_KVM_* 能力开关
└── lib/
├── irqbypass.c # IRQ bypass 管理器
├── Kconfig # IRQ_BYPASS_MANAGER
└── Makefile

2. Makefile.kvm → 对象映射

对象 Kconfig 条件 源文件
始终 kvm_main.o, eventfd.o, binary_stats.o
VFIO CONFIG_KVM_VFIO vfio.o
MMIO CONFIG_KVM_MMIO coalesced_mmio.o
异步 PF CONFIG_KVM_ASYNC_PF async_pf.o
IRQ 路由 CONFIG_HAVE_KVM_IRQ_ROUTING irqchip.o
脏页环 CONFIG_HAVE_KVM_DIRTY_RING dirty_ring.o
PFN cache CONFIG_HAVE_KVM_PFNCACHE pfncache.o

ARM64 arch/arm64/kvm/KconfigKVM 菜单下 select 多项 HAVE_KVM_*

3. kvm_main.c 功能块索引

主题 大致内容
模块参数 halt_poll_ns* 停机轮询优化
全局 kvm_lock, vm_list, kvm_debugfs_dir
VCPU 调度 vcpu_load/put, kvm_make_vcpu_request, IPI kick
MMU 缓存 kvm_mmu_memory_cache_*
mmu_notifier host 内存变更 → guest PTE 失效
memslots 创建/删除/查询 GPA→HVA
ioctl kvm_dev_ioctl, kvm_vm_ioctl, kvm_vcpu_ioctl, kvm_device_ioctl
设备 API kvm_ioctl_create_device 虚拟设备
初始化 kvm_init / kvm_exit, CPU hotplug, reboot 通知

4. 关联架构树(RK3588)

arch/arm64/kvm/ 主要文件:

文件/目录 职责
arm.c 架构初始化、cap、vcpu run 入口
mmu.c Stage-2页表、IPA
handle_exit.c EL2 退出原因分发
vgic/ vGICv2/v3/v4、ITS
hyp/ nVHE/VHE hypervisor 代码
pkvm.c Protected KVM
psci.c 电源状态
arch_timer.c 虚拟定时器
sys_regs.c 系统寄存器陷阱
fpsimd.c SIMD/FP 状态

构建:include virt/kvm/Makefile.kvm + obj-$(CONFIG_KVM) += hyp/

5. 头文件与 UAPI(virt 外)

头文件 用途
include/uapi/linux/kvm.h 用户态 ioctl 定义
include/linux/kvm_host.h 内核 KVM 内部结构
include/linux/kvm_dirty_ring.h 脏页环
include/linux/irqbypass.h bypass 注册 API
arch/arm64/include/asm/kvm_*.h ARM 专用

6. 文档路径

1
2
3
4
Documentation/virt/kvm/api.rst
Documentation/virt/kvm/arm/index.rst
Documentation/virt/kvm/devices/arm-vgic-v3.rst
Documentation/virt/kvm/locking.rst

7. 与 drivers/virt 区分

drivers/virt virt/
ACRN、SEV guest、EFI secret KVM 公共层
独立菜单 Device Drivers → Virtualization drivers arch/*/kvm/Kconfig source

8. 快速定位

问题 查看
VM 创建失败 kvm_create_vm, kvm_arch_init_vm
内存迁移脏页 dirty_ring.c 或 legacy dirty log ioctl
中断注入 kvm_set_irq, arch vgic
直通 GPU/NIC vfio.c + drivers/vfio
ARM VM 不启动 arch/arm64/kvm/hyp, handle_exit.c

文章互动

阅读 --

留言

0 条留言

正在加载留言…