我正在尝试学习内核模块,并遵循一个简单的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 发布于 2022-04-07 01:45:49
这篇文章让我走上了正确的道路,可能会帮助其他不使用fedora Linux Kernel Module Development "module: x86/modules: Skipping invalid relocation target, existing value is nonzero for type 1"的人。
问题在于内核头,与以往一样,通过可靠的卸载和重新安装解决了问题:
sudo dnf remove kernel-devel
sudo dnf install kernel-develhttps://stackoverflow.com/questions/71746284
复制相似问题