kconfig language


1.介紹
----


在配置資料庫的配置選項是以樹的形式組成的︰


+- Code maturity level options
| +- Prompt for development and/or incomplete code/drivers
+- General setup
| +- Networking support
| +- System V IPC
| +- BSD Process Accounting
| +- Sysctl support
+- Loadable module support
| +- Enable loadable module support
| +- Set version information on all module symbols
| +- Kernel module loader
+- ...


每個選項都有其自己的倚賴關係。這些倚賴關係決定了選項是否是可見的。父選項可見,子選項才能可見。


2.選單選項
--------


大多數的選項都定義了一個配置選項,其它選項則有助於對它們進行組織。)一個配置選項定義可以是下面
的形式︰


config MODVERSIONS
bool "Set version information on all module symbols"
depends MODULES
help
Usually, modules have to be recompiled whenever you switch to a new
kernel. ...


每行都是以關鍵字開始,並可以接多個參數。"config" 為定義了一新的配置選項。下面的幾行定義了該配置
選項的屬性。屬性可以是該配置選項的類型,輸入提示(input prompt),倚賴關係,幫助訊息和預設值。一
配置選項可以用相同的名字定義多次,但每個定義只能有一個輸入提示並且類型還不能衝突。


3.選單屬性
--------


一選單選項可以有多個屬性。並不要求這些屬性可以用在任何地方(見語法)。


- 3.1.類型定義"bool"/"tristate"/"string"/"hex"/"int"
每個配置選項都必須指定類型。有兩個基本類型︰tristate 和 string,其他類型都是基於這兩個基本
類型。類型定義可以用輸入提示,所以下面的兩個例子是相同的︰


bool "Networking support"

bool
prompt "Networking support"


-3.2.輸入提示"prompt" <prompt> ["if" <expr>]
每個選單選項最多只能有一個顯示給用戶的輸入提示。可以用 "if" 來表示該提示的倚賴關係,當然這是
可選的。


- 3.3.預設值"default" <expr> ["if" <expr>]
一個配置選項可以有任意多個預設值。如果有多個預設值,那麼只有第一個被定義的值是可用的。預設值並
不是只限於應用在定義他們的選單選項。這就意味著預設值可以定義在任何地方或被更早的定義覆蓋。
如果用戶沒有設定(透過上面的輸入提示),配置選項的值就是預設值。如果可以顯示輸入提示的話,就會把
預設值顯示給用戶,並可以讓用戶進行修改。
預設值的倚賴關係可以用 "if" 添加。(可選項)


- 3.4.倚賴關係"depends on"/"requires" <expr>
為一選單選項定義倚賴關係。如果定義了多個倚賴關係,它們之間用 '&&' 間隔。倚賴關係也可以應用到
該選單中所有的其它選項(同樣接受一if表達式),所以下面的兩個例子是相同的︰


bool "foo" if BAR
default y if BAR
and
depends on BAR
bool "foo"
default y


- 3.5.反向倚賴關係"select" <symbol> ["if" <expr>]
儘管普通的倚賴關係可以降低一選項的上限,反向倚賴能將這一限制降的更低。當前選單選項的值是symbol
的最小值。如果symbol被選擇了多次,上限就是其中的最大值。
反向倚賴只能用在 boolean 或 tristate 選項上。


- 3.6.數據範圍"range" <symbol> <symbol> ["if" <expr>]
為int和hex類型的選項設定可以接受輸入值範圍。用戶只能輸入大於等於第一個symbol,小於等於第二個
symbol的值。


- 3.7.幫助訊息 "help" or "---help---"
定義一幫助訊息。幫助訊息的結束就由縮進的水準決定的,這也就意味著訊息是在第一個比幫助訊息開始行
的縮進小的行結束。
"---help---" 和 "help" 在實現的作用上沒有區別,"---help---" 有助於將檔案中的配置邏輯與
給開發人員的提示分開。


4.選單倚賴關係
------------


倚賴關係決定了選單選項是否可見,也可以減少tristate的輸入範圍。tristate邏輯比boolean邏輯在表
達式中用更多的狀態(state)來表示模塊的狀態。倚賴關係表達式的語法如下︰


