Module 编译示例内核模块时出错

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

我试图使用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'
 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格式-如果没有保留的换行符,它们将无法读取。对于日志,使用与代码相同的格式