如何从 Linux 源代码树仅编译 KVM 内核模块?

如何从 Linux 源代码树仅编译 KVM 内核模块?

我希望从 Linux 源代码编译 KVM 模块并将其安装在我的 Debian 机器上。但是,我不想编译整个 Linux。我的内核来自 Debian。

我从互联网上听说这make M=arch/x86/kvm可能会有用,所以我决定尝试一下。

我的uname -r5.10.0-14-amd64。我运行的命令基本上是

sudo apt-get install linux-source-5.10
tar xaf /usr/src/linux-source-5.10.tar.xz 
cd linux-source-5.10/
cp /boot/config-$(uname -r) .config
make M=arch/x86/kvm

但是,运行时make M=arch/x86/kvm,我看到错误

make[1]: *** No rule to make target 'arch/x86/kvm/../../../virt/kvm/kvm_main.o', needed by 'arch/x86/kvm/kvm.o'.  Stop.
make: *** [Makefile:1846: arch/x86/kvm] Error 2

这是因为virt/kvm目录没有建立。但是我尝试了以下方法,但都没有奏效。

make M=virt
make M=virt/kvm
(cd virt; make -C .. M=.)
(cd virt/kvm; make -C ../.. M=.)
(cd arch/x86/kvm; make -C ../../.. M=.)
(cd arch/x86/kvm; make -C ../../.. M=. modules)
(cd arch/x86/kvm; make -C ../../.. M=. kvm.ko)

https://wiki.archlinux.org/title/Compile_kernel_module说我需要运行modules_prepare。使用以下命令,我可以编译kvm.koELF 文件。

make SUBLEVEL=0 EXTRAVERSION=-14-amd64 modules_prepare
make M=arch/x86/kvm
ls arch/x86/kvm/kvm.ko

但是,我无法使用insmod或 来安装它modprobemodprobe--force-vermagic选项也不起作用。不过,版本看起来是正确的。

$ sudo insmod arch/x86/kvm/kvm.ko
insmod: ERROR: could not insert module arch/x86/kvm/kvm.ko: Invalid module format
$ strings /usr/lib/modules/5.10.0-14-amd64/kernel/arch/x86/kvm/kvm.ko | grep 5.10.
5.10.0-14-amd64
vermagic=5.10.0-14-amd64 SMP mod_unload modversions 
$ strings arch/x86/kvm/kvm.ko | grep 5.10.
5.10.0-14-amd64
vermagic=5.10.0-14-amd64 SMP mod_unload modversions 
$ 

我应该如何构建和安装 KVM 模块?

注意:这个问题最初发布于堆栈溢出

相关内容