日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

linux中menu命令,menucofig 详解

發(fā)布時(shí)間:2025/3/20 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux中menu命令,menucofig 详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2.4? Linux內(nèi)核配置基礎(chǔ)

對(duì)于一個(gè)開發(fā)者來(lái)說(shuō),將自己開發(fā)的內(nèi)核代碼加入到Linux內(nèi)核中,需要有3個(gè)步驟。

(1)確定把自己開發(fā)代碼放入到內(nèi)核的位置。

(2)把自己開發(fā)的功能增加到Linux內(nèi)核的配置選項(xiàng)中,使用戶能夠選擇此功能。

(3)構(gòu)建子目錄Makefile,根據(jù)用戶的選擇,將相應(yīng)的代碼編譯到最終生成的Linux內(nèi)核中去。

2.4.1? Linux內(nèi)核所支持的配置方式

本節(jié)介紹Linux內(nèi)核所支持的6種配置方式,并重點(diǎn)討論常用的make menuconfig的用法。

Linux內(nèi)核主要支持以下6種配置方式。

n??????? make config:基于命令行的問(wèn)答方式,通過(guò)執(zhí)行make config開始,使用scripts/ Configure腳本解釋工具去執(zhí)行腳本。它針對(duì)每一個(gè)內(nèi)核配置選項(xiàng)會(huì)有一個(gè)提問(wèn),回答y則選中,回答n則去掉,一旦選錯(cuò)一個(gè)就必須從頭再來(lái),故不建議使用此種方式。

n??????? make oldconfig:也是通過(guò)命令行的方式,但它要求手動(dòng)設(shè)定在. config中沒(méi)有設(shè)定的選項(xiàng),而make config則不管在.config中是否設(shè)定過(guò)都要求用戶重新設(shè)定。這是一個(gè)非互動(dòng)性的腳本,用系統(tǒng)當(dāng)前內(nèi)核的設(shè)置作為配置標(biāo)準(zhǔn),重新編譯新內(nèi)核。適用于只進(jìn)行簡(jiǎn)單升級(jí)的情況。

n??????? make menuconfig:采用菜單方式進(jìn)行配置,如圖2-6所示。用戶可以在Linux主機(jī)或網(wǎng)絡(luò)中的某個(gè)工作站進(jìn)行操作。該方法使用scripts/Menuconfig腳本解釋工具去執(zhí)行腳本。執(zhí)行make menuconfig命令以后,會(huì)出現(xiàn)一個(gè)以curses為基礎(chǔ)的、終端式的配置菜單,通過(guò)該菜單可以很方便地進(jìn)行內(nèi)核的配置。如果.config文件存在,則會(huì)根據(jù)該文件來(lái)設(shè)定默認(rèn)值。一般情況下我們會(huì)選擇該方法進(jìn)行配置。

圖2-6? make menuconfig

n??????? make xconfig:也是采用菜單方式進(jìn)行配置的,如圖2-7所示。但必須在Linux主機(jī)上執(zhí)行。make xconfig顯示以Qt為基礎(chǔ)的X Windows配置菜單,在GUI下配置內(nèi)核,感覺(jué)很直觀和清晰。同樣,如果.config文件存在,則會(huì)根據(jù)該文件來(lái)設(shè)定默認(rèn)值。

圖2-7? make xconfig

n??????? make gconfig:類似make xconfig,不同的是,它是以GTK為基礎(chǔ)的GUI環(huán)境。

n??????? make defconfig:能夠根據(jù)機(jī)器的類型對(duì)內(nèi)核進(jìn)行默認(rèn)的配置,免去了動(dòng)手配置的麻煩。但經(jīng)過(guò)測(cè)試,它很難配置出一個(gè)功能比較完善的內(nèi)核,尤其是對(duì)于非Intel CPU的識(shí)別、優(yōu)盤的支持、NTFS分區(qū)的支持以及ADSL的使用等問(wèn)題做的還不是很令人滿意。

