【问题标题】:Getting message "module license 'unspecified' taints kernel " despite setting MODULE_LICENSE尽管设置了 MODULE_LICENSE,但仍收到消息“模块许可证‘未指定’污染内核”
【发布时间】:2013-05-29 08:49:16
【问题描述】:

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

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

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

【问题讨论】:

  • 你在每台机器上都重新编译了模块,不是吗?
  • 是的,我在两台不同的机器上编译它。我已经找到了解决方案,见下文。

标签: linux kernel-module


【解决方案1】:

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

objdump -sj.modinfo yourModule.ko

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢。这也是我的问题。 (我认为很多人构建“1 文件”模块并没有看到这个。)
    【解决方案3】:

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

    CFLAGS_MODULE=-Werror

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

    【讨论】:

    • 我的 make 文件中没有任何此类标志,但尽管我的模块中有 MODULE_LICENSE,但仍看到相同的错误。
    猜你喜欢
    • 1970-01-01
    • 2017-09-09
    • 2021-04-13
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2022-06-12
    • 2018-11-27
    • 1970-01-01
    相关资源
    最近更新 更多