介紹
------------
配置數據庫是組織在一個樹結構裡面的配置選項的集合。
+- 代碼成熟級別選項
| +- 對於開發和/或不完整的代碼/驅動 的提示
+-通用配置
| +- 網絡支持
| +- System V 進程通信機制
| +- BSD 程序計數器
| +- Sysctl支持
+-可裝載模塊支持
| +- 使能可裝載模塊支持
| +- 在所有模塊標記上設置版本信息
| +- 內核模塊裝載
+-...
每個入口都有它的依賴。這些依賴性用來決定入口的是否可見。只有當父入口是可見的,它的子入口才能是可見的。
菜單入口
------------
大多數入口在Kconfig文件中都定義了一個配置選項;所有其它的入口都用來組織這些配置選項。一個典型的配置選項是這樣定義的:
config MODVERSIONS
bool"Set version information on all module symbols"
dependson MODULES
help
Usually, modules have to be recompiledwhenever you switch to a new
kernel. ...
每一行都以一個關鍵字開頭,並且後面可以跟多個參數。一個新的配置入口是以“config”關鍵字開始的。接下來的數行是對這個配置選項的屬性定義。屬性可以是類型、輸入提示、依賴項、幫助文檔以及默認值。一個配置選項用相同的名字定義多次,但是每次定義的輸入提示和類型都必須不一樣。
菜單屬性
--------------
一個菜單入口可以有多個屬性。不是所有的屬性在任何地方都會有效。
- 類型定義:"bool"/"tristate"/"string"/"hex"/"int"
每個配置選項必須都有一個類型。在上面這幾個類型中其實只有兩個基本類型:tirstate和string;其它的類型都是基於這兩種屬性的。類型定義的時候可以接受一個輸入提示(也可以單獨使用一個提示屬性),所以下面的這兩個例子是等價的:
bool"Networking support"
和
bool
prompt"Networking support"
- 輸入提示:"prompt" <prompt> ["if" <expr>]
每個菜單入口最多只能有一個展示給用戶看的輸入提示,可以使用“if”來表示輸入提示的依賴性,這個依賴性是可選的。
- 默認值: "default" <expr> ["if" <expr> ]
一個配置選項可以有任意多個默認值。如果存在多個默認值,只有第一個定義的默認值才是有效的。默認值可以定義在菜單入口的任何位置。這就意味著默認值可以在配置選項的其它地方再定義或者被之前的默認值定義給覆蓋。
只有當用戶沒有給配置標記賦值的時候(通過上面的輸入提示),才會使用這個默認值來進行賦值。如果一個用戶提示是可見的,那樣用戶就能看到默認值,並且可以輸入一個值將默認值覆蓋。
與輸入提示一樣,可以使用“if”來表示默認值的依賴性,這個依賴性是可選的。
- 類型定義+ 默認值:
"def_bool"/"def_tristate"<expr> ["if" <expr>]
這是一個類型定義加上一個默認值的速記符號。
如果使用依賴性,可以使用“if”來表示
- 依賴項: "depends on" <expr>
依賴項給菜單入口定義了一個依賴規則。如果有多個依賴項,它們將使用‘&&’符號進行連接。依賴性對菜單入口中的其它選項都有效(這個菜單如果也接受一個“if”表達式),所以下面這兩個例子是等價的:
bool"foo" if BAR
default y if BAR
和
depends on BAR
bool "foo"
default y