<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          前面說過,每個變量取值范圍是:y,n,m 和空,obj-$(CONFIG_TC) 分別對應(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() 定義了公共的符號,以便可裝載模塊使用。在 tc.c 文件的最后部分,有 EXPORT_SYMBOL(search_tc_card);,表明 tc.o 有符號輸出。

          這里需要指出的是,對于編譯目標(biāo)的定義,存在著兩種格式,分別是老式定義和新式定義。老式定義就是前面 Rules.make 使用的那些變量,新式定義就是 obj-y,obj-m,obj-n 和 obj-。 推薦使用新式定義,不過由于 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 的列表中過濾掉 export-objs(tc.o),然后排序并去除重復(fù)的文件名。這里使用到了 GNU Make 的一些特殊功能,具體的含義可參考 Make 的文檔(info make)。

          d) include $(TOPDIR)/Rules.make

          3. 配置文件

          3.1 配置功能概述

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

          在 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 來進(jìn)行配置。命令執(zhí)行完后產(chǎn)生文件 .config,其中保存著配置信息。下一次再做 make config 將產(chǎn)生新的 .config 文件,原 .config 被改名為 .config.old

          3.2 配置語言

          1) 頂層菜單

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

          2) 詢問語句

          bool /prompt/ /symbol/

          hex /prompt/ /symbol/ /word/

          int /prompt/ /symbol/ /word/

          string /prompt/ /symbol/ /word/

          tristate /prompt/ /symbol/

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

          3) 定義語句

          define_bool /symbol/ /word/

          define_hex /symbol/ /word/

          define_int /symbol/ /word/

          define_string /symbol/ /word/

          define_tristate /symbol/ /word/

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

          4) 依賴語句

          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/ ...

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

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

          5) 選擇語句

          choice /prompt/ /word/ /word/

          choice 語句首先給出一串選擇列表,供用戶選擇其中一種。比如 Linux for ARM 支持多種基于 ARM core 的 CPU,Linux 使用 choice 語句提供一個 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/ 分解成前后兩個部分,前部分為對應(yīng)選擇的提示符,后部分是對應(yīng)選擇的配置變量。用戶選擇的配置變量為 y,其余的都為 n。

          6) if語句

          if [ /expr/ ] then

          /statement/

          ...

          fi

          if [ /expr/ ] then

          /statement/

          ...

          else

          /statement/

          ...

          fi

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

          7) 菜單塊(menu block)語句

          mainmenu_option next_comment

          comment '…..'

          endmenu

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

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


          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();