#如果已經定義了KERNELRELEASE,則說明是從內核整體編譯的Make中調用。在我的2.6.31內核的
#Makefile中L357行有關於KERNELRELEASE定義:
#KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
#因此可以使用其內建語句
ifneq ($(KERNELRELEASE), )
obj-m := hello.o
#否則,是直接從命令行調用,
#這時需要調用內核構造系統
#對$(shell uname -r)會得到Linux系統版本相關信息:
# uname -r
#2.6.32-28-genericelse
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
#對下面一句Makefile的解釋:-C $(KERNELDIR)表示讀取Makefile之前進入KERNELDIR目錄,M=$(PWD)
#作爲參數傳給Makefile,在試圖建立模塊目標前, 回到你的模塊源碼目錄,內核中的解釋是:
#make M=dir modules Make all modules in specified dir
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif