xuyuanfan77 发表于 2011-05-09 09:55

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,为何至始至终都没出现过?等等,希望大牛解释的详细一点。

daniel_kohler 发表于 2011-05-12 13:01

回复 1# xuyuanfan77


    好像GCC要加一个系统的路径,具体不太记得了。

embeddedlwp 发表于 2011-05-17 13:02

回复 1# xuyuanfan77


    比如报错信息中提到未实现的kmalloc,kfree是否是你没有包含需要的头文件

linux_zcha95 发表于 2011-05-17 17:31

添加声明kmallo,kfree的头文件“linux/slab.h”即可。

xuyuanfan77 发表于 2011-05-19 13:03

已经解决了,多谢!!!

xuyuanfan77 发表于 2011-05-19 13:05

不过这里怎么结贴,不懂啊???

shaohui973 发表于 2011-05-20 11:14

{:3_183:}不需要结贴
页: [1]
查看完整版本: makefile老是编译不过,新手求助~~