新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于Linux 內(nèi)核配置系統(tǒng)淺析

關(guān)于Linux 內(nèi)核配置系統(tǒng)淺析

作者: 時(shí)間:2012-08-29 來(lái)源:網(wǎng)絡(luò) 收藏

前面說(shuō)過(guò),每個(gè)變量取值范圍是:y,n,m 和空,obj-$(CONFIG_TC) 分別對(duì)應(yīng)著 obj-y,obj-n,obj-m,obj-。如果 CONFIG_TC 為 y,那么 tc.o 就進(jìn)入了 obj-y 列表。obj-y 為包含到 vmlinux 中的目標(biāo)文件列表;obj-m 為編譯成模塊的目標(biāo)文件列表;obj-n 和 obj- 中的文件列表被忽略。就根據(jù)這些列表的屬性進(jìn)行編譯和鏈接。

export-objs 中的目標(biāo)文件都使用了 EXPORT_SYMBOL() 定義了公共的符號(hào),以便可裝載模塊使用。在 tc.c 文件的最后部分,有 EXPORT_SYMBOL(search_tc_card);,表明 tc.o 有符號(hào)輸出。

這里需要指出的是,對(duì)于編譯目標(biāo)的定義,存在著兩種格式,分別是老式定義和新式定義。老式定義就是前面 Rules.make 使用的那些變量,新式定義就是 obj-y,obj-m,obj-n 和 obj-。 推薦使用新式定義,不過(guò)由于 Rules.make 不理解新式定義,需要在 Makefile 中的適配段將其轉(zhuǎn)換成老式定義。

c) 適配段

適配段的作用是將新式定義轉(zhuǎn)換成老式定義。在上面的例子中,適配段就是將 obj-y 和 obj-m 轉(zhuǎn)換成 Rules.make 能夠理解的 L_TARGET,L_OBJS,LX_OBJS,M_OBJS,MX_OBJS。

L_OBJS := $(sort $(filter-out $(export-objs), $(obj-y))) 定義了 L_OBJS 的生成方式:在 obj-y 的列表中過(guò)濾掉 export-objs(tc.o),然后排序并去除重復(fù)的文件名。這里使用到了 GNU Make 的一些特殊功能,具體的含義可參考 Make 的文檔(info make)。

d) include $(TOPDIR)/Rules.make

3. 配置文件

3.1 配置功能概述

除了 Makefile 的編寫,另外一個(gè)重要的工作就是把新功能加入到 的配置選項(xiàng)中,提供此項(xiàng)功能的說(shuō)明,讓用戶有機(jī)會(huì)選擇此項(xiàng)功能。所有的這些都需要在 config.in 文件中用配置語(yǔ)言來(lái)編寫配置腳本,

在 Linux 中,配置命令有多種方式:

配置命令 解釋腳本

Make config, make oldconfig scripts/Configure

Make menuconfig scripts/Menuconfig

Make xconfig scripts/tkparse

以字符界面配置(make config)為例,頂層 Makefile 調(diào)用 scripts/Configure, 按照 arch/arm/config.in 來(lái)進(jìn)行配置。命令執(zhí)行完后產(chǎn)生文件 .config,其中保存著配置信息。下一次再做 make config 將產(chǎn)生新的 .config 文件,原 .config 被改名為 .config.old

3.2 配置語(yǔ)言

1) 頂層菜單

mainmenu_name /prompt/ /prompt/ 是用'或包圍的字符串,'與的區(qū)別是'…'中可使用$引用變量的值。mainmenu_nAME 設(shè)置最高層菜單的名字,它只在 make xconfig 時(shí)才會(huì)顯示。

2) 詢問(wèn)語(yǔ)句

bool /prompt/ /symbol/

hex /prompt/ /symbol/ /word/

int /prompt/ /symbol/ /word/

string /prompt/ /symbol/ /word/

tristate /prompt/ /symbol/