顯然,這6種方式的實(shí)質(zhì)是相同的,不管選擇哪種方法,在對(duì)Linux內(nèi)核配置選項(xiàng)進(jìn)行選擇設(shè)定后,都會(huì)在內(nèi)核頂層目錄下生成一個(gè)隱藏的.config文件,它包含了所有配置選項(xiàng)的用戶選擇信息。當(dāng)下一次make menuconfig時(shí),會(huì)生成一個(gè)新的.config文件,原來(lái)的文件被更名為.config.old。

2.4.2? make menuconfig配置方法

通常使用make menuconfig方式進(jìn)行配置,這種方式簡(jiǎn)單明了,受條件制約小。執(zhí)行如下命令:

#make menuconfg

系統(tǒng)會(huì)出現(xiàn)如圖2-6所示的菜單方式,將內(nèi)核的可配置選項(xiàng)呈現(xiàn)給用戶。

每一個(gè)萊單項(xiàng)按模塊功能分類,下面包含若干具體子項(xiàng)。例如Processor type and features (中央處理器類型及特性)選項(xiàng)就包含以下子項(xiàng),如圖2-8所示。

用戶只需要根據(jù)自身特定系統(tǒng)的應(yīng)用需求,對(duì)相應(yīng)的功能模塊進(jìn)行取舍,當(dāng)用戶需要添加某項(xiàng)功能時(shí),將光標(biāo)移動(dòng)到該位置,按空格鍵選中該項(xiàng)功能,此時(shí)選項(xiàng)左端的括號(hào)內(nèi)出現(xiàn)“*”表示選擇有效,再按空格鍵時(shí),可以取消該項(xiàng)的選擇。當(dāng)用戶在根據(jù)自己的系統(tǒng)需求配置好內(nèi)核,退出配置菜單時(shí),需要保存修改后的內(nèi)核配置。

圖2-8? Processor type and features(中央處理器類型及特性)選項(xiàng)

若用戶選擇不保存,則進(jìn)行的所有配置操作無(wú)效,內(nèi)核配置仍然為原來(lái)的狀態(tài),若選擇保存,系統(tǒng)會(huì)在當(dāng)前目錄下生成一個(gè).config文件,其后要進(jìn)行的內(nèi)核編譯就是根據(jù)這個(gè).config文件來(lái)進(jìn)行條件編譯以生成相應(yīng)的可執(zhí)行文件的。

2.4.3? Linux 2.4內(nèi)核配置文件config.in介紹

Linux 2.4內(nèi)核配置文件為config.in,Linux 2.6內(nèi)核配置文件為Kconfig,二者大同小異,本節(jié)將介紹config.in的配置方法。

該文件被頂層Makefile包含,Rules.make及子目錄中的Makefile并未包含這個(gè)文件,它是通過(guò)在頂層Makefile中設(shè)置并出口(export)變量MAKEFILES來(lái)向下傳遞的,比如MAKEFILES = $(TDPDIR)/.config。.config文件包括以下兩個(gè)文件。

n??????? arc/aim/config.in文件:在配置完成后會(huì)生成.config文件,其內(nèi)容為相應(yīng)的宏定義。該文件提供了總體的內(nèi)核配置菜單選項(xiàng),包括運(yùn)行make menuconfig等命令出現(xiàn)的菜單。具體的子配置菜單選項(xiàng)需在其他各級(jí)子目錄下的config.in(在2.4內(nèi)核中腳本為各級(jí)目錄下的config.in,而在2.6內(nèi)核中變?yōu)镵config)中描述。當(dāng)用戶開發(fā)了新功能程序并需將其相關(guān)的配置選項(xiàng)加入到Linux的配置菜單中,以供用戶需要此功能時(shí)進(jìn)行選擇,這時(shí)要在各級(jí)目錄下的config.in文件中用配置語(yǔ)言來(lái)編寫相應(yīng)的配置腳本。config具體語(yǔ)法請(qǐng)參考Documentation/kbuild/CONFIG_ language.txt。

n??????? include/Linux/autoconf.h:同.config一樣,該文件也是在make menuconfig后產(chǎn)生的,它是根據(jù)內(nèi)核配置情況由一些預(yù)處理語(yǔ)句組成。

