我下载了内核的源代码,应用了补丁并重建了它,现在我有了一个内核模块,当我尝试时insmod
,它会抱怨“模块中的未知符号”并dmesg
给出错误“不同意符号的版本......” 。
无需寻找该模块的源代码并根据我的内核重建它,是否有可能以某种方式强制内核接受该模块?
我知道这很危险,但如果可能的话我会冒险。
答案1
insmod
不是加载模块的最佳工具 -modprobe
相反,它更聪明。在modprobe
的手册页,你会发现它有一个--force
选项可能加载版本信息冲突的模块。
正如你所说,这是危险的,基本上不应该使用。如果你的系统崩溃了,你就可以收拾残局。
答案2
如果您重建相同的内核版本并收到该错误,则很可能您应用的补丁更改了模块引用的内核中的某些内容。这几乎可以保证它会爆炸。您将需要找到该模块的源代码并针对新内核再次编译它,以便它具有正确的引用。
也有可能它根本无法编译,需要进行修改以匹配您的内核补丁所做的任何修改。
答案3
执行 make clean,然后在模块目录中再次 make,然后 insmod 它,您将不会收到该错误。或者另一种情况可能是您缺少内核头文件,请根据您拥有的发行版安装它们。