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

insmod error, invalid module format, fedora 35

我正在尝试了解内核模块,然后是一个简单的 hello world 示例。我的电脑是 运行ning fedora 35。当我 运行 sudo insmod mymodule.ko 我得到错误 insmod: ERROR: could not insert module mymodule.ko: Invalid module format.

从阅读其他人的问题来看,它似乎与内核版本与编译模块的目标不匹配有关,但是 uname -r returns 5.16.18-200.fc35.x86_64modinfo 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 

这个 post 让我走上了正确的道路,可能会帮助其他不使用 fedora 的人

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

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