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 "等語法結構。