可以加载“不同意符号版本”的内核模块

可以加载“不同意符号版本”的内核模块

我下载了内核的源代码,应用了补丁并重建了它,现在我有了一个内核模块,当我尝试时insmod,它会抱怨“模块中的未知符号”并dmesg给出错误“不同意符号的版本......” 。

无需寻找该模块的源代码并根据我的内核重建它,是否有可能以某种方式强制内核接受该模块?

我知道这很危险,但如果可能的话我会冒险。

答案1

insmod不是加载模块的最佳工具 -modprobe相反,它更聪明。在modprobe的手册页,你会发现它有一个--force选项可能加载版本信息冲突的模块。

正如你所说,这是危险的,基本上不应该使用。如果你的系统崩溃了,你就可以收拾残局。

答案2

如果您重建相同的内核版本并收到该错误,则很可能您应用的补丁更改了模块引用的内核中的某些内容。这几乎可以保证它会爆炸。您将需要找到该模块的源代码并针对新内核再次编译它,以便它具有正确的引用。

也有可能它根本无法编译,需要进行修改以匹配您的内核补丁所做的任何修改。

答案3

执行 make clean,然后在模块目录中再次 make,然后 insmod 它,您将不会收到该错误。或者另一种情况可能是您缺少内核头文件,请根据您拥有的发行版安装它们。

相关内容