linux核心中Kconfig文檔的作用
2.6核心的源碼樹目錄下一般都會有兩個文文:Kconfig和Makefile。分布在各目錄下的Kconfig構成了一個分布式的核心配置資料庫,每個Kconfig分别描述了所屬目錄源檔案相關的核心配置菜單。在核心配置make menuconfig(或xconfig等)時,從Kconfig中讀出配置菜單,使用者配置完後儲存到.config(在頂層目錄下生成)中。在核心編譯時,主Makefile調用這個.config,就知道了使用者對核心的配置情況。
上面的内容說明:Kconfig就是對應着核心的配置菜單。假如要想添加新的驅動到核心的源碼中,可以通過修改Kconfig來增加對我們驅動的配置菜單,這樣就有途徑選擇我們的驅動,假如想使這個驅動被編譯,還要修改該驅動所在目錄下的Makefile。
是以,一般添加新的驅動時需要修改的檔案有兩種(注意不隻是兩個)
*Kconfig
*Makefile
要想知道怎麼修改這兩種檔案,就要知道兩種文檔的文法結構。
First: Kconfig
每個菜單項都有一個關鍵字辨別,最常見的就是config。
文法:
config symbol
options
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
symbol就是新的菜單項,options是在這個新的菜單項下的屬性和選項
其中options部分有:
1、類型定義:
每個config菜單項都要有類型定義,bool:布爾類型, tristate三态:内建、子產品、移除, string:字元串, hex:十六進制, integer:整型
例如config HELLO_MODULE
bool "hello test module"
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處理器有效,即隻有在選擇了ARCH_PXA, 該菜單才可見(可配置)。
3、幫助性定義
隻是增加幫助用關鍵字help或---help---
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
更多詳細的Kconfigconfig文法可參考:
Second: 核心的Makefile
核心的Makefile分為5個組成部分:
Makefile 最頂層的Makefile
.config 核心的目前配置文檔,編譯時成為頂層Makefile的一部分
arch/$(ARCH)/Makefile 和體系結構相關的Makefile
s/ Makefile.* 一些Makefile的通用規則
kbuild Makefile 各級目錄下的大概約500個文檔,編譯時根據上層Makefile傳下來的宏定義和其他編譯規則,将源代碼編譯成子產品或編入核心。
頂層的Makefile文檔讀取 .config文檔的内容,并總體上負責build核心和子產品。Arch Makefile則提供補充體系結構相關的資訊。 s目錄下的Makefile文檔包含了任何用來根據kbuild Makefile 建構核心所需的定義和規則。
(其中.config的内容是在make menuconfig的時候,通過Kconfig文檔配置的結果)
在linux2.6.x/Documentation/kbuild目錄下有詳細的介紹有關kernel makefile的知識。
最後舉個例子:
假設想把自己寫的一個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 加入到核心中。即可達到您的目的。
本文來自CSDN部落格,轉載請标明出處:http://blog.csdn.net/aaronychen/archive/2008/09/18/2946740.aspx