我正在尝试构建 KVM,但无法弄清楚哪里出了问题。它构建得很好,我 99% 确信我在 git 中克隆了正确的内核标签,但它没有加载。
我正在运行 Ubuntu 22.04,带有 HWE。这是相关信息:
user@computer$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.4 LTS
Release: 22.04
Codename: jammy
user@computer$ hwe-support-status --verbose
Your Hardware Enablement Stack (HWE) is supported until April 2027.
user@computer$ uname -a
Linux computer 6.5.0-28-generic #29~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Apr 4 14:39:20 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
并且没有安全启动:
$ mokutil --sb-state
SecureBoot disabled
我按照KernelGitGuide克隆了 Jammy 的副本,并定位了标签:Ubuntu-hwe-6.5-6.5.0-28.29_22.04.1
因为这是与我的输出匹配的标签uname -a
,并且是 HWE。我的克隆命令:
git clone --branch Ubuntu-hwe-6.5-6.5.0-28.29_22.04.1 --depth 1 git://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/jammy kernel
为了构建内核,我运行:
cp /boot/config-6.5.0-28-generic ./kernel/.config
cp /usr/src/linux-headers-6.5.0-28-generic/Module.symvers ./kernel/
make -C ./kernel/ prepare
make -C ./kernel/ modules_prepare
make -C ./kernel/ M=arch/x86/kvm/
我将构建的文件安装到/lib/modules/6.5.0-28-generic/updates/mykvm
然后我运行sudo depmod -a 6.5.0-28-generic
, sudo rmmod kvm-intel kvm
, 和sudo modprobe kvm-intel
modprobe
输出:
$ sudo modprobe kvm-intel
modprobe: ERROR: could not insert 'kvm_intel': Exec format error
- 完整的 dmesg 错误:
module kvm: .gnu.linkonce.this_module section size must match the kernel's built struct module size at run time
任何见解将不胜感激。
答案就在这里:https://imil.net/blog/posts/2022/build-a-single-in-tree-linux-kernel-module-debian--clones/
我将详细介绍下面的步骤,因为我的目标是 linux 6.5.0,而不是像本文那样的 5.4.0(尽管这实际上是对命令的唯一更改)。
对我的构建系统进行这些调整后,我加载了 KVM,没有出现原来的错误。如果您在 dmesg 中看到未知符号错误,请确保
kvm.ko
先加载,然后再加载kvm-intel.ko
。