我目前正在尝试运行内核模块。这个模块似乎在各种Linux机器上运行良好,但是,当我尝试在特定的机器(即内核版本为2.6的CentOS)上运行它时,模块无法启动,声称我没有设置模块许可证,因此,不允许我使用各种必要的内核API。
我在主源文件(包含module_init和module_exit)的底部设置了MODULE_LICENSE(“GPL”),就我能找到的所有例子而言,这就足够了。我应该注意我的项目有多个文件。
我有点难过,所以任何帮助都会受到赞赏。
答案 0 :(得分:4)
首先,请验证模块对象文件中是否存在许可证信息。
objdump -sj.modinfo yourModule.ko
答案 1 :(得分:4)
我刚刚遇到了同样的问题,只有在我在模块的makefile引用的每个 c文件的开头(包含之后)编写MODULE_LICENSE("GPL")
之后才解决这个问题。 / p>
答案 2 :(得分:2)
好的,我已经弄清楚我做错了什么。我试图为模块的编译启用-Werror标志。在这样做时,我将以下行添加到makefile:
CFLAGS_MODULE = -Werror
我认为这搞砸了内核的模块许可。删除此行使模块再次工作。如果您遇到此类问题,请确保您没有在makefile中搞乱环境变量。