(KVM连载)3.3.2 配置KVM

3.3.2 配置KVM

上面三种方式下载的源代码都是可以同样地进行配置和编译,本章中以开发中的最新源代码仓库kvm.git来讲解KVM的配置和编译等。KVM是作为Linux内核中的一个module存在的,而kvm.git是一个包含了最新的KVM模块开发中代码的完整的Linux内核源码仓库。它的配置方式,与普通的Linux内核配置完全一样,只是需要注意将KVM相关的配置选择为编译进内核或者编译为模块。

在kvm.git(Linux kernel)代码目录下,运行“make help”命令可以得到一些关于如何配置和编译kernel的帮助手册,如下面命令行所示:

[root@jay-linux kvm.git]# make help

Cleaning targets:

clean           - Remove most generated files but keep the config and

enough build support to build external modules

mrproper        - Remove all generated files + config + various backup files

distclean       - mrproper + remove editor backup and patch files

Configuration targets:

config          - Update current config utilising a line-oriented program

nconfig         - Update current config utilising a ncurses menu based program

menuconfig      - Update current config utilising a menu based program

xconfig         - Update current config utilising a QT based front-end

<!- 此处省略数十行帮助信息 ->

make W=n   [targets] Enable extra gcc checks, n=1,2,3 where

1: warnings which may be relevant and do not occur too often

2: warnings which occur quite often but may still be relevant

3: more obscure warnings, can most likely be ignored

Multiple levels can be combined with W=12 or W=123

 

Execute "make" or "make all" to build all targets marked with [*]

For further info see the ./README file

对KVM或者Linux内核配置时常用的配置命令,对其如下的一些解释:

q   make config

基于文本的最为传统的也是最为枯燥的一种配置方式,但是它可以适用于任何情况之下,这种方式会为每一个内核支持的特性向用户提问,如果用户回答“y”,则把特性编译进内核;回答“m”,则它特性作为模块进行编译;回答“n”,则表示不对该特性提供支持。输入“?”则显示该选项的帮助信息,在了解之后再做决定处理该选项的方式;在回答每个问题前,必须考虑清楚,如果在配置过程中因为失误而给了错误的回答,就只能按“ctcl+c”强行退出然后重新配置了。

q   make oldconfig

make oldconfig和make config类似,但是它的作用是在现有的内核设置文件基础上建立一个新的设置文件,只会向用户提供有关新内核特性的问题,在新内核升级的过程中,make oldconfig非常有用,用户将现有的配置文件.config复制到新内核的源码中,执行make oldconfig,此时,用户只需要回答那些针对新增特性的问题。

q   make silentoldconfig

和上面make oldconfig一样,但在屏幕上不再出现已在.config中配置好的选项。

q   make menuconfig

基于终端的一种配置方式,提供了文本模式的图形用户界面,用户可以通过光标移动来浏览所支持的各种特性。使用这用配置方式时,系统中必须安装有ncurses库,否则会显示“Unable to find the ncurses libraries”的错误提示。其中“Y”、“N”、“M”、“?”键的选择功能与前面make config中介绍的一致。

q   make xconfig

基于X Window的一种配置方式,提供了漂亮的配置窗口,不过只有能够在X Server上使运行X桌面应用程序时才能够使用,它依赖于QT,如果系统中没有安装QT库,则会出现“Unable to find any QT installation”的错误提示。

q   make gconfig

与make xconfig类似,不同的是make gconfig依赖于GTK库。

q   make defconfig

按照内核代码中提供的默认配置文件对内核进行配置(在Intel x86_64平台上,默认配置为arch/x86/configs/x86_64_defconfig),生成.config文件可以用作初始化配置,然后再使用make menuconfig进行定制化配置。

q   make allyesconfig

尽可能多地使用“y”设置内核选项值,生成的配置中包含了全部的内核特性。

q   make allnoconfig

除必须的选项外,其它选项一律不选 (常用于嵌入式Linux系统的编译)。

q   make allmodconfig

尽可能多的使用“m”设置内核选项值来生成配置文件。

q   make localmodconfig

会执行 lsmod 命令查看当前系统中加载了哪些模块 (Modules),并最后将原来的 .config 中不需要的模块去掉,仅保留前面 lsmod 命令查出来的这些模块,从而简化了内核的配置过程。 这样做确实方便了很多,但是也有个缺点:该方法仅能使编译出的内核支持当前内核已经加载的模块。因为该方法使用的是 lsmod 查询得到的结果,如果有的模块当前没有加载,那么就不会编到新的内核中。

 

下面以make menuconfig为例讲述一下如何选择KVM相关的配置;运行make menuconfig后显示的界面如图3-6所示:

KVM-3-6

图3-6 make menuconfig 命令的选择界面

选择了Virtualization之后,进入里面进行详细的配置,包括选中KVM,选中对处理器的支持(比如:KVM for Intel processors support,KVM for AMD processors support),如图3-7所示:

KVM-3-7

图3-7 Virtualization中的配置选项

在配置完成之后,就会在kvm.git的目录下面生成一个.config文件,最好检查一下KVM相关的配置是否正确,与KVM直接相关的配置项主要有如下几个,本次配置的情况如下:

CONFIG_HAVE_KVM=y

CONFIG_HAVE_KVM_IRQCHIP=y

CONFIG_HAVE_KVM_EVENTFD=y

CONFIG_KVM_APIC_ARCHITECTURE=y

CONFIG_KVM_MMIO=y

CONFIG_KVM_ASYNC_PF=y

CONFIG_HAVE_KVM_MSI=y

CONFIG_VIRTUALIZATION=y

CONFIG_KVM=m

CONFIG_KVM_INTEL=m

# CONFIG_KVM_AMD is not set

CONFIG_KVM_MMU_AUDIT=y

 

master

Stay hungry, stay foolish.

4 Comments

  1. 前段时间自己在折腾kvm,中间过程很是艰难,也看了很多资料,勉强搞成功。
    无意中,看到这个博客,深深被博主的KVM系列精彩文章所吸引。
    佩服作者对技术的深入。
    看blog不过瘾,果断从z.cn上买了本支持作者!
    书已经看了大半,很有收获。

  2. 生成一个.config文件,后,如何检查KVM相关的配置是否正确?
    这一步没看懂= =

    • 我博客最后一段,让你检查的这几个配置项是KVM相关的,其他的东西,你自己看着办即可(或用默认的);我不可能全部列出来。这里有个相对完整的:https://github.com/smilejay/kvm-book/blob/master/conf/config-kernel-3.10.0-example

发表评论

邮箱地址不会被公开。 必填项已用*标注

*