Make Menuconfig簡介
make menuconfig 圖形化的內核配置make mrproper -----刪除不必要的文件和目錄.
#make config(基於文本的最為傳統的配置界面,不推薦使用)
#make menuconfig(基於文本選單的配置界面,字元終端下推薦使用)
#make xconfig(基於圖形窗口模式的配置界面,Xwindow下推薦使用)
#make oldconfig(如果只想在原來內核配置的基礎上修改一些小地方,會省去不少麻煩)
目的都是生成一個.config文件,這三個命令中,make xconfig的界面最為友好,如果你可以使用Xwindow,你就用這個好了,這個比較方便,也好設置。如果你不能使用Xwindow,那麼就使用make menuconfig好了。界面雖然比上面一個差點,總比make config的要好多了。 選擇相應的配置時,有三種選擇,它們分別代表的含義如下:
Y--將該功能編譯進內核
N--不將該功能編譯進內核
M--將該功能編譯成可以在需要時動態插入到內核中的模塊
菜單解釋
[1]、Code maturity level options:代碼成熟等級
1.1.prompt for development and/or incomplete code/drivers.
關於Linux命令的介紹,看看《linux就該這么學》,具體關於這一章地址http://www.linuxprobe.com/chapter-02.html.如果要試驗現在仍處於實驗階段的功能,比如khttpd、IPv6等,就必須把該項選擇為Y了;否則可以把它選擇為N。在Linux的世界裡,每天都有許 多人為它發展支持的driver和加強它的核心。但是有些driver還沒進入穩定的階段。但其作者很歡迎其他人去測試這些driver並提出一些 bugs。這個問題是說,有一些drive還在做測試中,問您是否要選擇這些drive或支持的程序碼。如果鍵入Y,往後將會出現一些還在測試中的東西給 您做選擇。(像Java的程序碼和PCI bridge),台則就鍵入
⑵ 請問,l嵌入式inux內核編譯的時候,命令make menuconfig 是讀取的什麼文件,和.config有關嗎
學嵌入式就要不但要學其然,還要學其所以然~
(1)你的步驟很不規范,而且沒有明白各步驟都做了什麼。
(2)編譯內核的過程如下:
A. 如果你原來就有配置文件,比如你的S3C_2410_defconfig,你需要執行的是
make S3C_2410_defconfig ARCH=ARM(這樣他做的就是將arch/arm/configs中的
s3c2410_defconfig復制到源碼根目錄下為.config文件,如果你指定ARCH=x86那麼
它就會從arch/x86目錄下找配置文件。(這里涉及到一個規范問題,最好不要直接
復制改名,詳細的可以參考內核文檔)。現在已經有了.config配置文件,下面直接
執行make就可以了,當然需要在Makefile文件中指定參數或者make時加參數。
B. 如果沒有配置文件,則需要配置內核,目的:生成內核編譯配置文件 .config 有四種方法。
文本交互 make congig
.文本窗口 make menuconfig
圖形窗口 make xconfig
使用現有配置文件 make oldconfig(作用:備份當前.config文件為.config.old,使用已
有的內核配置文件,僅提示一些新的特性)
(3)所以,你make menuconfig的時候會生成.config文件把原來的覆蓋掉,當然原來的配置不
起作用了,你需要用make oldconfig或者直接make才行。
⑶ gentoo在make menuconfig配置完成後,有一個.config文件 保存在哪裡啊,找
#cd/usr/src/linux
#vi.config
⑷ Linux內核根目錄中的配置文件.config中包含了許多宏定義,
一、Linux內核的配置系統由三個部分組成,分別是:
1、Makefile:分布在 Linux 內核源代碼根目錄及各層目錄中,定義 Linux 內核的編譯規則;
2、配置文件(config.in(2.4內核,2.6內核)):給用戶提供配置選擇的功能;
3、配置工具:包括配置命令解釋器(對配置腳本中使用的配置命令進行解釋)和配置用戶界面(提供基於字元界面、基於 Ncurses 圖形界面以及基於 Xwindows 圖形界面的用戶配置界面,各自對應於 Make config、Make menuconfig 和 make xconfig)。這些配置工具都是使用腳本語言,如 Tcl/TK、Perl 編寫的(也包含一些用 C 編寫的代碼)。本文並不是對配置系統本身進行分析,而是介紹如何使用配置系統。所以,除非是配置系統的維護者,一般的內核開發者無須了解它們的原理,只需要知道如何編寫 Makefile 和配置文件就可以。
二、Make menuconfig過程分析
1、scripts文件夾存放的是跟make menuconfig配置界面的圖形繪制相關的文件,我們作為使用者無需關心這個文件夾的內容
2、讀取arch/arch/$ARCH/Kconfig以及各子目錄下的Kcondig文件,生成配置條目。
$ARCH由linux內核根目錄下的makefile文件決定
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
Kconfig文件中為配置信息的宏定義,與我們在make menuconfig圖形界面看到的信息一致。
例如:
config CPU_S3C2410_DMA
bool
depends on S3C2410_DMA && (CPU_S3C2410 || CPU_S3C2442)
default y if CPU_S3C2410 || CPU_S3C2442
help
DMA device selection for S3C2410 and compatible CPUs
因此,Kconfig文件很重要的作用就是:定義配置宏、相關依賴關系、幫助信息
3、讀取內核根目錄下.config文件,生成配置選項:[*]編譯進內核 [M]編譯為模塊 [ ]不編譯
arch/arm/configs/文件夾下存放了一些配置模板
我們可以通過cp /arch/arm/configs/xx_defconfig .config來使用這些配置模板
通過圖形界面變更配置選項會自動更新到.config文件中
make disclean 會刪除.config
4、編譯過程根據.config生成 Linux內核根目錄下的 include/config/auto.conf文件
CONFIG_EEPROM_93CX6=m
CONFIG_DM9000=y
根目錄Makefile以及子目錄的Makefile根據auto.conf生成編譯條件
obj-$(CONFIG_DM9000) += dm9000.o //obj-m += dm9000.o
5、編譯過程根據.config生成Linux內核根目錄下的 include/linux/autoconf.h文件
.config 或 auto.conf 中定義要編譯為 m 模塊的項,如:
CONFIG_DEBUG_NX_TEST=m
在 autoconf.h 中會被定義為:
#define CONFIG_DEBUG_NX_TEST_MODULE 1
.config或auto.conf 中定義為編譯為 y 的選項,如:
CONFIG_DM9000= y
在 autoconf.h 中會被定義為:
#define CONFIG_DM9000 1
autoconf.h中是.config或者auto.conf中配置信息的另一種體現形式,它是站在源碼的角度,供源碼使用的C語言宏定義。
6、總結
我們在使用make menuconfig時,首先會確定架構arch,然後讀取arch目錄的Kconfig中的配置宏定義,生成編譯條目,然後讀取Linux內核根目錄下的.config選項, 將.config中的配置信息顯示在圖形界面上[*] [M] or []。我們在圖形界面中更改配置選項會自動保存到.config文件中。編譯過程根據.config隨後生成auto.conf文件,它決定了makefile中各個文件的編譯類型,靜態編譯進內核、編譯成模塊、不編譯;同時生成autoconf.h,它以C語言宏定義的形式表達了 各個文件是否被編譯,源碼中會判斷某文件是否被編譯進行不同的處理。
三、將自定義文件添加進內核配置系統
1、修改文件目錄下Kconfig文件
添加:
config HELLO
tristate "just a test hello"
default y
---help---
This is a test
//tristate 或 bool 表示可選擇種類數量3[*][M][ ]、2
// "just a test hello"將作為標題顯示在配置的圖形界面
2、修改文件目錄下makefile文件
obj-$(CONFIG_HELLO) += hello_drv.o
3、make menuconfig 我們會在字元設備驅動的界面看到 ust a test hello 並且默認編譯進內核
4、make編譯內核發現
autoconfig.h 自動添加 #define CONFIG_HELLO 1
auto.conf 自動添加 CONFIG_HELLO=y
⑸ 剛剛開始學習Linux,不知道Make menuconfig怎麼使用
Linux內核的make menuconfig實際上是執行了:
scripts/kconfig/mconf arch/mips/Kconfig
mconf表示是 menuconfig,如果是用基於QT的配置工具,則執行的將會是qconf,arch/mips/Kconfig是要讀取的Kconfig文件,這個會因平台而異,這里因為針對的是MIPS平台,故讀取的是arch/mips/目錄下的Kconfig文件。
如果Linux源碼樹頂層目錄下已有.config文件,make menuconfig則從.config文件取默認參數,如果沒有.config則從各個Kconfig中取默認參數。
mconf會把用戶的選擇保存到Linux源碼樹頂層目錄的.config文件中,然後解析該文件並將解析結果寫入到include/linux/autoconf.h 中。include/linux/autoconf.h將會被include/linux/config.h包含,因此,需要關心配置情況的內核源文件只需要#include <linux/config.h>即可。
mconf解析.config文件時所採用的規則具體要仔細分析mconf.c源代碼。