免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 953 | 回复: 0
打印 上一主题 下一主题

驱动makefile [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-24 16:57 |只看该作者 |倒序浏览
简单的MAKEFILE文件
obj-m := file.o
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD ?= $(shell pwd)
defalult:
  make -C ${KERNELDIR} M=${PWD} modules
install:
   insmod file.ko
uninstall:
   rmmod file.ko
clear:
   make -C ${KERNELDIR} M=${PWD} clean

obj-m := file.o指定需要产生的KO模块需要的.O文件
KERNELDIR := /lib/modules/2.6.23.1-42.fc8/build
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
-C $(KERNELDIR)  -C 用来改变make的执行目录,即在KERNELDIR(内核源码目录)下找到顶层的makefile
M=$(PWD) modules  这个是使makefile在试图生成模块之前,回到模块源码目录.
为什么编译器要去内核源码目录下转一圈那?
因为驱动编译成模块,其实也是内核的一个部分,那么编译前就必须找到相应的内核版本及其相应的关系,如相关的头文件和System.map函数分配地址。
M=$(PWD) modules 后面的modules表示在回到源目录后modules目标指向obj -m变量中指定的模块。

如果产生KO的.O文件大于一个 还可以下面的方法来写
obj-m := modules.0
module-objs := file1.o file.o
表示该KO又file1.o file.o两个文件生成


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/72457/showart_1878123.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP