1. 程式人生 > >LINUX核心編譯--Makefile、.config、Kconfig、menuconfig解析

LINUX核心編譯--Makefile、.config、Kconfig、menuconfig解析

LINUX核心編譯–Makefile、.config、Kconfig、menuconfig關係說明

Makefile

makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更復雜的功能操作,因為 makefile就像一個Shell指令碼一樣,其中也可以執行作業系統的命令。
makefile檔案是指令碼檔案,在核心目錄(/home/topeet/android4.0/iTop4412_Kernel_3.0)下的子目錄中都會有一個Makefile檔案,用來規定哪些檔案會編譯到核心中。
目錄/drivers/char下的makefile
核心目錄/drivers/char目錄下的Makefile中定義了要編譯進核心的模組,其中綠色字體表示的是條件編譯,即定義了CONFIG_XXX_XXX

才會編譯進核心。
obj-y表示強制編譯進核心中。
Makefile(_driver_char_LEDS)
開啟“核心目錄/drivers/char”下的Makefile,其中obj-$(CONFIG_LEDS_CTL) += itop4412_leds.o表示如果定義了 CONFIG_LEDS_CTL 則將 itop4412_leds.o 編譯進核心中,itop4412_leds.c是led燈的驅動檔案。所以Makefile定義了核心有哪些驅動,以及編譯哪些驅動檔案。

Menucofig

在嵌入式領域當中,在配置核心的時候會有很多配置方法,比如說make config(基於文字的為傳統的配置介面)、make oldconfig(如何只想在原來核心配置的基礎上修改一部分,則會省去很多麻煩)、make xconfig(基於圖形視窗模式的配置介面,Xwindow下推薦使用)、make menuconfig(基於文字選擇的配置介面,字元終端下推薦使用),以上4種配置方式的目的都是在原始碼的頂層目錄下面生成一個 .config

檔案(配置檔案),那麼在我們嵌入式開發當中,經常使用的和推薦使用的是make menuconfig這種配置方法。
即menucofig就是個圖形的配置介面,用來配置編譯核心的選項,包括編譯哪些模組等,配置完成後會生成相應的.config配置檔案

Kconfig

Kconfig與menuconfig之間的關係比較密切,menuconfig就是通過呼叫各級目錄下Kconfig檔案來形成圖形介面的,下圖是"核心目錄"下的Kconfig檔案,它呼叫了各級子目錄中的Kconfig檔案。
核心目錄下的Kconfig檔案
"核心目錄"下的Kconfig檔案

核心目錄/drivers"下的Kconfig檔案
核心目錄/drivers"下的Kconfig檔案

例:在menuconfig中新增hello裝置選項

在menuconfig中新增hello裝置選項
仿照Kconfig編寫規範,新增HELLO_CTL選項,如圖中所示,其中tristate表示三態,bool表示兩種選項。
menuconfig新增HELLO
再次執行make menuconfig可以發現多出了HELLO配置的選項。

.config

.config檔案是系統配置檔案,通過配置menuconfig生成,並供make命令使用。
.config(核心目錄)
開啟 “核心目錄” 下的.config檔案,裡面都是些巨集定義,如其中CONFIG_HELLO_CTL=y就表示定義了HELLO_CTL,在編譯時就會編譯進核心中。而藍色的部分就是沒有定義的,編譯時就不會編譯進核心。