在命令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,但没有效果。
发布于 2021-02-28 18:36:48
对这个问题的评论导致了一个解决办法,我将在这里总结。
OP想要构建一个Linux内核模块;他们构建它是针对错误版本的内核源代码(也就是说,针对与运行中的内核不同的内核源代码版本)。这是由dmesg缓冲区的日志表示的。
要解决这个问题,您需要指向与要加载模块的内核对应的内核源。您可以在命令行上显式地这样做:
$ make -C M=$PWD或者创建一个执行相同操作的Makefile。
在尝试使用正确的内核源构建之前,一定要清除以前构建中的任何现有构件。
https://unix.stackexchange.com/questions/636728
复制相似问题