当前位置: 技术问答>linux和unix
linux模块编译异常
来源: 互联网 发布时间:2016-12-21
本文导语: hello.c: #include #include #include static int hello_init(void){ printk(KERN_ALERT "hello worldn"); return 0; } static void hello_exit(void){ printk(KERN_ALERT "goodbye worldn"); } module_init(hello_init); modlue_exit(hello_exit); MODLUE_LICENSE("GPL"); MOULUE...
hello.c:
#include
#include
#include
static int hello_init(void){
printk(KERN_ALERT "hello worldn");
return 0;
}
static void hello_exit(void){
printk(KERN_ALERT "goodbye worldn");
}
module_init(hello_init);
modlue_exit(hello_exit);
MODLUE_LICENSE("GPL");
MOULUE_AUTHOR("xuhui");
MODLUE_DESCRIPTION("my frist driver,is hello");
MODULE_VERSION("1.0");
Makefile:
obj-m := modules_hello.o
modules_hello-objs := hello.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o .* .cmd *.KO *.mod.c .tmp_versions
终端运行结果:
[root@bogon ~]# cd /hello/
[root@bogon hello]# ls
hello.c Makefile
[root@bogon hello]# make
make -C /lib/modules/2.6.23.1-42.fc8/build M=/hello modules
make[1]: Entering directory `/usr/src/kernels/2.6.23.1-42.fc8-i686'
CC [M] /hello/hello.o
/hello/hello.c:15: 警告:数据定义时没有类型或存储类
/hello/hello.c:15: 警告:在 ‘modlue_exit’ 的声明中,类型默认为 ‘int’
/hello/hello.c:15: 警告:函数声明中出现形参名却未指定类型
/hello/hello.c:17: 错误:expected declaration specifiers or ‘...’ before string constant
/hello/hello.c:17: 警告:数据定义时没有类型或存储类
/hello/hello.c:17: 警告:在 ‘MODLUE_LICENSE’ 的声明中,类型默认为 ‘int’
/hello/hello.c:17: 警告:函数声明不是一个原型
/hello/hello.c:18: 错误:expected declaration specifiers or ‘...’ before string constant
/hello/hello.c:18: 警告:数据定义时没有类型或存储类
/hello/hello.c:18: 警告:在 ‘MOULUE_AUTHOR’ 的声明中,类型默认为 ‘int’
/hello/hello.c:18: 警告:函数声明不是一个原型
/hello/hello.c:19: 错误:expected declaration specifiers or ‘...’ before string constant
/hello/hello.c:19: 警告:数据定义时没有类型或存储类
/hello/hello.c:19: 警告:在 ‘MODLUE_DESCRIPTION’ 的声明中,类型默认为 ‘int’
/hello/hello.c:19: 警告:函数声明不是一个原型
make[2]: *** [/hello/hello.o] 错误 1
make[1]: *** [_module_/hello] 错误 2
make[1]: Leaving directory `/usr/src/kernels/2.6.23.1-42.fc8-i686'
make: *** [default] 错误 2
[root@bogon hello]#
这是我才开始接触liunx,学着编译模块。
请问这个Makefile究竟哪里有错啊?
编译时总是报这样的异常。在Redhat下和Ubuntu下都报这样的错。
#include
#include
#include
static int hello_init(void){
printk(KERN_ALERT "hello worldn");
return 0;
}
static void hello_exit(void){
printk(KERN_ALERT "goodbye worldn");
}
module_init(hello_init);
modlue_exit(hello_exit);
MODLUE_LICENSE("GPL");
MOULUE_AUTHOR("xuhui");
MODLUE_DESCRIPTION("my frist driver,is hello");
MODULE_VERSION("1.0");
Makefile:
obj-m := modules_hello.o
modules_hello-objs := hello.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o .* .cmd *.KO *.mod.c .tmp_versions
终端运行结果:
[root@bogon ~]# cd /hello/
[root@bogon hello]# ls
hello.c Makefile
[root@bogon hello]# make
make -C /lib/modules/2.6.23.1-42.fc8/build M=/hello modules
make[1]: Entering directory `/usr/src/kernels/2.6.23.1-42.fc8-i686'
CC [M] /hello/hello.o
/hello/hello.c:15: 警告:数据定义时没有类型或存储类
/hello/hello.c:15: 警告:在 ‘modlue_exit’ 的声明中,类型默认为 ‘int’
/hello/hello.c:15: 警告:函数声明中出现形参名却未指定类型
/hello/hello.c:17: 错误:expected declaration specifiers or ‘...’ before string constant
/hello/hello.c:17: 警告:数据定义时没有类型或存储类
/hello/hello.c:17: 警告:在 ‘MODLUE_LICENSE’ 的声明中,类型默认为 ‘int’
/hello/hello.c:17: 警告:函数声明不是一个原型
/hello/hello.c:18: 错误:expected declaration specifiers or ‘...’ before string constant
/hello/hello.c:18: 警告:数据定义时没有类型或存储类
/hello/hello.c:18: 警告:在 ‘MOULUE_AUTHOR’ 的声明中,类型默认为 ‘int’
/hello/hello.c:18: 警告:函数声明不是一个原型
/hello/hello.c:19: 错误:expected declaration specifiers or ‘...’ before string constant
/hello/hello.c:19: 警告:数据定义时没有类型或存储类
/hello/hello.c:19: 警告:在 ‘MODLUE_DESCRIPTION’ 的声明中,类型默认为 ‘int’
/hello/hello.c:19: 警告:函数声明不是一个原型
make[2]: *** [/hello/hello.o] 错误 1
make[1]: *** [_module_/hello] 错误 2
make[1]: Leaving directory `/usr/src/kernels/2.6.23.1-42.fc8-i686'
make: *** [default] 错误 2
[root@bogon hello]#
这是我才开始接触liunx,学着编译模块。
请问这个Makefile究竟哪里有错啊?
编译时总是报这样的异常。在Redhat下和Ubuntu下都报这样的错。
|
static int hello_init(void){
改为
static int __init hello_init(void){
static void hello_exit(void){
改为
static void __exit hello_exit(void){
改为
static int __init hello_init(void){
static void hello_exit(void){
改为
static void __exit hello_exit(void){
|
是的,学习了。误导LZ,抱歉啊。
|
楼主下载了内核头了吗?
感觉2.6.23.1-42.fc8-i686是系统默认的,可能没有内核头。
可以去kernel.org下一个内核源代码。
内核头英文好像是kernel-headers。
另外,也可以看看一些经典的书,LDD3,或者其它XXX驱动设计入门之类的书。
如不正确,希望指正。
感觉2.6.23.1-42.fc8-i686是系统默认的,可能没有内核头。
可以去kernel.org下一个内核源代码。
内核头英文好像是kernel-headers。
另外,也可以看看一些经典的书,LDD3,或者其它XXX驱动设计入门之类的书。
如不正确,希望指正。
|
缺少头文件。