幾乎所有的源文件都會(huì)通過(guò)#include < Linux/config. h>來(lái)嵌入autoconf. h文件。當(dāng)配置選項(xiàng)發(fā)生變化時(shí),會(huì)更新autoconf. h,如果按照通常方法,使用make dep在每個(gè)子目錄下生成依賴文件.depend,將造成所有源代碼的重新編譯。為了優(yōu)化Make過(guò)程,減少不必要的重新編譯,Linux開發(fā)了專用的mkdep及split-include工具。在script目錄下有工具mkdep用來(lái)取代make dep來(lái)生成 .depend文件,它在處理源文件時(shí),將忽略Linux/config.h頭文件,直接查找源文件中具有“CDNFIG_”特征的宏定義。例如,如果有這樣的行:

#ifdef CONFIG_PCI

它就會(huì)在depend文件中輸出$(wildcard/opt/Linux/include/contig/pci.h),split-include工具以auto-conf.h為輸入文件,利用autoconf.h中的“CONFIG_”標(biāo)記,生成與mkdep相對(duì)應(yīng)的文件。例如,如果autoconf.h中有#undef CONFIG_PCI這樣的行,它就會(huì)生成include/ config/pci.h文件,其內(nèi)容只有一行:

#undef CONFIG_PCI

表示不支持PCI設(shè)備。include/config/下的文件名只在.depend文件中出現(xiàn),內(nèi)核源文件是不會(huì)嵌入它們的。這樣的話,每重新配置一次內(nèi)核,就會(huì)運(yùn)行工具split-include,依次來(lái)檢查舊的子文件的內(nèi)容,以確定是否需要更新它們。這樣,不管autoconf.h修改日期如何,只要其配置不變,make就不會(huì)重新編譯內(nèi)核。

2.4.4? Linux2.6內(nèi)核Kconfig文件的用法

Kconfig文件是Linux 2.6.x系統(tǒng)的主要構(gòu)成部分,它作為內(nèi)核配置文件,主要包含可供用戶選擇的配置選項(xiàng),配置程序?qū)⒏鶕?jù)這些內(nèi)容來(lái)顯示相關(guān)配置選項(xiàng),并將配置后生成的選項(xiàng)信息存放在.config文件中。

下面我們將從一個(gè)內(nèi)核中的Kconfig文件來(lái)講述Kconfig的格式含義,當(dāng)然,由于篇幅限制,我們刪掉了大部分重復(fù)的內(nèi)容,只保留了一些典型的結(jié)構(gòu):

#

# Network configuration

#

menu "Networking support"

config PACKET

tristate "Packet socket"

---help---

The Packet protocol is used by applications which communicate directly with

network devices without an intermediate network protocol implemented in

the kernel,e. g. tcpdump.

If you want them to work,choose Y.

To compile this driver as a module,choose M here:the module will be called

af_packet.

If unsure,say Y.

config PACKET_MMAP

bool "Packet socket:mmapped IO"

depends on PACKET

---help---

If you say Y here,the Packet protocol driver will use an IO mechanism that

results in faster communication.

If unsure,say N.

config UNIX

tristate "Unix domain sockets"

---help---

If you say Y here,you will include support for Unix domain sockets; sockets

are the standard Unix mechanism for establishing and accessing network

connections. Many commonly used programs such as the X Window system and

syslog use these sockets even if your machine is not connected to any

network. Unless you are working on an embedded system or something

similar,you therefore definitely want to say Y here.

To compile this driver as a module,chaise M here; the module will be called

unix. Note that several important services won't work correctly if you

say M here and then neglect to load the module.

Say Y unless you know what you are doing.

source "net/sched/Kconfig"

source "drivers / net / Kconfig"

source "net/ bluetooth / Kconfig"

endmenu

說(shuō)明如下:

n??????? 在上面的文件中,符號(hào)#后面的內(nèi)容為注釋,不起任何作用。

n??????? menu作為一個(gè)Kconfig文件的主要選項(xiàng),后面跟隨的字符串,用引號(hào)括起來(lái),用做一個(gè)配置選項(xiàng)的選項(xiàng)名。一般一個(gè)Kconfig文件中也可以有多個(gè)menu。menu可以嵌套使用,endmenu表示一個(gè)menu的結(jié)束。

n??????? 一個(gè)menu可以有多個(gè)config,每個(gè)config作為一個(gè)子項(xiàng),又包含了幾個(gè)部分。

