《KVM实战:原理、进阶与性能调优》一3.3.3 编译KVM

举报
华章计算机 发表于 2019/06/06 15:31:50 2019/06/06
【摘要】 本书摘自《KVM实战:原理、进阶与性能调优》一书中第3章,第3.3.3节,作者是任永杰 程舟

3.3.3 编译KVM

      在对KVM源代码进行了配置之后,编译KVM就是一件比较容易的事情了。它的编译过程完全是一个普通Linux内核编译的过程,需要经过编译kernel、编译bzImage和编译module等3个步骤。编译bzImage这一步不是必需的,在本章示例中,config中使用了initramfs,所以这里需要这个bzImage,用于生成initramfs image。另外,在最新的Linux kernel代码中,根据makefile中的定义可以看出,直接执行“make”或“make all”命令就可以将这里提及的3个步骤全部包括在内。本节是为了更好地展示编译的过程,才将编译的步骤分为这3步来解释。
       1)编译kernel的命令为“make vmlinux”,其编译命令和输出如下:
       [root@kvm-host kvm]# make vmlinux -j 20
       <!- 此处省略数千行编译时的输出信息 ->
           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
           SYSMAP  System.map
       其中,编译命令中的“-j”参数并非必需的,它是让make工具用多任务(job)来编译。比如,上面命令中提到的“-j 20”,会让make工具最多创建20个GCC进程,同时来执行编译任务。在一个比较空闲的系统上,有一个推荐值作为-j参数的值,即大约为2倍于系统上的CPU的core的数量(CPU超线程也算core)。如果-j后面不跟数字,则make会根据现在系统中的CPU core的数量自动安排任务数(通常比core的数量略多一点)。
       2)执行编译bzImage的命令“make bzImage”,其输出如下:
            [root@kvm-host kvm]# make bzImage
                  CHK     include/config/kernel.release
                  CHK     include/generated/uapi/linux/version.h
                  CHK     include/generated/utsrelease.h
             <!- 此处省略数十行编译时的输出信息 ->
                   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文件
              Setup is 17276 bytes (padded to 17408 bytes).
              System is 5662 kB
              CRC 3efff614
              Kernel: arch/x86/boot/bzImage is ready  (#2)
       3)编译kernel和bzImage之后编译内核的模块,命令为“make modules”,其命令行输出如下:
             [root@kvm-host kvm]# make modules -j 20
                <!- 此处省略数千行编译时的输出信息 ->
             IHEX2FW firmware/emi26/loader.fw
             IHEX2FW firmware/emi26/firmware.fw
             IHEX2FW firmware/emi26/bitstream.fw
             IHEX2FW firmware/emi62/loader.fw
             IHEX2FW firmware/emi62/bitstream.fw
             IHEX2FW firmware/emi62/spdif.fw
             IHEX2FW firmware/emi62/midi.fw
             H16TOFW firmware/edgeport/boot2.fw
             H16TOFW firmware/edgeport/boot.fw
             H16TOFW firmware/edgeport/down.fw
             H16TOFW firmware/edgeport/down2.fw
             IHEX2FW firmware/whiteheat_loader.fw
             IHEX2FW firmware/whiteheat.fw
             IHEX2FW firmware/keyspan_pda/keyspan_pda.fw
             IHEX2FW firmware/keyspan_pda/xircom_pgs.fw

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。