linux ./config 淺析

1.簡介

Config不是一種bash,config語言是linux內核的一種配置語言,config.in文件是使用該語言編寫而成,在通常情況下,它看起很像一個SH語言的子集。config配置語言主要有21條基本語句,1條if語句,菜單塊和source。主要包括以下幾個方面:

(1)菜單入口

          例如:config  MODVERSION

                                       bool  "Module versioning suport"

                                       help

                                                  Usualy,you can have to use modules compiled with your kernel.......

"config"定義了新的配置選項,之後的幾行定義了該配置選項的屬性。配置選項的屬性包括:類型、數據範圍、輸入提示、依賴關係、選擇關係、幫助信息和默認值等。

每個配置選項都必須指定類型,類型包括bool,tristate,string,hex和int,其中tristate和bool是兩種基本類型,其他的類型都是基於這兩種基本類型的,類型定義後可以緊跟輸入提示 ,下面兩段腳本是等價的。

            bool  "Networking support"等價於

            bool

            prompt "Networking support"

輸入提示格式:

                   prompt <prompt>   [if <expr>]  其中if可選項用來表示該提示的依賴關係。

默認值的格式:

                   default  <expr>    [if<expr>]

      一個配置選項可有任意多個默認值,在這種情況下,只有第一個被定義的值是可用的,如果用戶不設置對應的選項,配置選項的值就是默認值。

依賴關係的格式:

                    depend on(或者requries)<expr>

       如果定義了多重依賴關係,中間用“&&”隔開,依賴關係也可以應用到該菜單中所有的其他選項(同樣接受if表達式),下面的兩端腳本是等價的:

                  bool "foo"   if  BAR

                  default  y   if   BAR

       等價於:

                  depend  on BAR

                  bool  "foo"

                  default   y 

選擇關係(反向依賴關係)格式:

                    select  <symbol>  [if<expr>] 

                     A如果選擇了B,則在A被選中的情況下,B自動被選中。

                      依賴關係和選擇關係有點像C++中,類繼承的關係。

上述提到的expr表達式,是在 Kbuild   Makefile中定義的,定義爲:

                     <expr> :: = <symbol>

                                      <symbol> '=' <symbol>

                                       <symbol> '!=' <symbol>

                                       '(' <expr> ')'

                                        '!' <expr>

                                        '<expr>&&<expr>'

                                       '<expr>||<expr>‘

也就是說expr的值是由symbol、兩個symbol相等、兩個symbol不等,以及expr的賦值、非、與、或運算構成。

其中symbol分爲兩類:一類是由菜單入口定義的非常數symbol

                                         另一類是作爲expr組成部分的常數symbol

數據範圍的格式:

                    range   <symbol>  <symbol>  [if<expr>]

        爲int和hex的值可以接受用戶的輸入,值的大小大於等於第一個symbol,小於等於第二個symbol。

幫助信息的格式:

                    help(--help--)

                     開始

                      .........

                     結束

(2)菜單結構

       菜單入口在菜單樹結構中的位置可由兩種方法決定。第一種方式爲:

                      menu  "Network  device support "

                               depend on NET

                       config  NETDEVICE

                      ..........

                        endmenu

          所處於menu與endmenu之間的菜單入口都會成爲"Network device support"的子菜單,而且所有的子菜單都會繼承父菜單的依賴關係,比如,"Network device support"對“NET”的一來會被加到配置選項NETDEVICE的依賴表中。

              需要注意的是,menu後面跟的“Network device support”項目僅僅是1個菜單,沒有對應真實的配置項,也不具備3種不同的狀態。這是它和config的區別。

另一種方式是通過依賴關係生成菜單結構。

                config MODULES

                       bool   "Enable loadable module support"

                  config MODULEVERSION

                         bool   "Set  version information on  all module symbols "  

                         depends on  MODULES

                   commont "module  support disabled"

                           depend  on  !MODULES

          MODULEVERSION直接依賴於MODULES,只有當MODULES部位“n”時,該選項纔可見。

除此之外,Kconfig中還使用了“choice......endchoice”、“comment”、"if.....endif "等語法結構。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章