Linux模块版本错误“模块格式无效”

Linux模块版本错误“模块格式无效”,linux,module,kernel,insmod,Linux,Module,Kernel,Insmod,我制作了Linux外部模块,因为我的模块需要Linux内核符号 我设置了Modversion配置并进行了修改。我还进行了模块的安装 我的模块完全是在lib/modules/mylinux/extra中创建的/ 但当我插入模块时,shell会打印错误消息 insmod: ERROR: could not insert module oxen_aggregator_module.ko: Invalid module format 这是dmesg内容 [ 341.458351] oxen_aggr

我制作了Linux外部模块,因为我的模块需要Linux内核符号

我设置了Modversion配置并进行了修改。我还进行了模块的安装

我的模块完全是在lib/modules/mylinux/extra中创建的/

但当我插入模块时,shell会打印错误消息

insmod: ERROR: could not insert module oxen_aggregator_module.ko: Invalid module format
这是dmesg内容

[  341.458351] oxen_aggregator_module: version magic '3.17.8-gentoo-r1 SMP mod_unload modversions ' should be '3.17.8-gentoo-r1 SMP mod_unload '
但我需要modversions标志,因为如果我没有设置该标志,Module.symvers只有0x00000000地址

你能帮我吗?我怎样才能解决这个问题

我的制作文件

SRCS    = oxen_aggregator_module.c
OBJS    = $(SRCS:.c=.o)

obj-m += $(OBJS)

KBUILD_EXTRA_SYMBOLS={/usr/src/linux-$(shell unamr -r)/Module.symvers}
all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules_install
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
    $(RM) Module.markers modules.order

您试图将模块加载到内核中,但尚未为其构建itmodule。或者您为一个内核构建模块,但在为另一个内核创建的module.symvers文件中使用KBUILD_EXTRA_符号


如果您需要在内核的Module.symvers文件中使用KBUILD\u EXTRA\u符号,那么肯定会在某个地方弄乱不同的内核。

通常,在更改版本控制后,整个内核都应该重新生成make、make modules\u install、make install,并放在最上面的源代码目录中。@Tsyvarev我也这样做了,但没有解决。任何其他解决方案?按此处所述拆分Makefile并删除KBUILD_EXTRA_SYMBOLS指令:自动使用内核的Module.symvers文件。然后,在清理模块目录后,尝试重建模块。顺便说一下,您的模块没有放在内核树中,是吗?是的,我的模块没有放在内核树中,但我需要使用内核函数,这就是为什么我要引用内核的符号表@TsyvarevAgain,KBUILD_EXTRA_符号只需要用于内核之外的其他模块的符号。您不需要特殊的方法来使用内核核心和随它提供的模块中的符号。那么,如何从外部将模块插入内核树中以使用导出的内核符号呢?或者有关于外部模块编程的解释吗?感谢您只需编译模块,使用不带KBUILD\u额外符号的Makefile即可。可用于外部模块的内核符号集不依赖于modversion配置。