已设置MODULE_LICENSE,但仍出现“模块许可证'unspecified'污染内核”的错误提示信息。

8
我目前正在尝试运行一个内核模块。这个模块在各种Linux机器上似乎都可以正常工作,但是当我尝试在特定的机器上运行它(即,CentOS版本为2.6的机器)时,该模块无法启动,声称我没有设置模块许可证,并因此不允许我使用各种必要的内核API。
我已经在我的主源文件底部(包含module_init和module_exit的文件)中设置了MODULE_LICENSE(“GPL”),至少所有我能找到的示例都是这样说的。我应该注意到我的项目有多个文件。
我有点困惑,所以任何帮助将不胜感激。

你已经在每台机器上重新编译了模块,对吧? - Armali
是的,我在两台不同的机器上编译了它。我已经找到了解决方案,请见下文。 - Ori Osherov
3个回答

6

首先,确认您的模块对象文件中是否存在许可证信息。

objdump -sj.modinfo yourModule.ko


5
我刚遇到了同样的问题,只有在我在每个模块的makefile引用的每个c文件的开头(包括包含文件之后)写下MODULE_LICENSE("GPL")之后,问题才得以解决。

1
谢谢。这也是我的问题。 (我认为很多人构建“单文件”模块并没有注意到这一点。) - PatchyFog

3

好的,我找出了我的错误所在。我试图启用-Werror标志来编译我的模块。为此,我在makefile中添加了以下行:

CFLAGS_MODULE=-Werror

我认为这可能会影响内核模块许可证的某些内容。删除此行使模块再次正常工作。如果您遇到此类问题,请确保不要在makefile中搞乱环境变量。


我在我的 make 文件中没有这样的标志,但尽管我的模块中有 MODULE_LICENSE,仍然看到相同的错误。 - Abhishek Sagar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接