2 6核心Makefile簡單語法與應用

2021-04-27 23:09:39 字數 2442 閱讀 6842

概述

2.6 的makefile的寫法和應用相對於2.4有了一些變化,可能對於很多人來說,因為找不到相關的文件,都是模仿核心中已有的檔案來寫自己的 makefile。其實,在核心的documentation / kbuild目錄下面,還是有對核心makefile語法的詳細說明的。在這裡就2.6核心中makefile最常見的簡單應用情況做乙個翻譯和歸納介 紹。

2.6核心的makefile分為5個組成部分:

1. 最頂層的makefile

2. 核心的.config配置檔案

3.   在arch/$(arch) 目錄下的體系結構相關的makefile

4. 在s目錄下的 makefile.* 檔案,是一些makefile的通用規則

5. 各級目錄下的大概約500個kbuild makefile檔案

頂層的makefile檔案讀取 .config檔案的內容,並總體上負責build核心和模組。arch makefile則提供補充體系結構相關的資訊。 s目錄下的makefile檔案包含了所有用來根據kbuild makefile 構建核心所需的定義和規則。

kbuild makefile

對於makefiles的不同組成部分,有一些不同的語法規則。針對的物件也不同,對於大部分核心模組或裝置驅動的開發者和使用者來說,最常

接觸到的就是各層目錄下基於kbuild架構的kbuild makefile檔案。

kbuild makefile的語法結構非常簡單,核心內容主要包括:

目標定義

obj-y += foo.o

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

而更常見的做法是根據.config檔案的config_ 變數來決定檔案的編譯方式,如:

obj-$(config_isdn) += isdn.o

obj-$(config_isdn_ppp_bsdcomp) += isdn_bsdcomp.o

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

多檔案模組的定義

最簡單的kbuild 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

目錄層次的迭代

如下例:

obj-$(config_ext2_fs) += ext2/

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

模組的編譯

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

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

『-c』指定**樹的位置,m=$pwd 或 m=`pwd` 告訴kbuild回到當前目錄來執行build操作。

模組的安裝

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

make install_mod_path=/foo modules_install

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

linux2 6核心Makefile簡單語法與應用

2.6的makefile的寫法和應用相對於2.4有了一些變化,可能對於很多人來說,因為找不到相關的文件,都是模仿核心中已有的檔案來寫自己的makefile。其實,在核心的documentation kbuild目錄下面,還是有對核心makefile語法的詳細說明的。在這裡就2.6核心中makefil...

makefile語法 Makefile的語法

假如乙個目標檔案所依賴的依賴檔案很多,我們豈不是要寫很多規則?這顯然不合乎常理。我們可以使用萬用字元解決這些問題。我們對上節程式進行修改 如下 test a.o b.o gcc o test o c gcc c o o 表示所用的.o檔案 c 表示所有的.c檔案 表示目標 表示所有依賴檔案 在該目錄...

linux核心Makefile的簡單分析

makefile 總結 1 配置檔案.config中定義了一系列的變數,makefile將結合它們來決定哪些檔案被編譯進核心。哪些檔案被編譯成模組。涉及哪些子目錄。2 頂層makefile和arch arch makefile決定更目錄下哪些子目錄,arch arch 目錄下哪些檔案和目錄被編譯進核...