Linux kernel中defconfig、 .config 、kconfig 與makefile的用途與關係


在Linux內核中,添加驅動代碼一般有3部:

  • 將代碼拷貝到Linux內核代碼恰當的地方

  • 新建或者修改對應的kconfig文件

  • 新建或修改對應的makefile文件

下面先介紹這些文件的用途,然後以具體的例子加以說明,最後解釋一下它們的語法。

一、作用


Kconfig ---> (每個源碼目錄下)提供編譯選項
.config ---> (源碼頂層目錄下)保存選擇結果
Makefile---> (每個源碼目錄下)根據.config中的內容來告知編譯系統如何編譯

 

1.deconfig 文件

一般由平臺廠商提供,內核編譯用做.config的參考,注意:如果,缺少該文件,無法進行編譯。

文件位於:\kernel..\arch\arm\configs\xxx_defconfig

2.kconfig

分佈在各目錄下的Kconfig構成了一個分佈式的內核配置數據庫,每個Kconfig分別描述了所屬目錄源文件相關的內核配置菜單。在內核配置make menuconfig(或xconfig等)時,從Kconfig中讀出配置菜單,用戶配置完後保存到.config(在頂層目錄下生成)中。

3.makefile

分佈在各個目錄下,用於集成編譯。

4.config 文件

在內核編譯時,主Makefile調用這個.config,用於或者用於的內核編譯配置。當我們在內核源碼目錄下輸入make menuconfig時,在出現的菜單界面中選擇一項時,它會自動更新.config相應項的值。如果我們沒有選擇,則會在.config問下插入一行註釋(# CONFIG_TOUCHSCREEN_GT9xx is not set)

文件位於 :kernel...\out\xxx_defconfig.config

二、例子


1、在driver目錄下新建一個目錄

mkdir driver/test 1

進入test目錄,創建Kconfig文件

config TEST
    bool "Test Driver"
    help
    test hao test

2、第二步 配置Makefile

在同樣的目錄中,新建一個Makefile

obj-$(CONFIG_TEST) += test.o

Obj-$(CONFIG選項名) += xxx.o /*當CONFIG選項名=y時,表示對應目錄下的xxx.c將被編譯進內核 當CONFIG_選項名=m時對應目錄下的xxx.c將被編譯成模塊*/

3、配置上層目錄的Makefile與Kconfig

kconfig末尾添加:

source "drivers/test/Kconfig"

makefile添加:

obj-$(CONFIG_TEST) += test/

或者

obj-y += test/

到這裏就加完了,還需要讓它能夠在編譯內核時會被編譯到,還需

4、使能之

有兩個方法:

(1)、deconfig文件

在該文件中添加

CONFIG_TEST=y/m

(2)、Kconfig文件

修改驅動對應目錄下的kconfig文件

config TEST
    bool "Test Driver"
+   default y
    help
    test hao test

 

三、語法


1、kconfig文件

CONFIG宏變量參數

  • bool: 表示該CONFIG宏只能選擇y(編譯內核)或者n(不編譯),不能選擇m(編譯爲模塊)

  • tristate: 表示該CONFIG宏可以設置y/m/n三種模式(tristate)

  • string: 表示該CONFIG宏可以設爲一串字符,比如#define CONFIG_XXX "config test"

  • hex: 表示該CONFIG宏可以設爲一個十六進制,比如#define CONFIG_XXX 0x1234

  • int: 表示該CONFIG宏可以設爲一個整數,比如#define CONFIG_XXX 1234

常用參數

  • default y: 表示默認是勾上的,當然也可以寫爲default m或者default n

  • help: 幫助提示信息

  • depends on:依賴項,比如depends on XXX 表示當前宏需要CONFIG_ XXX宏打開的前提下,才能設置它 (注意依賴項的config參數只有bool或tristate纔有效)

  • select : 反依賴項,和depends on剛好相反,比如 selecton XXX表示當前宏如果是y或者m,則會自動設置XXX=y或者m(注意參數只有bool或tristate纔有效)

  • choice: 會生成一個單選框,裏面通過多選一方式選擇config,需要注意choice中的config參數只能bool或tristate

  • prompt: 提示信息,如果對於choice而言,則會用來當做一個單選框入口點的標籤

  • range : 設置用戶輸入的數據範圍,比如range 0 100表示數據只能位於0~100

  • menuconfig: menuconfig XXX和config XXX類似,唯一不同的是該選項除了能設置y/m/n外,還可以實現菜單效果(能回車進入該項內部)

2、makefile

 

發佈了42 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章