[轉]http://www.cnblogs.com/Daniel-G/archive/2013/08/27/3284791.html
1 前言
當執行#make menuconfig時會出現內核的配置界面,所有配置工具都是通過讀取"arch/$(ARCH)Kconfig"文件來生成配置界面,這個文件就是所有配置的總入口,它會包含其他目錄的Kconfig
注:對於uboot來講,配置的總入口在uboot/Kconfig
2. Kconfig的作用
Kconfig用來配置內核,它就是各種配置界面的源文件,內核的配置工具讀取各個Kconfig文件,生成配置界面供開發人員配置內核,最后生成配置文件.config
3. Kconfig基本要素
Kconfig的語法可以參考“Documentation/kbuild/kconfig-language.txt”
3.1 config條目(entry)
config TMPFS_POSIX_ACL
bool "Tmpfs POSIX Access Control Lists"
depends on TMPFS
select GENERIC_ACL
help
POSIX Access Control Lists (ACLs) support permissions for users and
groups beyond the owner/group/world scheme.
To learn more about Access Control Lists, visit the POSIX ACLs for
Linux website <http://acl.bestbits.at/>.
If you don't know what Access Control Lists are, say N.
解析:
- config是關鍵字,表示一個配置選項的開始;緊跟着的TMPFS_POSIX_ACL是配置選項的名稱,省略了前綴"CONFIG_"
- bool表示變量類型,即"CONFIG_ TMPFS_POSIX_ACL "的類型,有5種類型:bool、tristate、string、hex和int,其中tristate和string是基本的類型
bool變量的值: y和n
tristate變量的值:y、n和m
string變量的值: 字符串
bool之后的字符串“Tmpfs POSIX Access Control Lists”是提示信息,在配置界面中上下移動光標選中它時,就可以通過按空格或回車鍵來設置CONFIG_ TMPFS_POSIX_ACL的值
- depends on:表示依賴於XXX,“depends on TMPFS”表示只有當TMPFS配置選項被選中時,當前配置選項的提示信息才會出現,才能設置當前配置選項
- select:是反向依賴關系的意思,即當前配置選項被選中,則GENERIC_ACL就會被選中。
3.2.menu條目
menu條目用於生成菜單,其格式如下:
menu "Floating poing emulation"
config FPE_NWFPE
..............
config FPE_NWFPE_XP
.............
endmenu
menu之后的Floating poing emulation是菜單名。menu和endmenu間有很多config條目,在配置界面中如下所示:
Floating poing emulation--->
[] FPE_NWFPE
[] FPE_NWFPE_XP
3.3 choice條目
choice條目將多個類似的配置選項組合在一起,供用戶單選或多選
choice
prompt "ARM system type"
default ARCH_VERSATILE
config ARCH_AAEC2000
.........
config ARCH_REALVIEW
.........
endchoice
prompt "ARM system type"給出提示信息“ARM system type”,光標選中后回車進入就可以看到多個config條目定義的配置選項
choice條目中定義的變量只有bool和tristate
3.4.comment條目
comment條目用於定義一些幫助信息,出現在界面的第一行,如在arch/arm/Kconifg中有如下代碼:
menu "Floating point emulation"
comment "At least one emulation must be selected"
config FPE_NWFPE
.........
config FPE_NWFPE_XP
在界面中如下所示:
3.5.source條目
source條目用於讀取另一個Kconfig文件,如:
source "net/Kconifg"