1. 程式人生 > >Kconfig和makefile的關係

Kconfig和makefile的關係

文章的原地址是:

http://wenku.baidu.com/link?url=Yl5eiPf3P7TMhk24Kl5bMMNyWEM4ctHdT46M4ltz07qBPuWswCid3rGC5zxaGPLa3sawP8m4ZaqB0dIXmhlKF_2yBMUvxt9c5Q70MOevdhS

linux 核心中 Kconfig 文件的作用

核心原始碼樹的目錄下都有兩個文件 Kconfig2.4 版本是 Config.in)和 Makefile。分佈到各目錄的
Kconfig 構成了一個分散式的核心配置資料庫,每個 Kconfig 分別描述了所屬目錄源文件相關的核心
配置選單。在核心配置
make menuconfig(
xconfig )時,從 Kconfig 中讀出選單,使用者選擇後保
存到
.config 的核心配置文件中。 在核心編譯時,主 Makefile 呼叫這個.config,就知道了使用者的選擇。
上面的內容說明了,
Kconfig 就是對應著核心的配置選單。假如要想新增新的驅動到核心的原始碼中,
能夠修改
Kconfig,這樣就能夠選擇這個驅動,假如想使這個驅動被編譯,要修改 Makefile
因此新增新的驅動時需要修改的文件有兩種(注意不只是兩個)
*Kconfig
*Makefile
要想知道怎麼修改這兩種文件,就要知道兩種文件的語法結構。
First:Kconfig
每個選單都有一個關鍵字標識,最常見的就是
config
語法:
config
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 處理器有效。
3、幫助性定義
只是增加幫助用關鍵字
help ---help---
Second:
核心的 Makefile
linux2.6.x/Documentation/kbuild 目錄下有周詳的介紹有關 kernel 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 文件配置的結果)
舉個例子:
假設想把自己寫的一個
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 加入到核心中。即可達到您的目