makefile老是编译不过,新手求助~~

发布于 2022-10-15 07:32:37 字数 2716 浏览 23 评论 0

这是一个简单字符设备驱动的makefile,源码拿人家的,应该没错,makefile如下:

  1. ifneq ($(KERNELRELEASE),)
  2. obj-m:=memdev.o
  3. else
  4. KERNELDIR:=/lib/modules/$(shell uname -r)/build     #内核目录
  5. PWD:=$(shell pwd)                                   #当前目录
  6. default:
  7.         make -C $(KERNELDIR) M=$(PWD) modules
  8. clean:
  9.         rm -rf *.o *mod.c *.mo

复制代码错误信息如下:

  1. noah@ubuntu:~/Desktop$ make
  2. make -C /lib/modules/2.6.35-22-generic/build      M=/home/noah/Desktop                                    modules
  3. make[1]: Entering directory `/usr/src/linux-headers-2.6.35-22-generic'
  4.   CC [M]  /home/noah/Desktop/memdev.o
  5. /home/noah/Desktop/memdev.c:15: warning: type defaults to ‘int’ in declaration of ‘mem_major’
  6. /home/noah/Desktop/memdev.c: In function ‘mem_read’:
  7. /home/noah/Desktop/memdev.c:71: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘long unsigned int’
  8. /home/noah/Desktop/memdev.c: In function ‘mem_write’:
  9. /home/noah/Desktop/memdev.c:99: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘long unsigned int’
  10. /home/noah/Desktop/memdev.c: In function ‘memdev_init’:
  11. /home/noah/Desktop/memdev.c:174: error: implicit declaration of function ‘kmalloc’
  12. /home/noah/Desktop/memdev.c:174: warning: assignment makes pointer from integer without a cast
  13. /home/noah/Desktop/memdev.c:186: warning: assignment makes pointer from integer without a cast
  14. /home/noah/Desktop/memdev.c: In function ‘memdev_exit’:
  15. /home/noah/Desktop/memdev.c:202: error: implicit declaration of function ‘kfree’
  16. make[2]: *** [/home/noah/Desktop/memdev.o] Error 1
  17. make[1]: *** [_module_/home/noah/Desktop] Error 2
  18. make[1]: Leaving directory `/usr/src/linux-headers-2.6.35-22-generic'
  19. make: *** [default] 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,为何至始至终都没出现过?等等,希望大牛解释的详细一点。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

卷耳 2022-10-22 07:32:37

回复 1# xuyuanfan77

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

酒绊 2022-10-22 07:32:37

回复 1# xuyuanfan77

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

征棹 2022-10-22 07:32:37

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

半世晨晓 2022-10-22 07:32:37

已经解决了,多谢!!!

濫情▎り 2022-10-22 07:32:37

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

放手` 2022-10-22 07:32:37

{:3_183:}不需要结贴

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文