詢問(wèn)語(yǔ)句首先顯示一串提示符 /prompt/,等待用戶輸入,并把輸入的結(jié)果賦給 /symbol/ 所代表的配置變量。不同的詢問(wèn)語(yǔ)句的區(qū)別在于它們接受的輸入數(shù)據(jù)類型不同,比如 bool 接受布爾類型( y 或 n ),hex 接受 16 進(jìn)制數(shù)據(jù)。有些詢問(wèn)語(yǔ)句還有第三個(gè)參數(shù) /word/,用來(lái)給出缺省值。

3) 定義語(yǔ)句

define_bool /symbol/ /word/

define_hex /symbol/ /word/

define_int /symbol/ /word/

define_string /symbol/ /word/

define_tristate /symbol/ /word/

不同于詢問(wèn)語(yǔ)句等待用戶輸入,定義語(yǔ)句顯式的給配置變量 /symbol/ 賦值 /word/。

4) 依賴語(yǔ)句

dep_bool /prompt/ /symbol/ /dep/ ...

dep_mbool /prompt/ /symbol/ /dep/ ...

dep_hex /prompt/ /symbol/ /word/ /dep/ ...

dep_int /prompt/ /symbol/ /word/ /dep/ ...

dep_string /prompt/ /symbol/ /word/ /dep/ ...

dep_tristate /prompt/ /symbol/ /dep/ ...

與詢問(wèn)語(yǔ)句類似,依賴語(yǔ)句也是定義新的配置變量。不同的是,配置變量/symbol/的取值范圍將依賴于配置變量列表/dep/ …。這就意味著:被定義的配置變量所對(duì)應(yīng)功能的取舍取決于依賴列表所對(duì)應(yīng)功能的選擇。以dep_bool為例,如果/dep/ …列表的所有配置變量都取值y,則顯示/prompt/,用戶可輸入任意的值給配置變量/symbol/,但是只要有一個(gè)配置變量的取值為n,則/symbol/被強(qiáng)制成n。

不同依賴語(yǔ)句的區(qū)別在于它們由依賴條件所產(chǎn)生的取值范圍不同。

5) 選擇語(yǔ)句

choice /prompt/ /word/ /word/

choice 語(yǔ)句首先給出一串選擇列表,供用戶選擇其中一種。比如 Linux for ARM 支持多種基于 ARM core 的 CPU,Linux 使用 choice 語(yǔ)句提供一個(gè) CPU 列表,供用戶選擇:

choice 'ARM system type'

Anakin CONFIG_ARCH_ANAKIN

Archimedes/A5000 CONFIG_ARCH_ARCA5K

Cirrus-CL-PS7500FE CONFIG_ARCH_CLPS7500

……

SA1100-based CONFIG_ARCH_SA1100

Shark CONFIG_ARCH_SHARK RiscPC

Choice 首先顯示 /prompt/,然后將 /word/ 分解成前后兩個(gè)部分,前部分為對(duì)應(yīng)選擇的提示符,后部分是對(duì)應(yīng)選擇的配置變量。用戶選擇的配置變量為 y,其余的都為 n。

6) if語(yǔ)句

if [ /expr/ ] then

/statement/

...

fi

if [ /expr/ ] then

/statement/

...

else

/statement/

...

fi

if 語(yǔ)句對(duì)配置變量(或配置變量的組合)進(jìn)行判斷,并作出不同的處理。判斷條件 /expr/ 可以是單個(gè)配置變量或字符串,也可以是帶操作符的表達(dá)式。操作符有:=,!=,-o,-a 等。

7) 菜單塊(menu block)語(yǔ)句

mainmenu_option next_comment

comment '…..'

endmenu

引入新的菜單。在向內(nèi)核增加新的功能后,需要相應(yīng)的增加新的菜單,并在新菜單下給出此項(xiàng)功能的配置選項(xiàng)。Comment 后帶的注釋就是新菜單的名稱。所有歸屬于此菜單的配置選項(xiàng)語(yǔ)句都寫在 comment 和 endmenu 之間。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