Linux內核源碼樹學習:Kconfig和Makefile

 
Linux內核源碼樹學習:Kconfig和Makefile
2011-01-25 18:40

Linux內核源碼樹的每個目錄下都有兩個文檔Kconfig和Makefile。分佈到各目錄的 Kconfig構成了一個分佈式的內核配置數據庫,每個Kconfig分別描述了所屬目錄源文檔相關的內核配置菜單。在執行內核配置make menuconfig時,從Kconfig中讀出菜單,用戶選擇後保存到.config的內核配置文檔中。在內核編譯時,主Makefile調用這個.config,就知道了用戶的選擇。這個內容說明了,Kconfig就是對應着內核的每級配置菜單。

假如要想添加新的驅動到內核的源碼中,要修改Kconfig,這樣就能夠選擇這個驅動,假如想使這個驅動被編譯,則要修改Makefile。添加新的驅動時需要修改的文檔有兩種(如果添加的只是文件,則只需修改當前層Kconfig和Makefile文件;如果添加的是目錄,則需修改當前層和目錄下的共一對Kconfig和Makefile)Kconfig和Makefile。要想知道怎麼修改這兩種文檔,就要知道兩種文檔的語法結構。

Kconfig:每個菜單都有一個關鍵字標識,最常見的就是config。語法:config symbol,是個新的標記的菜單項,options是在這個新的菜單項下的屬性和選項。

1,每個config菜單項都要有類型定義,bool布爾類型、 tristate三態:內建、模塊、移除。bool類型的只能選中或不選中,tristate類型的菜單項多了編譯成內核模塊的選項,假如選擇編譯成內核模塊,則會在.config中生成一個CONFIG_HELLO_MODULE=m的配置;假如選擇內建,就是直接編譯成內核映像,就會在.config 中生成一個CONFIG_HELLO_MODULE=y的配置。

2,依賴型定義depends on或requires,指此菜單的出現和否依賴於另一個定義

config HELLO_MODULE

bool "hello test module"

depends on ARCH_PXA

這個例子表明HELLO_MODULE這個菜單項只對XScale處理器有效。

 

3,幫助性定義

只是增加幫助用關鍵字help或---help---。

舉一個完整實例如下,例如添加一個I2C芯片:

config QL_VEE

tristate "QL Visual Enhancement Engine (VEE)"

default y

depends on I2C && EXPERIMENTAL

 

help

QL Visual Enhancement Engine (VEE) v1.0 with I2C-Compatible Interface and 24-Bit RGB Support Rev.

Makefile:內核的Makefile分爲5個組成部分:

(1)Makefile     最頂層的Makefile

(2).config        內核的當前配置文檔,編譯時成爲頂層Makefile的一部分

(3)arch/$(ARCH)/Makefile    和體系結構相關的Makefile

(4)Makefile.*      一些特定Makefile的規則

(5)kbuild級別Makefile      各級目錄下的大概約500個文檔,編譯時根據上層Makefile傳下來的宏定義和其他編譯規則,將源代碼編譯成模塊或編入內核。頂層的Makefile 文檔讀取.config文檔的內容,並總體上負責build內核和模塊。Arch Makefile則提供補充體系結構相關的信息。其中.config的內容是在make menuconfig的時候,通過Kconfig文檔配置的結果。

 

假設想把自己寫的一個flash的驅動程式加載到工程中,而且能夠通過menuconfig配置內核時選擇該驅動該怎麼辦呢?如下:

第一:將您寫的flashtest.c 文檔添加到/driver/mtd/maps/ 目錄下。

第二:修改/driver/mtd/maps目錄下的kconfig文檔:

config MTD_flashtest

tristate “ap71 flash"

 

這樣當make menuconfig時 ,將會出現 ap71 flash選項。

第三:修改該目錄下makefile文檔。添加如下內容:obj-$(CONFIG_MTD_flashtest)       += flashtest.o

這樣,當您運行make menucofnig時,您將發現ap71 flash選項,假如您選擇了此項。該選擇就會保存在.config文檔中。當您編譯內核時,將會讀取.config文檔,當發現ap71 flash 選項爲yes,系統在調用/driver/mtd/maps/下的makefile 時,將會把 flashtest.o 加入到內核中。

發佈了11 篇原創文章 · 獲贊 15 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章