<expr> ::= <symbol> (1)
<symbol> '=' <symbol> (2)
<symbol> '!=' <symbol> (3)
'(' <expr> ')' (4)
'!' <expr> (5)
<expr> '&&' <expr> (6)
<expr> '||' <expr> (7)


表達式是以優先級的降序列出的。


(1) 將symbol賦給表達式。boolean和tristate類型的symbol直接賦給表達式。所有其它類型的symbol
都賦 'n'。
(2) 如果兩個symbol相等,返回'y',否則為'n'。
(3) 如果兩個symbol相等,返回'n',否則為'y'。
(4) 返回表達式的值。用於改變優先級。
(5) 返回 (2-/expr/) 的結果。
(6) 返回 min(/expr/,/expr/) 的結果。
(7) 返回 max(/expr/,/expr/) 的結果。


一個表達式的值可以是'n','m'或'y'(或者是計算的結果 0,1,2)。當表達式的值為'm'或'y'的時候,菜
單項才是可見的。


symbol有兩種類型︰不可變的和可變的。不可變的symbol是最普通的,由'config'語句定義,完全由數字
、字母和下劃線組成(alphanumeric characters or underscores)。
不可變的symbol只是表達式的一部分。經常用單引號或雙引號括起來。在引號中,可以使用任何字符,使用引
號要用轉義字符'\'。


5.選單架構
--------


選單在樹中的位置可由兩種方法決定。第一種可以是這樣︰


menu "Network device support"
depends NET


config NETDEVICES
...


endmenu


所有的在"menu" ... "endmenu" 之間都是"Network device support"的子選單。所有的子選單選項
都繼承了父選單的倚賴關係,比如,"NET"的倚賴關係就被加到了配置選項NETDEVICES的倚賴清單中。


還有就是透過分析倚賴關係生成選單的架構。如果選單選項在一定程度上倚賴於前面的選項,它就能成為該選
項的子選單。首先,前面的(父)選項必須是倚賴清單中的一部分並且它們中必須有滿足下面兩個條件的選項︰
- 如果父選項為'n',子選項必須不可見。
- 如果父選項可見,子選項才能可見。


config MODULES
bool "Enable loadable module support"


config MODVERSIONS
bool "Set version information on all module symbols"
depends MODULES


comment "module support disabled"
depends !MODULES


MODVERSIONS 直接倚賴 MODULES,這就意味著如果MODULES不為'n',該選項才可見。換句話說,當
MODULES可見時,選項才可見(MODULES的(空)倚賴關係也是選項倚賴關係的一部分)。


6.Kconfig 語法
------------


配置檔案描述了選單選項,每行都是以一關鍵字開頭(除了幫助訊息)︰
- config
- menuconfig
- choice/endchoice
- comment
- menu/endmenu
- if/endif
- source


前5個可以用在選單選項定義的開始。


6.1.config:


"config" <symbol>
<config options>


定義了一配置選項 <symbol> 並且可以接受任何前面介紹的屬性。


6.2.menuconfig:

"menuconfig" <symbol>
<config options>


此關鍵字和前面的關鍵字很相似,但它在前面的基礎上要求所有的子選項作為獨立的行顯示。


6.3.choices:


"choice"
<choice options>
<choice block>
"endchoice"


該關鍵字定義了一組選擇項,並且選項可以是前面描述的任何屬性。儘管boolean只允許選擇一個配置選項,
tristate可以抒多個配置選項設為'm',但選項只能是boolean或tristate類型。這可以在一個硬體有多
個驅動的情況下使用,最終只有一個驅動被編譯進/加載到內核,,但所有的驅動都可以編譯成模塊。
選項可以接受的另一個選項是"optional",這樣選項就被設定為'n',沒有被選中的。


6.4.comment:


"comment" <prompt>
<comment options>


這裡定義了在配置過程中顯示給用戶的註釋,該註釋還將寫進輸出檔案中。唯一可用的可選項是倚賴關係。


6.5.menu:


"menu" <prompt>
<menu options>
<menu block>
"endmenu"


這裡定義了一個選單,詳細訊息請看前面的"選單架構"。唯一可用的可選項是倚賴關係。


6.6.if:


"if" <expr>
<if block>
"endif"


這裡定義了if架構。倚賴關係<expr>被加到所有在if ... endif 中的選單選項中。

    全站熱搜

    立你斯 發表在 痞客邦 留言(0) 人氣()