天天看點

編譯linux核心時.config ,Kconfig, make menuconfig的聯系

我們在編譯linux核心時都會用到幾個檔案 .config檔案 Kconfig檔案 Makefile檔案以及make menuconfig指令出現的菜單,那他們之間有什麼聯系呢?

首先,Makefile檔案不用多講,這是linux核心的編譯檔案,使用make uImage或make zImage時就是用Makefile檔案來編譯的。

對于make menuconfig來講,這是一個菜單配置核心檔案,菜單檔案中主要包括下面幾種情況

(1)[ ] 方括号類型

按下空格鍵來選擇,

*     <====>   y    如果選擇為y,則代表該配置選項(功能)被編譯進核心

make uImage      (led.c驅動要放在對應目錄中)

空格           不選

(2)< >  尖括号類型

                               有三種狀态  *代表選中    沒有*代表未選中    M代表子產品

M     <====>   M    編譯成子產品 ,沒有編譯成核心。使用時可以通過make modules 生成.ko檔案,然後手動加載。   

         (3)( )圓括号類型

          某個小括号可能存放了十進制整數,也可能存放十六進制整數,還有可能存放字元串。

編譯linux核心時.config ,Kconfig, make menuconfig的聯系

上圖是make menuconnfig中字元驅動下的菜單顯示

Kconfig和make menuconfig是一一對應的。源碼下有多個Kconfig檔案,對應make menuconfig中的每一頁。我們看一下源碼下的Kconfig

編譯linux核心時.config ,Kconfig, make menuconfig的聯系

和主菜單(下圖)實際上是一樣的,最後一行是包含的目錄,這樣就可以繼續向下尋找了。

編譯linux核心時.config ,Kconfig, make menuconfig的聯系

簡單了解一下在Kconfig中的文法規則,我們來看一下驅動中字元裝置中的Kconfig

編譯linux核心時.config ,Kconfig, make menuconfig的聯系

菜單中對應如下

編譯linux核心時.config ,Kconfig, make menuconfig的聯系

首先是

第一行 config  XXXXXXX 打頭的,這裡的XXXXXX是要和.config配合使用的

第二行 是對應剛才說的[] <> ()三種類型以及顯示在menu中名字,

             bool 對應[]

             tristate 對應<>  triple state 三态的簡稱

             string 對應()

             後面引号中跟着的是顯示在menu中資訊

第三行 設定一下預設值 y代表是選中 n為不選中

第四行 可以添加一些幫助資訊給使用者顯示

要添加一個子產品,就根據類似寫法在Kconfig中添加 就能在make menuconfig中顯示了。

對于.config屬于核心的配置檔案,我們來看一看對應的字元驅動

編譯linux核心時.config ,Kconfig, make menuconfig的聯系

之前說到Kconfig中的第一行會和.config産生聯系,.config中會自動在Kconfig中起的名字前加上大寫的CONFIG_。y表示選中。這個配置是如何起作用的呢?

我們來看看對應驅動字元裝置的Makefile

編譯linux核心時.config ,Kconfig, make menuconfig的聯系

是否編譯對應檔案 就看CONFIG_XXXXX設定為何值了。

添加一個子產品 要在兩個地方進行添加,1是在對應檔案的Kconfig中添加,然後就進入make menuconfig中設定,設定完.config中就自動有了對應的配置。2然後在對應的Makefile中進行編譯配置。

繼續閱讀