Linux內核分析: Linux內核配置機制與編譯過程

(注:本文參考資料:朱有鵬嵌入式課程。本文爲我的學習記錄,若有錯誤,歡迎指正。內核版本:九鼎公司移植的2.6.35.7linux

1. 內核配置系統的基本結構

內核配置系統由如下三個部分組成:windows

(1)Makefile:分佈在內核源代碼根目錄及各層目錄中,定義了內核編譯的規則;架構

(2)配置文件:通常在/kernel/arch/$ARCH/configs中,/kernel/arch目錄下的每一個架構都有對應的默認配置文件;ide

(3)配置工具:包括配置命令解釋器(對配置腳本中使用的配置命令進行解析)、配置用戶界面(字符界面、Ncurses圖形界面、Xwindows圖形界面,各自對應make config、make menuconfig、make xconfig)模塊化

2. 內核配置與編譯的步驟

(1)make distclean :清除臨時文件、中間文件和配置文件;工具

(2)make xxx_config(默認配置文件):獲得內核的當前配置文件.config;學習

(3)make menuconfig(或config、xconfig):進入配置用戶界面,進行內核的詳細配置;spa

(4)make all:編譯內核。ip

注意:使用make命令時,先確認Makefile文件中的編譯工具鏈是否認義正確。ci

CROSS_COMPILE?= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-

2.1 make xxx_config(配置文件名)解析

make xxx_config,即make x210ii_qt_defconfig,其做用是將/kernel/arch/$ARCH/configs目錄下的默認配置文件x210ii_qt_defconfig拷貝至內核根目錄下,並從新命名爲.config,即.config文件爲內核的當前配置文件。

不一樣架構下的配置文件不一樣,有$ARCH變量指定架構,從而讀取相應的配置文件。$ARCH在Makefile中指定。

ARCH?=  arm

2.2 make menuconfig(或config、xconfig)解析

make menuconfig,生成一個內核配置的界面。menuconfig涉及到一下幾個文件:

(1)內核源碼根目錄下的scripts文件夾

menuconfig文字式圖形界面是由ncurses庫、/kernel/scripts目錄下面的腳本文件支持生成的。

(2)/arch/$ARCH/Kconfig,各層目錄下的Kconfig文件

menuconfig圖形界面中的全部表項都來自Kconfig文件。

(3)內核源碼根目錄下的.config文件、/kernel/include/generated/autoconfig.h文件

menuconfig圖形界面中全部表項的設置值都從.config文件中讀取。menuconfig界面中的修改部分會同步至.config文件中;同時還會將全部的配置選項以宏的形式保存在/kernel/include/generated/autoconfig.h中,內核源碼會根據其中的宏進行條件編譯。

.................................................................................................

#define CONFIG_SND_S5PV2XX_SOC_WM8976 1

#define CONFIG_IP_NF_TARGET_REDIRECT 1
#define CONFIG_CRC32 1
#define CONFIG_I2C_BOARDINFO 1
#define CONFIG_NF_NAT_PROTO_SCTP 1
#define CONFIG_HAVE_AOUT 1
.................................................................................................

(4)內核根目錄下、各層子目錄下的Makefile文件

根據配置過程當中生成的/kernel/include/generated/autoconfig.h文件,內核源碼會根據其中的宏進行條件編譯。

....................................................................................................

obj-$(CONFIG_IDE)+= ide/
obj-$(CONFIG_SCSI)+= scsi/
obj-$(CONFIG_ATA)+= ata/
obj-$(CONFIG_MTD)+= mtd/
obj-$(CONFIG_SPI)+= spi/
obj-y+= net/
obj-$(CONFIG_ATM)+= atm/
obj-$(CONFIG_FUSION)+= message/

obj-$(CONFIG_FIREWIRE)+= firewire/

.......................................................................................................

3. menuconfig圖形界面的使用方法

menuconfig圖形界面用來配置內核選項。

(1)上下方向鍵,瀏覽菜單目錄;

(2)enter鍵,執行選中項;

(3)esc鍵,返回至上一頁面;

(4)/鍵,搜索表項;

(5)?鍵,顯示幫助信息;

(5)Y、N、M表明表項的三種配置狀況。

  Y:將選中的表項編入內核;

  N:將選中的表項從內核去除;

  M:將選中的表項模塊化,即將這個表項編譯爲一個單獨的內核模塊.ko文件,不連接入內核,Linux啓動會可動態加載或卸載該模塊。

[ ]表項不能實現模塊化,< >表項能夠實現模塊化。表項前的括號裏,*表示編入,空白表示去除,M表示模塊化。

相關文章
相關標籤/搜索