核心Makefile編寫

2022-03-24 08:08:28 字數 1675 閱讀 4067

對於大部分核心模組或裝置驅動的開發者和使用者來說,最常接觸到的就是各層目錄下基於kbuild架構的kbuild makefile檔案。主要部分有:

1、目標定義,目標定義就是用來定義哪些內容要做為模組編譯,哪些要編譯鏈結進核心。

最簡單的只有一行,如

obj-y += foo.o

表示要由foo.c或者foo.s檔案編譯得到foo.o並鏈結進核心,而obj-m則表示該檔案要作為模組編譯。除了y,m以外的obj-x形式的目標都不會被編譯。

由於既可以編譯成模組,也可以編譯進核心,更常見的做法是根據.config檔案的config_ 變數來決定檔案的編譯方式,如:

obj-$(config_hello_module) += hello.o ,這個已經在7.2.3.1中說明過。

除了obj-形式的目標以外,還有lib-y library庫,hostprogs-y 主機程式等目標,但是基本都應用在特定的目錄和場合下

2、多目標

乙個核心模組由多個原始檔編譯而成,這是makefile有所不同。

採用模組名加 –objs字尾或者 –y字尾的形式來定義模組的組成檔案。

如以下例子:

obj-$(config_ext2_fs) += ext2.o

ext2-y := balloc.o bitmap.o

ext2-$(config_ext2_fs_xattr) += xattr.o

模 塊的名字為ext2,由balloc.o和bitmap.o兩個目標檔案最終鏈結生成ext2.o 直至ext2.ko檔案,是否包括xattr.o取決於核心配置檔案的配置情況。如果config_ext2_fs的值是y也沒有關係,在此過程中生成的 ext2.o將被鏈結進built-in.o最終鏈結進核心。這裡需要注意的一點是,該kbuild makefile所在的目錄中不應該再包含和模組名相同的原始檔如ext2.c/ext2.s

或者寫成如-objs的形式:

obj-$(config_isdn) += isdn.o

isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o

3、目錄的迭代

obj-$(config_ext2_fs) += ext2/

如果config_ext2_fs 的值為y或m,kbuild將會將ext2目錄列入向下迭代的目標中,但是其作用也僅限於此,具體ext2目錄下的檔案是要作為模組編譯還是鏈入核心,還是有ext2目錄下的makefile檔案的內容來決定的

4、不同的模組編譯方式

編譯模組的時候,你可以將模組放在**樹中,用make modules的方式來編譯你的模組,你也可以將模組相關檔案目錄放在**樹以外的位置,用如下命令來編譯模組:

make -c path/to/kernel/src m=$pwd modules

-c指定核心原始碼的根目錄,$pwd 或 `pwd` 是當前目錄的環境變數,告訴kbuild回到當前目錄來執行build操作。

5、模組安裝

當你需要將模組安裝到非預設位置的時候,你可以用install_mod_path 指定乙個字首,如:

make install_mod_path=/foo modules_install

模組將被安裝到 /foo/lib/modules目錄下

注意2.6和2.4版本編譯結果的不同,核心模組在2.6下是.ko字尾,取代了2.4下的.o字尾,使核心模組和普通的目標檔案區別開。(比較好呀)

makefile簡說 編寫makefile

linux下原始碼編譯 linux下原始碼編譯c c 通常使用gnu工具鏈。c c 的編譯過程,通常為原始檔 c cc cpp字尾檔案 編譯為中間目標檔案 即生成為.s o等字尾的中間檔案 再通過鏈結生成可執行檔案 編譯器的編譯過程大致分為四個步驟 預處理 編譯 彙編和鏈結 建立乙個專案檔案proj...

makefile編寫說明

1.定義 makefile是通過制定規則來編譯程式的乙個指令碼而已。在linux中使用make命令來執行makefile檔案。2.命名 makefile或makefile,若是指定其他名稱。如 makefile.可以這樣使用make f makefile或make clean f makefile ...

makefile編寫方法

什麼是makefile?或許很多winodws的程式設計師都不知道這個東西,因為那些windows的ide都 為你做了這個工作,但我覺得要作乙個好的和 professional的程式設計師,makefile還是要懂 這就好像現在有這麼多的html的編輯器,但如果你想成為乙個專業人士,你還是要了解 h...