7

我目前正在尝试运行内核模块。这个模块似乎在各种 Linux 机器上都可以正常工作,但是,当我尝试在特定机器(即内核版本为 2.6 的 CentOS)上运行它时,模块无法启动,声称我没有设置模块许可证,因此不允许我使用各种必要的内核 API。

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

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

4

3 回答 3

5

首先,验证您的模块目标文件中是否存在许可证信息。

objdump -sj.modinfo yourModule.ko

于 2013-06-03T09:09:47.353 回答
5

我刚刚遇到了同样的问题,只有在我在模块的 makefile 所引用的每个MODULE_LICENSE("GPL")c 文件的开头(包含之后)编写后才修复了这个问题。

于 2016-12-04T11:19:41.750 回答
2

好吧,我已经弄清楚我做错了什么。我试图为我的模块编译启用 -Werror 标志。为此,我在 makefile 中添加了以下行:

CFLAGS_MODULE=-Werror

我认为这搞砸了内核的模块许可。删除此行使模块再次工作。如果您遇到此类问题,请确保您没有在 makefile 中弄乱环境变量。

于 2013-06-03T10:51:22.007 回答