歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

LINUX Kconfig語法分析

每個選項都有其自己的依賴關系。這些依賴關系決定了選項是否是可見的。父選項可見,子選項才能可見。
1 菜單選項
大多數的選項都定義了一個配置選項,其它選項則有助於對它們進行組織。(原文:Most entries define a config option, all other entries help to organize them.)一個配置選項定義可以是下面
的形式:
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),依賴關系,幫助信息和默認值。 配置選項可以用相同的名字定義多次,但每個定義只能有一個輸入提示並且類型還不能沖突。
2 菜單屬性
菜單選項可以有多個屬性。並不要求這些屬性可以用在任何地方(見語法)。
- 類型定義:"bool"/"tristate"/"string"/"hex"/"int" bool布爾類型、 tristate三態:內建、模塊、移除 string字符串、 hex十六進制、 integer整型

每個配置選項都必須指定類型。有兩個基本類型:tristate 和 string,其他類型都是基於這兩個基本類型。類型定義可以用輸入提示,所以下面的兩個例子是等價的:
bool "Networking support"

bool
prompt "Networking support"
- 輸入提示: "prompt" <prompt> ["if" <expr>]
每個菜單選項最多只能有一個顯示給用戶的輸入提示。可以用 "if" 來表示該提示的依賴關系,當然這是可選的。
- 默認值:"default" <expr> ["if" <expr>]
一個配置選項可以有任意多個默認值。如果有多個默認值,那麼只有第一個被定義的值是可用的。默認值並不是只限於應用在定義他們的菜單選項。這就意味著默認值可以定義在任何地方或被更早的定義覆蓋。如果用戶沒有設置(通過上面的輸入提示),配置選項的值就是默認值。如果可以顯示輸入提示的話,就會把默認值顯示給用戶,並可以讓用戶進行修改。
默認值的依賴關系可以用 "if" 添加。(可選項)
- 依賴關系:"depends on"/"requires" <expr>
為一菜單選項定義依賴關系。如果定義了多個依賴關系,它們之間用 '&&' 間隔。依賴關系也可以應用到該菜單中所有的其它選項(同樣接受 if表達式),所以下面的兩個例子是等價的:
bool "foo" if BAR
default y if BAR
and
depends on BAR
bool "foo"
default y
- 反向依賴關系:"select" <symbol> ["if" <expr>]
盡管普通的依賴關系可以降低一選項的上限,反向依賴能將這一限制降的更低。當前菜單選項的值是symbol的最小值。如果symbol被選擇了多次,上限就是其中的最大值。反向依賴只能用在 boolean 或 tristate 選項上。
- 數據范圍:"range" <symbol> <symbol> ["if" <expr>]
為int和hex類型的選項設置可以接受輸入值范圍。用戶只能輸入大於等於第一個symbol,小於等於第二個symbol的值。
- 幫助信息: "help" or "---help---"
定義一幫助信息。幫助信息的結束就由縮進的水平決定的,這也就意味著信息是在第一個比幫助信息開始行的縮進小的行結束。
"---help---" 和 "help" 在實現的作用上沒有區別,"---help---" 有助於將文件中的配置邏輯與
給開發人員的提示分開。
3 菜單依賴關系
依賴關系決定了菜單選項是否可見,也可以減少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只是表達式的一部分。經常用單引號或雙引號括起來。在引號中,可以使用任何字符,使用引
號要用轉義字符'\'。
4 菜單結構
菜單在樹中的位置可由兩種方法決定。第一種可以是這樣:
menu "Network device support"
depends NET
config NETDEVICES
...
endmenu
所有的在"menu" ... "endmenu" 之間都是"Network device support"的子菜單。所有的子菜單選項都繼承了父菜單的依賴關系,比如,"NET"的依賴關系就被加到了配置選項NETDEVICES的依賴列表中。還有就是通過分析依賴關系生成菜單的結構。如果菜單選項在一定程度上依賴於前面的選項,它就能成為該選項的子菜單。首先,前面的(父)選項必須是依賴列表中的一部分並且它們中必須有滿足下面兩個條件的選項:

Copyright © Linux教程網 All Rights Reserved