makefile老是编译不过,新手求助~~
这是一个简单字符设备驱动的makefile,源码拿人家的,应该没错,makefile如下:ifneq ($(KERNELRELEASE),)obj-m:=memdev.o
else
KERNELDIR:=/lib/modules/$(shell uname -r)/build #内核目录
PWD:=$(shell pwd) #当前目录
default:
make -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *mod.c *.mo错误信息如下:noah@ubuntu:~/Desktop$ make
make -C /lib/modules/2.6.35-22-generic/build M=/home/noah/Desktop modules
make: Entering directory `/usr/src/linux-headers-2.6.35-22-generic'
CC /home/noah/Desktop/memdev.o
/home/noah/Desktop/memdev.c:15: warning: type defaults to ‘int’ in declaration of ‘mem_major’
/home/noah/Desktop/memdev.c: In function ‘mem_read’:
/home/noah/Desktop/memdev.c:71: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘long unsigned int’
/home/noah/Desktop/memdev.c: In function ‘mem_write’:
/home/noah/Desktop/memdev.c:99: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘long unsigned int’
/home/noah/Desktop/memdev.c: In function ‘memdev_init’:
/home/noah/Desktop/memdev.c:174: error: implicit declaration of function ‘kmalloc’
/home/noah/Desktop/memdev.c:174: warning: assignment makes pointer from integer without a cast
/home/noah/Desktop/memdev.c:186: warning: assignment makes pointer from integer without a cast
/home/noah/Desktop/memdev.c: In function ‘memdev_exit’:
/home/noah/Desktop/memdev.c:202: error: implicit declaration of function ‘kfree’
make: *** Error 1
make: *** Error 2
make: Leaving directory `/usr/src/linux-headers-2.6.35-22-generic'
make: *** Error 2希望大牛们帮我解决一下问题:
1、之所以出错是不是因为找不到kfree和kmalloc的头文件,如果是mm.h的话,我在/usr/src/linux-headers-2.6.35-22-generic/include/linux中能找到,可接下来又要干嘛?
2、能不能详详细细的解释这个makefile的所有执行过程,一直都搞不清楚到底是怎么样编译的,我也在网上搜过和根据控制台输出的信息分析过,可还是不懂,如:obj-m:=memdev.o为啥没用过?$(KERNELRELEASE)是什么变量?make -C $(KERNELDIR) M=$(PWD) modules有M=这个选项吗?我驱动的源码文件是memdev.c,为何至始至终都没出现过?等等,希望大牛解释的详细一点。 回复 1# xuyuanfan77
好像GCC要加一个系统的路径,具体不太记得了。 回复 1# xuyuanfan77
比如报错信息中提到未实现的kmalloc,kfree是否是你没有包含需要的头文件 添加声明kmallo,kfree的头文件“linux/slab.h”即可。 已经解决了,多谢!!! 不过这里怎么结贴,不懂啊??? {:3_183:}不需要结贴
页:
[1]