Linux核心構建系統之 Kconfig文件的作用

2021-06-25 14:22:08 字數 2403 閱讀 1298

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:整型

例如confighello_module

bool "hello test module"

bool型別的只能選中或不選中,tristate型別的選單項多了編譯成核心模組的選項,假如選擇編譯成核心模組,則會在.config中生成乙個config_hello_module=m的配置,假如選擇內建,就是直接編譯成核心影響,就會在.config中生成乙個config_hello_module=y的配置.

2、依賴型定義dependson或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"

這樣當makemenuconfig時 ,將會出現 ap71 flash選項。

第三:修改該目錄下makefile文件。

新增如下內容:obj-$(config_mtd_flashtest)   += flashtest.o

這樣,當您執行makemenucofnig時,您將發現ap71flash選項,假如您選擇了此項。該選擇就會儲存在.config文件中。當您編譯核心時,將會讀取.config文件,當發現ap71 flash 選項為yes 時,系統在呼叫/driver/mtd/maps/下的makefile 時,將會把 flashtest.o 加入到核心中。即可達到您的目的。

linux核心之系統呼叫

應用程式與系統呼叫 使用者應用程式訪問並使用核心所提供的各種服務的途徑,就是系統呼叫,系統呼叫介面層作為核心和使用者應用程式之間的中間層,扮演了乙個橋梁,系統呼叫把應用程式的請求傳達給核心,核心處理完後,把結果返回給應用程式。應用程式通過作業系統提供的應用程式設計介面api而不是直接通過系統呼叫來程...

Linux核心之系統呼叫

linux核心之系統呼叫 1.應用程式通過api而不是直接呼叫系統呼叫來程式設計 2.getpid 系統呼叫示例 asmlinkage long sys getpid void asmlinkage 編譯器僅從棧中提取引數 系統呼叫的命名規則 sys syscallname 3.每個系統呼叫都對應乙...

Linux核心之系統呼叫

1.應用程式通過api而不是直接呼叫系統呼叫來程式設計 2.getpid 系統呼叫示例 asmlinkage long sys getpid void asmlinkage 編譯器僅從棧中提取引數 系統呼叫的命名規則 sys syscallname 3.每個系統呼叫都對應乙個唯一的系統呼叫號,如果系...