(注:本文參考資料:朱有鵬嵌入式課程。本文爲我的學習記錄,若有錯誤,歡迎指正。內核版本:九鼎公司移植的2.6.35.7)linux
內核配置系統由如下三個部分組成:windows
(1)Makefile:分佈在內核源代碼根目錄及各層目錄中,定義了內核編譯的規則;架構
(2)配置文件:通常在/kernel/arch/$ARCH/configs中,/kernel/arch目錄下的每一個架構都有對應的默認配置文件;ide
(3)配置工具:包括配置命令解釋器(對配置腳本中使用的配置命令進行解析)、配置用戶界面(字符界面、Ncurses圖形界面、Xwindows圖形界面,各自對應make config、make menuconfig、make xconfig)模塊化
(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- |
make xxx_config,即make x210ii_qt_defconfig,其做用是將/kernel/arch/$ARCH/configs目錄下的默認配置文件x210ii_qt_defconfig拷貝至內核根目錄下,並從新命名爲.config,即.config文件爲內核的當前配置文件。
不一樣架構下的配置文件不一樣,有$ARCH變量指定架構,從而讀取相應的配置文件。$ARCH在Makefile中指定。
ARCH?= arm |
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_FIREWIRE)+= firewire/ ....................................................................................................... |
menuconfig圖形界面用來配置內核選項。
(1)上下方向鍵,瀏覽菜單目錄;
(2)enter鍵,執行選中項;
(3)esc鍵,返回至上一頁面;
(4)/鍵,搜索表項;
(5)?鍵,顯示幫助信息;
(5)Y、N、M表明表項的三種配置狀況。
Y:將選中的表項編入內核;
N:將選中的表項從內核去除;
M:將選中的表項模塊化,即將這個表項編譯爲一個單獨的內核模塊.ko文件,不連接入內核,Linux啓動會可動態加載或卸載該模塊。
[ ]表項不能實現模塊化,< >表項能夠實現模塊化。表項前的括號裏,*表示編入,空白表示去除,M表示模塊化。