#ubuntu的核心原始碼樹,如果要編譯在ubuntu中安裝的模組就開啟這2個view code#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
/**************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...