糯米文學吧

位置:首頁 > IT認證 > Linux認證

簡單的驅動makefile詳解

一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要後編譯,哪些文件需要重新編譯,甚至於進行更復雜的功能操作,因為 makefile就像一個Shell腳本一樣,其中也可以執行操作系統命令

簡單的驅動makefile詳解

  Linux 2.6 (PC)簡單驅動Makefile詳解

ifneq ($(KERNELRELEASE),)

module-objs := book.o

obj-m := book.o

else

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

modules:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

endif

clean:

rm -rf *.o *~nd.* * * versions

KERNELRELEASE 內核頂層目錄Makefile的`一個變量。

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

內核源碼樹目錄。

該Makefile 共讀取兩次,在輸入Makefile時,$(KERNELDIR) 第一次讀取KERNELRELEASE並沒有被定義,然後就開始讀取內核源碼的目錄,開始定義KERNELRELEASE,然後到當前模塊的目錄裏面,M=$(PWD) 進入該Makefile時KERNELRELEAS已經被定義了,讀取要編譯的模塊,然後再返回到modules

編譯完成,產生文件

  Linux 2.6 (ARM)簡單驅動Makefile詳解

ifneq ($(KERNELRELEASE),)

obj-m := fgpio011.o

else

KDIR := /home/linux-2.6.30/

all:

make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-

clean:

rm -f * *.o *.o *.c *ers

endif

註釋

KDIR := /home/linux-2.6.30/

KDIR 指定開發板內核所在目錄。

CROSS_COMPILE=arm-linux- 指定編譯器。

其它項目與PC機的一樣。

驅動模塊編譯進內核

標籤:makefile 驅動