无效模块格式错误

无效模块格式错误

在命令 make 之后,我调用命令sudo insmod example1.ko,我插入密码,然后出现这样的错误 insmod error: could not insert module example1.ko: Invalid module format。我的 ubuntu 版本是5.8.0-44-generic,我的 example1.ko 版本是5.8.0-38-generic。也许这些版本应该与我相同?我一直在尝试更改我的 Makefile 从/lib/modules/($ shell uname -r)/build/lib/modules/5.8.0.-38-generic/build 但仍然是相同的错误。我不知道如何解决这个问题。

我使用命令dmesg搜索有关问题的更多信息,发现了一些错误

example1: version magic '5.8.0-38-generic SMP mod_unload' should be '5.8.0-44-generic SMP mod_unload'

还有六行有同样的问题和两个错误Failed to send host log message

我的 Makefile 文件如下所示:

obj-m := example1.o

default:
  make -C /lib/modules/5.8.0-44-generic/build M=$(PWD) modules
clean
  make -C /lib/modules/5.8.0-44-generic/build M=$(PWD) clean

我跑了make clean ; make,但没有任何效果。

答案1

对这个问题的评论导致了我将在此处总结的解决方案。

OP想要构建一个Linux内核模块;他们针对错误版本的内核源代码(即,针对与正在运行的内核不同的内核源版本)构建了它。这由缓冲区的日志指示dmesg

要解决该问题,您需要指向与要加载模块的内核相对应的内核源代码。您可以在命令行上明确执行此操作:

$ make -C <path_to_kernel_src> M=$PWD

或者创建一个Makefile具有相同功能的。

在尝试针对正确的内核源进行构建之前,请务必清理以前构建的所有现有工件。

相关内容