驱动与内核相关,所以对驱动的编译来说,真正的编译者是内核的Makefile。可以从下面看到
KERNELDIR ?= /linux-2.6.30.4
# The current directory is passed to sub-makes as argument
PWD := $(shell pwd)
CROSS_COMPILE = arm-linux-
CC = $(CROSS_COMPILE)gcc看出
obj-m := led.o
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY: modules modules_install clean
obj-m := led.o 将led.o放入模块编译列表,obj-m会在内核Makefile中被使用。led.o是一种被内核Makefile中解释的隐式规则。
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules 会进入内核源码目录( $(KERNELDIR)指定)调用总的Makefile;
$(PWD)指定当前目录为待编译模块目录;modules为模块编译选项
.PHONY: modules modules_install clean 这里申明这三个目标为虚拟目标,防止因为有重名文件导致的不能正常编译