insmod自定义模块失败,显示消息:不同意符号版本

问题描述:

我想为自己制作一个netfilter conntrack模块。所以我将netfilter conntrack的所有源代码从内核源代码树复制到我的外部目录。编译后可以insmod。然后,我将一些成员添加到结构nf_conn中,并且它已成功编译。但是,它不能被insmod。系统给我的消息“不同意符号的版本....”。insmod自定义模块失败,显示消息:不同意符号版本

任何人都可以帮助我吗?

+0

我想拥有自己的conntrack模块而不影响原始的内核过程。原来的conntrack模块像以前一样保存。 – river

+0

您已修改的结构'nf_conn'不仅可以由netfilter conntrack模块使用,也可以在[其他模块](http://elixir.free-electrons.com/linux/latest/ident/nf_conn)中使用。如果你的模块使用这些模块的函数,你也需要重新编译它们。 (顺便说一句,“不同意版本”消息中显示的符号可能使用给定的结构)。 – Tsyvarev

+0

谢谢,我已经得到了解决方案。我回答自己。 – river

只需将修改后的conntrack模块的目录中的Module.symvers文件复制到当前的开发模块即可。对于相同的函数名称,将使用它来代替内核源码树提供的名称。

或者修改Makefile: OBJ-Y:= new_conntrack /来电/

它将利用从new_conntrack /新的CRC值。 https://www.kernel.org/doc/Documentation/kbuild/modules.txt