在命令 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
具有相同功能的。
在尝试针对正确的内核源进行构建之前,请务必清理以前构建的所有现有工件。