驅動與內核相關,所以對驅動的編譯來說,真正的編譯者是內核的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 這裏申明這三個目標爲虛擬目標,防止因爲有重名文件導致的不能正常編譯