C语言 MODULE_LICENSE是定义的,但在linux内核5.X中未检测到



我有一个简单的内核模块与多个对象。当我编译它时,它提示我MODULE_LICENSE缺失。它是在main中定义的。O但不知何故未被编译器发现:

make -C /lib/modules/`uname -r`/build M=`pwd` modules
make[1]: Entering directory '/usr/src/kernels/5.14.0-105.el9.x86_64'
CC [M]  /tmp/linux5-multi-files/util.o
LD [M]  /tmp/linux5-multi-files/main.o
MODPOST /tmp/linux5-multi-files/Module.symvers
ERROR: modpost: missing MODULE_LICENSE() in /tmp/linux5-multi-files/main.o
make[2]: *** [scripts/Makefile.modpost:150: /tmp/linux5-multi-files/Module.symvers] Error 1
make[2]: *** Deleting file '/tmp/linux5-multi-files/Module.symvers'
make[1]: *** [Makefile:1792: modules] Error 2
make[1]: Leaving directory '/usr/src/kernels/5.14.0-105.el9.x86_64'
make: *** [Makefile:5: build] Error 2

在旧的Linux (centos 6-7)上工作得很好,但在centos 8和centos 9上,它不再工作。出什么事了?我把所有的文件都附上了。

——附加所有文件——

Makefile

main-objs := util.o
obj-m += main.o
build:
make -C /lib/modules/`uname -r`/build M=`pwd` modules
clean:
make -C /lib/modules/`uname -r`/build M=`pwd` clean

c

#include "util.h"
static void __exit cleanup(void)
{

}
static int __init startup(void)
{
test();
return 0;
}
module_init(startup);
module_exit(cleanup);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Linux");

util.h

#ifndef UTIL_H
#define UTIL_H
#include <linux/module.h>
#include <linux/kernel.h>
void test(void);
#endif

util.c

#include "util.h"
void test()
{
printk(KERN_INFO "whatevern");
}

为了进一步调试这个问题,我已经将-v添加到ccflags中,并且main.c甚至没有在CentOS 8上编译!

到目前为止,看起来模块名称不能与对象名称相同,因此我必须将makefile修改为如下内容:
xxx-objs := main.o util.o
obj-m += xxx.o

问题就解决了。

最新更新