我有一个包含多个对象的简单内核模块。当我编译它时,它会提示我缺少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 (centos6-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` cleanmain.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);
#endifutil.c
#include "util.h"
void test()
{
printk(KERN_INFO "whatever\n");
}发布于 2022-06-12 06:35:09
为了进一步调试这个问题,我已经将-v添加到ccflags中,而main.c甚至没有在CentOS 8上编译!
到目前为止,看起来模块名不能与对象名称相同,所以我必须修改makefile如下所示:
xxx-objs := main.o util.o
obj-m += xxx.o问题就解决了。
https://stackoverflow.com/questions/72589225
复制相似问题