Kconfig和makefile的關係
阿新 • • 發佈:2019-02-11
文章的原地址是:
http://wenku.baidu.com/link?url=Yl5eiPf3P7TMhk24Kl5bMMNyWEM4ctHdT46M4ltz07qBPuWswCid3rGC5zxaGPLa3sawP8m4ZaqB0dIXmhlKF_2yBMUvxt9c5Q70MOevdhS
linux 核心中 Kconfig
文件的作用
Kconfig 構成了一個分散式的核心配置資料庫,每個 Kconfig 分別描述了所屬目錄源文件相關的核心
配置選單。在核心配置 make menuconfig(
存到.config 的核心配置文件中。 在核心編譯時,主 Makefile 呼叫這個.config,就知道了使用者的選擇。
上面的內容說明了, Kconfig 就是對應著核心的配置選單。假如要想新增新的驅動到核心的原始碼中,
能夠修改 Kconfig,這樣就能夠選擇這個驅動,假如想使這個驅動被編譯,要修改 Makefile。
因此新增新的驅動時需要修改的文件有兩種(注意不只是兩個)
*Kconfig
*Makefile
要想知道怎麼修改這兩種文件,就要知道兩種文件的語法結構。
First:Kconfig
每個選單都有一個關鍵字標識,最常見的就是
語法:
config
symbol 是個新的標記的選單項, options 是在這個新的選單項下的屬性和選項
其中 options 部分有:
1、型別定義:
每個 config 選單項都要有型別定義, bool 布林型別、 tristate 三態:內建、模組、移除 string 字元
串、 hex 十六進位制、 integer 整型
例如 config HELLO_MODULE
bool "hello test module"
bool 型別的只能選中或不選中, tristate 型別的選單項多了編譯成核心模組的選項,假如選擇編譯成
核心模組,則會在.config 中生成一個
直接編譯成核心影響,就會在.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 加入到核心中。即可達到您的目
的