編譯驅動Makefile解析

2022-07-25 09:00:11 字數 1177 閱讀 1102

#ubuntu的核心原始碼樹,如果要編譯在ubuntu中安裝的模組就開啟這2個

#kern_ver = $(shell uname -r)

#kern_dir = /lib/modules/$(kern_ver)/build

# 開發板的linux核心的原始碼樹目錄

kern_dir = /root/driver/kernel

obj-m +=module_test.o

all:

make -c $(kern_dir) m=`pwd` modules

.phony: clean

clean:

make -c $(kern_dir) m=`pwd` clean

view code

/**************makefile分析*******************/

obj-m += module_test.o  

表示將我們的module_test.o編譯成乙個模組。

make -c $(kern_dir) m=`pwd` modules  

-c  $(kern_dir) :引數指定核心原始碼樹目錄,當執行make命令的時候會跳轉到這個目錄下去執行,而不是在當前目錄下執行make,

這個也是為什麼在ubuntu和開發板執行模組時,kern_dir不同的原因。

m=`pwd` :「 ` 」這裡不是但引號,是單反引號,用來指定執行完make命令之後的返回目錄,也就是當前目錄

modules就是乙個目標,所以這個語句連起來就是: 跳轉到指定的目錄下 執行 make modules,執行完之後在返回到當前的目錄,並把編譯好的模組複製到當前目錄下;所以由此可知

modules肯定是乙個核心原始碼樹下的makefile中的乙個目標,這個目標定義了核心模組的編譯規則,所以切不可胡亂改modules,所以得知,我們這裡的makefile只不過是乙個入口,真正的

模組編譯工作是在核心原始碼樹下的makefile中進行的,所以我們才需要在這個makefile中指定乙個入口位址(也就是核心原始碼樹的路徑)給我們的make管理器。

.phony:clean

宣告clean目標是乙個偽目標

最後那一句也是一樣的解析,只不過定義的目標不一樣。

模式化的,3和4部分是永遠不用動的,只有1和2需要動。1是核心原始碼樹的目錄,你必須根據自己的編譯環境

索引文獻:

編譯驅動的MAKEFILE解析

乙個典型的編譯驅動模組的makefile檔案如下所示 kern dir root driver kernel obj m module test.o all make c kern dir m pwd modules phony clean clean make c kern dir m pwd c...

驅動模組編譯Makefile

驅動模組編譯makefile如下 1 使用不同的開發板核心時,一定要修改kern dir 2 kern dir中的核心要事先配置 編譯,為了能編譯核心,要先設定下列環境變數 2.1 arch,比如 export arch arm64 2.2 cross compile,比如 export cross...

Makefile編譯核心驅動模組入門 一

makefile編譯核心驅動模組入門 一 閱讀本文的前提是,讀者已經了解makefile的編寫方式,請讀者注意。本文將介紹編譯核心最簡單的makefile編譯方式,為了更直接地討論將核心驅動模組定位為最簡單的hello.ko。故在此只討論makefile的內容,不涉及核心驅動的有關內容。makefi...