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 ”,其编译命令和输出如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
[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”,其命令执行的输出如下所以:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
[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 <strong>#</strong><strong>这里生成了我们需要的bzImage</strong><strong>文件</strong> Kernel: arch/x86/boot/bzImage is ready (#4) |
编译kernel和bzImage之后,接下来是编译内核的模块,命令为“make modules”,其的命令和输出如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
[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软件包。
杰哥,在编译内核部分,它编译到一半就自己关掉了。。这是怎么回事啊
杰哥,问题已解决。