Chinaunix首页 | 论坛 | 博客
  • 博客访问: 235323
  • 博文数量: 48
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 548
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-28 19:18
文章分类

全部博文(48)

文章存档

2010年(6)

2009年(6)

2008年(36)

我的朋友

分类: LINUX

2009-03-24 16:57:02

简单的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两个文件生成
 
阅读(2256) | 评论(0) | 转发(0) |
0

上一篇:linux简单驱动程序流程

下一篇:JAVA

给主人留下些什么吧!~~