n??????? 內(nèi)核源碼的每個(gè)文件夾下都包含Kconfig文件,父目錄下的Kconfig文件使用source "net/bluetooth/Kconfig"來(lái)包含子目錄下的Kconfig文件,而最終的頂部的Kconiig文件則由scripts/kconfig/中的文件構(gòu)成,所有的這些,組成了一個(gè)Kconfig樹。

n??????? config子項(xiàng)中包含了幾個(gè)小的部分,其中config子項(xiàng)后面跟隨的字符串用于配置完成后,如果該選項(xiàng)被選中,則該字符串前面加上CONFIG_后綴,作為一個(gè)宏,寫入配置結(jié)果.config中。

n??????? tristate用于config的選項(xiàng)類別,有-boot、tristate、string、hex、integer這幾種可能,一般常用tristate,tristate的意思是三態(tài),即可以是我們上面介紹的未選中——不編譯、選中——編譯為模塊、選中——編譯為新操作系統(tǒng)的一部分3種狀態(tài),驅(qū)動(dòng)一般使用這個(gè)類別。

n??????? 在config的選項(xiàng)類別tristate后,跟隨一個(gè)用引號(hào)括起來(lái)的字符串,實(shí)際是以下代碼的縮寫:

tristate

prompt "something support"

而prompt "something support"字符串的作用是,作為一個(gè)config名字,在配置程序中顯示出來(lái),如果該config對(duì)應(yīng)的名字被選中,則該config被選中。

n??????? depends on的意義是本config依賴于另外一個(gè)config,如果想選擇本選項(xiàng),需要先選中本選項(xiàng)依賴的那個(gè)選項(xiàng)。

n??????? help選項(xiàng)的意思就是一些說(shuō)明該config的資料,這樣在配置新內(nèi)核的時(shí)候,配置人員可以從這里知道config的內(nèi)核模塊是什么作用,是否需要選入新的操作系統(tǒng)中。

2.4.5? Kconfig文件配置實(shí)例

Linux內(nèi)核中提供了很多設(shè)備的驅(qū)動(dòng)代碼,但在每個(gè)項(xiàng)目中總會(huì)需要添加我們自己的驅(qū)動(dòng),比如我們需要添加LED的驅(qū)動(dòng)。我們可以先獨(dú)立去編寫和調(diào)試這個(gè)驅(qū)動(dòng),等成熟后應(yīng)該放到內(nèi)核目錄樹中,使用make modules命令統(tǒng)一編譯。而且要在配置選項(xiàng)中體現(xiàn)出來(lái),用戶可以使用make menuconfig命令去配置編譯。假設(shè)驅(qū)動(dòng)代碼已編寫、調(diào)試完畢,下面我們就以添加LED驅(qū)動(dòng)為例來(lái)講解Kconfig文件的配置方法。

(1)選擇一個(gè)放置驅(qū)動(dòng)代碼的位置:

cd drivers

mkdir led

把寫好的代碼(假定為L(zhǎng)ED.c)放到這個(gè)drivers/led目錄中。

(2)drivers/led添加Kconfig文件,內(nèi)容如下:

menu "Led support"

config LED

tristate "LED support"

---help---

LED use gpio as ir input .

If you want LED support,you should say Y here and also to the

specific driver for your bus adapter(s) below.

This led support can be built as a module.

endmenu

(3)在drivers/led添加Makefile文件,編寫Makefile:

obj-$(CONFIG_LED) += LED.o

(4)修改上一級(jí)Makefile和Kconfig。

在Makefile中添加:

obj-$(CONFIG_LED) += led/

在Kconfig中添加:

source "drivers/led/Kconfig"

(5)最后,在arch/arm的Kconfig中添加:

source "drivers/led/Kconfig"

具體位置視平臺(tái)架構(gòu)而定。

這樣,Kconfig文件就修改完成了。此時(shí)可以使用make menuconfig,發(fā)現(xiàn)已有LED support--->選項(xiàng),進(jìn)入后選擇M,再使用make modules,就可以發(fā)現(xiàn)在led目錄下已生成了LED.ko。

總結(jié)

以上是生活随笔為你收集整理的linux中menu命令,menucofig 详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。