前些天寫一個驅動模塊。竟然寫內核模塊Makefile時出了問題,於是將其總結下來,下次再用時拿過來改下就行了。
#General Purpose Makefile for Linux Kernel module by guoqingbo
KERN_DIR = /home/gqb/development/linux-kernel-2.6.37
#KERN_DIR = /usr/src/$(shell uname -r)
#KERN_DIR = /lib/modules/$(shell uname -r)/build
all:
make -C $(KERN_DIR) M=$(shell pwd) modules
clean:
make -C $(KERN_DIR) M=$(shell pwd) modules clean
rm -rf modules.order
obj-m += xxx.o
第3行KERN_DIR表示內核源碼目錄,這種方式適用於嵌入式開發的交叉編譯,KERN_DIR目錄中包含了內核驅動模塊所需要的各種頭文件及依賴。若在PC機開發內核模塊則應使用第4、5行的寫法。
第8行中-C表示 指定進入指定的目錄即KERN_DIR,是內核源代碼目錄,調用該目錄頂層下的Makefile,目標為modules。
M=$(shell pwd)選項讓該Makefile在構造modules目標之前返回到模塊源代碼目錄並在當前目錄生成obj-m指定的xxx.o目標模塊。
clean這個目標表示將模塊清理掉
obj-m += xxx.o即指定當前目錄要生成的目標模塊,然後modules目標指向obj-m變量中設定的模塊