Module 编译示例内核模块时出错
我试图使用init和cleanup函数的替代名称从《Linux内核模块编程指南》中编译一个示例模块,但我不断收到以下错误:Module 编译示例内核模块时出错,module,kernel,Module,Kernel,我试图使用init和cleanup函数的替代名称从《Linux内核模块编程指南》中编译一个示例模块,但我不断收到以下错误: make -C /lib/modules/4.15.0-54-generic/build M=/media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3 modules make[1]: Entering directory '/usr/src/linux-headers-4.15.0-54-generic' C
make -C /lib/modules/4.15.0-54-generic/build
M=/media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3 modules
make[1]: Entering directory '/usr/src/linux-headers-4.15.0-54-generic'
CC [M]
/media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3/hello-3.o In
file included from
/media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3/hello-3.c:1:0:
./include/linux/module.h:129:42: error: redefinition of ‘__inittest’
static inline initcall_t __maybe_unused __inittest(void) \
^ /media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3/hello-3.c:18:1:
note: in expansion of macro ‘module_init’ module_init(hello_3_exit);
^~~~~~~~~~~ ./include/linux/module.h:129:42: note: previous definition
of ‘__inittest’ was here static inline initcall_t __maybe_unused
__inittest(void) \
^ /media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3/hello-3.c:17:1:
note: in expansion of macro ‘module_init’ module_init(hello_3_init);
^~~~~~~~~~~
/media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3/hello-3.c:
In function ‘__inittest’:
/media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3/hello-3.c:18:13:
error: return from incompatible pointer type
[-Werror=incompatible-pointer-types] module_init(hello_3_exit);
^ ./include/linux/module.h:130:11: note: in definition of macro ‘module_init’ { return initfn; } \
^~~~~~ /media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3/hello-3.c:
At top level: ./include/linux/module.h:131:6: error: redefinition of
‘init_module’ int init_module(void) __attribute__((alias(#initfn)));
^ /media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3/hello-3.c:18:1:
note: in expansion of macro ‘module_init’ module_init(hello_3_exit);
^~~~~~~~~~~ ./include/linux/module.h:131:6: note: previous definition
of ‘init_module’ was here int init_module(void)
__attribute__((alias(#initfn)));
^ /media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3/hello-3.c:17:1:
note: in expansion of macro ‘module_init’ module_init(hello_3_init);
^~~~~~~~~~~ cc1: some warnings being treated as errors
scripts/Makefile.build:337: recipe for target
'/media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3/hello-3.o'
failed make[2]: ***
[/media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3/hello-3.o]
Error 1 Makefile:1552: recipe for target
'_module_/media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3'
failed make[1]: ***
[_module_/media/aaron/GoogleDrive/School/CSC239/project/LKM/hello3]
Error 2 make[1]: Leaving directory
'/usr/src/linux-headers-4.15.0-54-generic' Makefile:4: recipe for
target 'all' failed make: *** [all] Error 2
以下是我的源文件和make文件:
#包括所有模块所需的/**/
#包含内核信息所需的/**/
#包括
静态int hello3_data_uuinitdata=3;
静态int\uu init hello\u 3\u init(void)
{
printk(KERN_INFO“Hello world%d.\n”,hello3_数据);
返回0;
}
静态无效\uu退出你好\u3\u退出(无效)
{
printk(KERN_INFO“再见世界3.\n”);
}
模块_init(hello_3_init);
模块初始化(hello\u 3\u退出);
生成文件:
obj-m := hello-3.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
我做错了什么?看起来init.h中有一个错误,但我无法编辑它。非常感谢您的帮助。看看您的最后几行:
module_init(hello_3_init);
模块初始化(hello\u 3\u退出);
您已经使用了两次module_init
相反,您要使用模块\u退出
:
module_init(hello_3_init);
模块退出(你好3退出);
希望我回答这个问题还来得及 看看你的最后几行:
module_init(hello_3_init);
模块初始化(hello\u 3\u退出);
您已经使用了两次module_init
相反,您要使用模块\u退出
:
module_init(hello_3_init);
模块退出(你好3退出);
希望我回答这个问题还来得及 请不要对日志使用blockquote格式-如果没有保留的换行符,日志将无法读取。对于使用与代码相同格式的日志,请不要对日志使用blockquote格式-如果没有保留的换行符,它们将无法读取。对于日志,使用与代码相同的格式