2013-05-29 63 views
3

,但是获取消息“模块许可证”未指定'taints kernel“我正在尝试运行内核模块。这个模块似乎可以在各种Linux机器上正常工作,但是,当我尝试在特定的机器上运行它(即内核版本为2.6的CentOS)时,模块无法启动,声称我没有设置模块许可证,结果,不允许我使用各种必需的内核API。虽然设置了MODULE_LICENSE

我在我的主源文件(包含module_init和module_exit的文件)的底部设置了MODULE_LICENSE(“GPL”),并且就我能找到的所有示例而言,这就够了。我应该注意到我的项目有多个文件。

我很难过,所以任何帮助将不胜感激。

+0

您已经在每台机器上重新编译了模块,不是吗? – Armali

+0

是的,我将它编译在两台独立的机器上。我已经想出了解决方案,请参阅下文。 –

回答

2

好啦,我已经想通了,我做错了什么。我试图为模块的编译启用-Werror标志。在这一过程中,我添加了以下行生成文件:

CFLAGS_MODULE = -Werror

我以为这搞砸了一些关于内核模块的许可。删除这条线使模块再次工作。如果你遇到这样的问题,确保你没有搞乱makefile中的环境变量。

+0

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

3

首先,验证许可证信息是否存在于模块对象文件中。

objdump的-sj.modinfo yourModule.ko

1

我刚刚遇到了同样的问题,这是我固定在开始写MODULE_LICENSE("GPL")后才(在包括之后)该模块的makefile文件指的是每 C文件的。

相关问题