kernel-4.2-KVM源码目录树分析

1534148520062.png

Makefile

  1. root@ubuntu16x64:~/kernel/linux-stable/arch/x86/kvm# cat Makefile
  2. ccflags-y += -Iarch/x86/kvm
  3. CFLAGS_x86.o := -I.
  4. CFLAGS_svm.o := -I.
  5. CFLAGS_vmx.o := -I.
  6. KVM := ../../../virt/kvm
  7. kvm-y += $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o \
  8. $(KVM)/eventfd.o $(KVM)/irqchip.o $(KVM)/vfio.o
  9. kvm-$(CONFIG_KVM_ASYNC_PF) += $(KVM)/async_pf.o
  10. kvm-y += x86.o mmu.o emulate.o i8259.o irq.o lapic.o \
  11. i8254.o ioapic.o irq_comm.o cpuid.o pmu.o mtrr.o
  12. kvm-$(CONFIG_KVM_DEVICE_ASSIGNMENT) += assigned-dev.o iommu.o
  13. kvm-intel-y += vmx.o pmu_intel.o
  14. kvm-amd-y += svm.o pmu_amd.o
  15. obj-$(CONFIG_KVM) += kvm.o
  16. obj-$(CONFIG_KVM_INTEL) += kvm-intel.o
  17. obj-$(CONFIG_KVM_AMD) += kvm-amd.o

可以看出Makefile主要生成三个模块,kvm.o和kvm-intel.o、kvm-amd.o

  • kvm.o是kvm的核心模块
    • IOMMU、中断控制、设备管理、kvm arch等部分代码
    • kvm并么有完全实现一整个PC系统虚拟化,而仅仅将部分重要的CPU虚拟化、I/O虚拟化和内存虚拟化部分针对硬件辅助的能力进行有效地抽象和对接,其他一些模块需要借助于Qemu
    • 也就是说,kvm基本只实现硬件辅助虚拟化相关部分,而不支持的用Qemu来模拟实现
  • kvm-intel.o是intel平台架构虚拟化模块,平台相关
  • kvm-amd.o是amd架构虚拟化模块,平台相关

END