3.3.3 编译KVM
在对KVM源代码进行了配置之后,编译KVM就是一件比较容易的事情了。KVM编译过程就完全是一个普通Linux内核编译的过程,需要经过编译kernel、编译bzImage和编译module等三个步骤。编译bzImage这一步不是必须的,在本章示例中,config中使用了使用initramfs,所以这里需要这个bzImage用于生成initramfs image。另外,在最新的Linux kernel代码中,根据Makefile中的定义可以看出,直接执行“make”或“make all”命令就可以将这里提及的3个步骤全部包括在内。本章节中是为了更好地展示编译的过程,才将编译的步骤分为着三步来来解释。
编译kernel的命令为“make vmlinux ”,其编译命令和输出如下。
[root@jay-linux kvm.git]# make vmlinux -j 20
make[1]: Nothing to be done for `all'.
HOSTCC arch/x86/tools/relocs
CHK include/linux/version.h
HOSTCC scripts/basic/fixdep
CHK include/generated/utsrelease.h
HOSTCC scripts/kallsyms
HOSTCC scripts/pnmtologo
HOSTCC scripts/genksyms/genksyms.o
CC scripts/mod/empty.o
LINK vmlinux
LD vmlinux.o
MODPOST vmlinux.o
GEN .version
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
LD init/built-in.o
KSYM .tmp_kallsyms1.o
KSYM .tmp_kallsyms2.o
LD vmlinux #这里就是编译、链接后生成了启动所需的Linux kernel文件
SORTEX vmlinux
sort done marker at 9725f0
SYSMAP System.map
其中,编译命令中“-j”参数并非必须的,它是让make工具用多进程来编译,比如上面命令中提到的“-j 20”,会让make工具最多创建20个GCC进程同时来执行编译任务。在一个比较空闲的系统上面,有一个推荐值作为-j参数的值,即大约等于系统上的CPU的core的数量(CPU超线程也算core)。
编译bzImage的命令是“make bzImage”,其命令执行的输出如下所以:
[root@jay-linux kvm.git]# make bzImage
make[1]: Nothing to be done for `all'.
make[1]: Nothing to be done for `relocs'.
CHK include/linux/version.h
CHK include/generated/utsrelease.h
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
make[3]: `arch/x86/realmode/rm/realmode.bin' is up to date.
CC arch/x86/boot/a20.o
AS arch/x86/boot/bioscall.o
CC arch/x86/boot/video-bios.o
LD arch/x86/boot/setup.elf
OBJCOPY arch/x86/boot/setup.bin
OBJCOPY arch/x86/boot/vmlinux.bin
HOSTCC arch/x86/boot/tools/build
BUILD arch/x86/boot/bzImage #这里生成了我们需要的bzImage文件
Kernel: arch/x86/boot/bzImage is ready (#4)
编译kernel和bzImage之后,接下来是编译内核的模块,命令为“make modules”,其的命令和输出如下所示:
[root@jay-linux kvm.git]# make modules -j 20
make[1]: Nothing to be done for `all'.
make[1]: Nothing to be done for `relocs'.
CHK include/linux/version.h
CHK include/generated/utsrelease.h
CALL scripts/checksyscalls.sh
CC [M] arch/x86/kvm/vmx.o
<!- 此处省略数千行编译时的输出信息 ->
IHEX firmware/mts_gsm.fw
IHEX firmware/mts_edge.fw
H16TOFW firmware/edgeport/boot.fw
H16TOFW firmware/edgeport/boot2.fw
H16TOFW firmware/edgeport/down.fw
H16TOFW firmware/edgeport/down2.fw
IHEX firmware/edgeport/down3.bin
IHEX2FW firmware/whiteheat_loader.fw
IHEX2FW firmware/whiteheat.fw
IHEX2FW firmware/keyspan_pda/keyspan_pda.fw
IHEX2FW firmware/keyspan_pda/xircom_pgs.fw
杰哥 ,按照你的书来,配置KVM没问题,但编译KVM是报错,是不是CPU不支持虚拟化?CPU型号是Intel(R) Xeon(R) CPU E5420 ,在BIOS里只有 Advanced->Intel(R) Virtualization Technology 没看到VT和VT-d选项
你这CPU时主流的服务器CPU,当然支持VT了,就是你说的那个,VT就是Virtualization Technology的缩写呢。
另外,如果你时编译时的错误,和你硬件没有任何关系的啊,时编译环境或者源代码的问题。
杰哥,问题已经解决了,是我的系统有问题,少了个bc.x86_64软件包。
杰哥,在编译内核部分,它编译到一半就自己关掉了。。这是怎么回事啊
杰哥,问题已解决。