51学通信论坛2017新版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2606|回复: 0
打印 上一主题 下一主题

KVM模块单独编译(适合调试)

[复制链接]

 成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    跳转到指定楼层
    楼主
    发表于 2017-11-15 21:36:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    当前系统环境:

    CentOS Linux release 7.2.1511 (Core)

    在说kvm模块单独编译之前,难免设计到linux内核模板的编写,所以这里也稍微提一下。
    1linux内核模块环境搭建
    这里有2种方法:
    1.1 升级内核:
    升级当前系统的kernel,具体编译步骤这里不再详细说明,简单表述一下:如果想在当前的linux系统上面,不用修改配置文件来编译内核,就将/boot/config-***文件拷贝至/home/pizhi/linux-4.6.4/.config

    [root@pizhi-kernel boot]# pwd
    /boot
    [root@pizhi-kernel boot]# cp config-3.10.0-229.el7.x86_64 /home/pizhi/linux-4.6.4/.config

    注意:执行完上面的cp命令以后,仍然需要使用make menuconfig命令并保存配置。
    编译之前需要安装rpmbuild工具:

    make rpm

    这一步会在/root/rpmbuild/RPMS生成对应的kernel rpm包。
    更新:

    yum install ./*.rpm

    1.2 安装kernel-devel包
    不需要像1.1中的花很长时间升级内核,只需要安装kernel-devel rpm包即可。
    安装:

    yum install kernel-devel

    如果源没啥问题,基本安装的和kernel rpm包的版本一致即可。
    测试:

    hello.c:
    #include <linux/init.h>
    #include <linux/module.h>
    static int hello_init(void) {
    printk(KERN_WARNING"Hello, pikachu kernel!\n");
    return 0;
    }
    static void hello_exit(void) {
    printk(KERN_INFO"Goodbye, pikachu kernel!\n");
    }
    module_init(hello_init);
    module_exit(hello_exit);
    MODULE_LICENSE("GPL");
    Makefile:
    ifneq ($(KERNELRELEASE),)
    obj-m := hello.o
    else
    KDIR := /lib/modules/`uname -r`/build
    all :
    make -C $(KDIR) M=$(PWD) modules
    clean:
    make -C $(KDIR) M=$(PWD) clean
    endif

    make过程遇到的问题:

    make -C /lib/modules/`uname -r`/build M=/root/code_kernel/hello modules
    make: *** /lib/modules/3.10.0-327.el7.x86_64/build: No such file or directory. Stop.
    make: *** [all] Error 2

    解决方法:
    /lib/modules/3.10.0-327.el7.x86_64/build没有指向正确的kernel source。建立软连接即可。

    [root@localhost 3.10.0-327.el7.x86_64]# pwd
    /lib/modules/3.10.0-327.el7.x86_64
    [root@localhost 3.10.0-327.el7.x86_64]# rm build
    [root@localhost 3.10.0-327.el7.x86_64]# ln -sv /usr/src/kernels/3.10.0-514.2.2.el7.x86_64/ build

    注:kernel打印的日志文件在/var/log/messages下。
    2单独编译KVM模块
    2.1 由SPEC文件编译出kernel source
    从http://vault.centos.org/7.2.1511/os/Source/SPackages/上面下载
    kernel-3.10.0-327.el7.src.rpm
    截图如下:


    解决依赖:

    yum-builddep kernel-3.10.0-327.el7.src.rpm
    rpm -ivh kernel-3.10.0-327.el7.src.rpm
    yum-builddep /root/rpmbuild/SPECS/kernel.spec

    生成kernel source:

    rpmbuild -bp /root/rpmbuild/SPECS/kernel.spec

    生成kernel source的路径:

    /root/rpmbuild/BUILD/kernel-3.10.0-327.el7

    2.2 单独编译KVM模块
    进入该kernel source目录:

    /root/rpmbuild/BUILD/kernel-3.10.0-327.el7/linux-3.10.0-327.el7.x86_64

    单独编译:

    make -j8 -C `pwd` M=`pwd`/arch/x86/kvm modules

    生成的kvm.ko和kvm-intel.ko在kernel source//arch/x86/kvm目录下。
    查看kvm模块:

    [root@pizhi-kernel ~]# lsmod | grep kvm
    kvm_intel 162153 0
    kvm 525259 1 kvm_intel

    卸载kvm模块:

    modprobe -r kvm_intel

    安装刚刚单独编译的kvm模块:

    cd /root/rpmbuild/BUILD/kernel-3.10.0-327.el7/linux-3.10.0-327.el7.x86_64/arch/x86/kvm
    insmod kvm.ko
    insmod kvm-intel.ko


    声明:本文转载自网络。版权归原作者所有,如有侵权请联系删除。
    扫描并关注51学通信微信公众号,获取更多精彩通信课程分享。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|51学通信技术论坛

    GMT+8, 2025-1-31 12:45 , Processed in 0.093517 second(s), 32 queries .

    Powered by Discuz! X3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表