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