針對版本:kvm-kmod-2.6.32.7
Kmod簡要說明:kvm-kmod是KVM VMM的內核模塊部分,在內核中體現爲一個驅動程序模塊;在用戶空間表徵爲一個字符設備/dev/kvm。KVM虛擬機的用戶空間部分qemu-kvm(對qemu模擬器的修改版,主要修改是替換了qemu的指令的動態二進制翻譯部分)通過使用ioctl系統調用來創建和啓動虛擬機。
Kmod部分主要負責處理虛擬機的”敏感指令”,而qemu-kvm主要負責虛擬機的非敏感指令及設備虛擬化。【CPU非特權模式,內存,IO】
一、 Kmod源碼目錄結構
Kmod源碼樹目錄結構如下:(+號表示目錄下還有子目錄,-號表示沒有子目錄)
+Kvm-kmod-2.6.32.7
+Include
+arch
+x86 到根目錄下的X86源代碼目錄的符號鏈接。
-asm-ia64 intel 安騰體系結構的kmod頭文件定義
-asm-x86 X86的kmod頭文件定義(x86+x86_64;intel+amd)
-linux 平臺無關,/dev/kvm(KVM)的用戶空間接口
-trace 用於事件跟蹤的頭文件定義
+include-compat 用於兼容舊版本Linux內核的頭文件定義
-asm-ia64
-asm-x86
-linux
-trace 裏面的文件用於滿足include
-Ia64 此目錄包含ia64體系結構有關的kmod實現。跳過不必看。
-Powerpc 此目錄與powerpc體系結構相關的,跳過不必看。
-Scripts 腳本目錄僅包含2個文件,
65-kvm.rules udev(動態設備管理)用於動態增加/dev/kvm設備的規則。
Make-release 在代碼裏面沒什麼用,好像是用來同步並打包代碼的。
+usr 此目錄包含用戶態可使用的頭文件,基本上與include/linux/下的頭文件相同。
-X86 此目錄爲kmod的核心目錄,包含x86體系結構上的kvm-kmod的實現。
二、 Kmod編譯依賴
編譯步驟:
#cd ./kvm-kmod-2.6.32.16/
#./configure
生成了config.mak kvm-kmod-config.h兩個文件
#./make
最後編譯出三個文件:kvm.ko kvm-amd.ko 和 kvm-intel.ko【都是在x86目錄下。編譯時會自動判斷系統的體系結構,從而根據系統結構來進行相應的編譯工作。】
其中:
kvm.ko:
kvm.mod.o kvm.o
kvm-amd.ko:
kvm-amd.mod.o kvm-amd.o
kvm-intel.ko:
kvm-intel.mod.o kvm-amd.o
而:
Kvm.o:
Kvm_main.o x86.o mmu.o emulate.o ..anon_inodes.o irp.o i8259.o lapic.o ioapic.o preempt.o i8254.o coalesced_mmio.o irp_comm.o timer.o eventfd.o ../external-module-compat.o
../request-irp-compat.o [iommu.o] ../srcu.o
Kvm-intel.o:
Vmx.o vmx.debug.o
Kvm-amd.o
Svm.o
Kvm.mod.o:
Kvm.mod.c
Kvm-intel.mod.o:
Kvm-intel.mod.c
Kvm-amd.mod.o
Kvm-amd.mod.c