linux内核中单独module的编译和使用

以kvm为例

编译

当前系统内核版本: 5.3.8

当前系统内核版本对应的源代码目录: ~/下载/linux-5.3.8/

当前系统内核版本对应的源代码目录中kvm module源码的位置: ~/下载/linux-5.3.8/arch/x86/kvm/

当前系统存放module文件的位置: /lib/modules/5.3.8/kernel/arch/x86/kvm/

  1. 为了检验新编译出的kvm模块是否起作用,向kvm module源码目录下的vmx/vmx.c源码的vmx_init()函数中加入以下printk语句并保存
printk(KERN_ALERT "Start KVM by haiyonghao,HAHHA\n");
  1. 清除前一次的编译结果
make clean CONFIG_KVM=m CONFIG_INTEL_KVM=m -C ~/下载/linux-5.3.8/ M=~/下载/linux-5.3.8/arch/x86/kvm/
  1. 编译kvm
make CONFIG_KVM=m CONFIG_INTEL_KVM=m -C ~/下载/linux-5.3.8/ M=~/下载/linux-5.3.8/arch/x86/kvm/

编译完成之后在kvm源代码目录得到了kvm.ko和kvm-intel.ko,以及用于amd芯片的kvm-amd.

启用新模块并测试

  1. 将编译生成的kvm.ko和kvm_intel.ko拷贝到当前系统存放module文件的位置
sudo cp ~/下载/linux-5.3.8/arch/x86/kvm/{kvm.ko,kvm-intel.ko} /lib/modules/5.3.8/kernel/arch/x86/kvm/
  1. 查看当前系统中是否包含kvm module,如果有则卸载

该卸载不会删除第1步拷贝过去的文件,只会从内核上卸载模块

# 查看是否包含kvm模块
lsmod | grep kvm
# 如果有, 则卸载模块(由于kvm-intel依赖kvm,因此先卸载kvm-intel后卸载kvm)
sudo rmmod kvm-intel
sudo rmmod kvm
  1. 加载新编译的模块
sudo modprobe kvm
sudo modprobe kvm-intel
  1. 查看内核消息日志中是否有我们打印出的信息
dmesg
posted @ 2021-02-24 11:14  EwanHai  阅读(1281)  评论(0编辑  收藏  举报