簡單的驅動makefile詳解
- Linux認證
- 關注:1.64W次
一個工程中的原始檔不計數,其按型別、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更復雜的功能操作,因為 makefile就像一個Shell指令碼一樣,其中也可以執行作業系統的命令。
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機的一樣。
驅動模組編譯進核心
- 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-tw/itrz/linux/lxpexz.html