linux核心中Kconfig文件的作用

2022-07-01 23:33:12 字數 4805 閱讀 9247

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

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---

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 加入到核心中。即可達到您的目的。

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

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---

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 加入到核心中。即可達到您的目的。

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...

linux核心中Kconfig及如何加自己的驅動

linux核心中kconfig及如何加自己的驅動 2.6核心的原始碼樹目錄下一般都會有兩個文文 kconfig和makefile。分布在各目錄下的kconfig構成了乙個分布式的核心配置資料庫,每個kconfig分別描述了所屬目錄原始檔相關的核心配置選單。在核心配置make menuconfig 或...