2.6 核心的原始碼樹目錄下一般都會有兩個文文: kconfig 和 makefile 。分布在各目錄下的 kconfig 構成了乙個分布式的核心配置資料庫,每個 kconfig 分別描述了所屬目錄原始檔相關的核心配置選單。在核心配置 make menuconfig( 或 xconfig 等 ) 時,從 kconfig 中讀出配置選單,使用者配置完後儲存到 .config( 在頂層目錄下生成 ) 中。在核心編譯時,主 makefile 呼叫這個 .config ,就知道了使用者對核心的配置情況。
上面的內容說明: kconfig 就是對應著核心的配置選單。假如要想新增新的驅動到核心的原始碼中,可以通過修改 kconfig 來增加對我們驅動的配置選單,這樣就有途徑選擇我們的驅動,假如想使這個驅動被編譯,還要修改該驅動所在目錄下的 makefile 。
因此,一般新增新的驅動時需要修改的檔案有兩種(注意不只是兩個)
*kconfig
*makefile
要想知道怎麼修改這兩種檔案,就要知道兩種文件的語法結構。
first: kconfig
每個選單項都有乙個關鍵字標識,最常見的就是 config 。
語法:
config symbol
options
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---
更多詳細的 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 加入到核心中。即可達到您的目的。
Kconfig文件的作用
kconfig文件的作用 核心原始碼樹的目錄下都有兩個文件kconfig 2.4版本是config.in 和makefile。分布到各目錄的kconfig構成了乙個分布式的核心配置資料庫,每個kconfig分別描述了所屬目錄源文件相關的核心配置選單。在核心配置make menuconfig 或xco...
linux核心中Kconfig文件的作用
linux核心中kconfig文件的作用 2.6核心的原始碼樹目錄下一般都會有兩個文文 kconfig和makefile。分布在各目錄下的kconfig構成了乙個分布式的核心配置資料庫,每個kconfig分別描述了所屬目錄原始檔相關的核心配置選單。在核心配置make menuconfig 或xcon...
linux核心中Kconfig文件的作用
核心原始碼樹的目錄下都有兩個文件kconfig 2.4版本是config.in 和makefile。分布到各目錄的kconfig構成了乙個分布式的核心配置資料庫,每個kconfig分別描述了所屬目錄源文件相關的核心配置選單。在核心配置make menuconfig 或xconfig等 時,從kcon...