insmod 错误,模块格式无效,fedora 35

问题描述 投票:0回答:2

我正在尝试了解内核模块,并遵循一个简单的 hello world 示例。我的计算机运行的是 fedora 35。当我运行

sudo insmod mymodule.ko
时,我收到错误
insmod: ERROR: could not insert module mymodule.ko: Invalid module format

从阅读其他人的问题来看,这似乎与内核版本与模块编译的内容不匹配有关,但是

uname -r
返回
5.16.18-200.fc35.x86_64
modinfo mymodule.ko
给出
vermagic: 5.16.18-200.fc35.x86_64 SMP preempt mod_unload
这似乎表明它们是相同的。

在其他一些帖子之后,我尝试了 dmesg 并得到:

[ 1689.372354] module: x86/modules: Skipping invalid relocation target, existing value is nonzero for type 1, loc 00000000d2334323, val ffffffffc140e000
这与其他用户所经历的完全不同(并且似乎与内核版本无关),但我无法理解它。

我的 makefile,如果它有用的话:

obj-m += mymodule.o

all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 
c linux linux-kernel kernel-module insmod
2个回答
2
投票

这篇文章让我走上了正确的道路,可能会帮助其他不使用 Fedora 的人 Linux 内核模块开发“模块:x86/modules:跳过无效的重定位目标,类型 1 的现有值非零”

问题出在内核标头上,一如既往,通过可靠的卸载和重新安装解决了问题:

sudo dnf remove kernel-devel
sudo dnf install kernel-devel

0
投票

为了解决这个问题,我们可以求助于 --force-vermagic 选项,但这个解决方案可能不安全

sudo insmod mymodule.ko --force-vermagic
© www.soinside.com 2019 - 2024. All rights reserved.