我们知道,Qemu-KVM实际上包括Qemu和KVM两部分,那么在创建以及初始化虚拟机时,实际上也是在这两部分进行的。
KVM实际上就是kvm内核模块,包括kvm.ko、kvm-intel.ko、kvm-amd.ko三部分,后两部分分别对应Intel体系的VMX技术以及AMD体系的SVM技术。
首先,我们需要加载模块,当我们加载kvm-xxx.ko模块时,会调用对应的module_init()函数,然后调用vmx_init()或者svm_init()函数,最后进入到统一的kvm.ko模块中的kvm_init()函数,现在正式开始进行虚拟机的初始化工作。
module_init(vmx_init) //位于vmx.c文件
static int __init vmx_init(void) //位于vmx.c文件
{
..............//省略部分代码
r= kvm_init(&vmx_x86_ops, sizeof(struct vcpu_vmx),
__alignof__(struct vcpu_vmx),THIS_MODULE);
................//省略部分代码
}