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