<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 關(guān)于Linux 內核配置系統淺析

關(guān)于Linux 內核配置系統淺析

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

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

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

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

c) 適配段

適配段的作用是將新式定義轉換成老式定義。在上面的例子中,適配段就是將 obj-y 和 obj-m 轉換成 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),然后排序并去除重復的文件名。這里使用到了 GNU Make 的一些特殊功能,具體的含義可參考 Make 的文檔(info make)。

d) include $(TOPDIR)/Rules.make

3. 配置文件

3.1 配置功能概述

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

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

配置命令 解釋腳本

Make config, make oldconfig scripts/Configure

Make menuconfig scripts/Menuconfig

Make xconfig scripts/tkparse

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

3.2 配置語(yǔ)言

1) 頂層菜單

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

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

bool /prompt/ /symbol/

hex /prompt/ /symbol/ /word/

int /prompt/ /symbol/ /word/

string /prompt/ /symbol/ /word/

tristate /prompt/ /symbol/

詢(xún)問(wèn)語(yǔ)句首先顯示一串提示符 /prompt/,等待用戶(hù)輸入,并把輸入的結果賦給 /symbol/ 所代表的配置變量。不同的詢(xún)問(wèn)語(yǔ)句的區別在于它們接受的輸入數據類(lèi)型不同,比如 bool 接受布爾類(lèi)型( y 或 n ),hex 接受 16 進(jìn)制數據。有些詢(xún)問(wèn)語(yǔ)句還有第三個(gè)參數 /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/

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

4) 依賴(lài)語(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/ ...

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

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

5) 選擇語(yǔ)句

choice /prompt/ /word/ /word/

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

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è)部分,前部分為對應選擇的提示符,后部分是對應選擇的配置變量。用戶(hù)選擇的配置變量為 y,其余的都為 n。

6) if語(yǔ)句

if [ /expr/ ] then

/statement/

...

fi

if [ /expr/ ] then

/statement/

...

else

/statement/

...

fi

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

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

mainmenu_option next_comment

comment '…..'

endmenu

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

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>