通过前面文章的对比表,结合这两个文件和qemu-kvm 的源码树,有如下几点说明: 1.Qemu-kvm可执行文件是通过X86_64-softmmu/Makefile制作的。根目录下的 Makefile在调用x86_64-softmmu/Makefile之前需要编译 qemu-io, qemu-img,qemu-nbd 三个工具以及 libqemu_common.a这个库。libqemu_common.a 包含了所有和处理器结构及平台无关的代码,如 spice, vnc, usb 等协议的实现,qed,qcow2 等虚拟磁盘格式实现,Slirp, VDE 网络功能代码,还有那些独立于系统平台的硬件设备的仿真代码。 2.Qemu-kvm可执行文件由“若干目标文件”和libqemu_common.a,libqemu.a,libqemuhw64.a三个库一起链接而成。其中 libqemu.a 所包含的代码主要是用于各种 CPU 结构的仿真的,在 qemu-kvm 中用不上。libqemuhw64.a 是通过 libhw64/Makefile 生成的,主要提供 x86 结构下特有的物理设备的仿真代码,如Intel的网卡ne2000的仿真。 “若干目标文件”主要包含和虚拟化实现相关的内容,有x86平台专有的部分如 vga,ide 等 x86 专用设备的仿真;还有和平台无关的部分,如 virtIO 设备的后端,e1000 等在多种平台上被使用的设备的仿真代码。 3.源码文件主要分布在源码根目录, 以及hw/,block/,audio,net/,slirp/,ui/,QMP/与target-i386等子目录下。Libhw64/ 和 X86_64-softmmu/ 目录下不提供源码文件。 4. 子目录 Kvm/ 是一个独立的目录,其下面也包含 Makefile 和源码文件,是用来实现一个微小型的系统仿真器,用来测试 KVM 的内核提供的功能的,可以看成是一个高度简化的 qemu-kvm 的实现,和 qemu-kvm 本身没关系。初学者可先学习 kvm/ 目录下的内容了解 KVM 内核提供的接口的功能。 5.Qemu-kvm 直接和 KVM 内核层相关的代码主要存在于vl.c, kvm-all.c, qemu-kvm.c, target-i386/kvm.c 及 qemu-kvm-x86.c 中,其中后两个文件是直接和 x86 硬件结构相关的。
|