Kconfig作用
之前章節(jié)中,講解了使用make menuconfig圖形化界面來配置內核,而界面中這些選項菜單列表主要是由arch/arm/下Kconfig輸出給menuconfig工具。我們將一個新的驅動程序添加進內核,只需要我們按照一定的格式將此驅動信息添加進該驅動所屬的Kconfig中,menuconfig工具就可以識別到這種格式,并將新的驅動信息呈現(xiàn)到配置選項菜單列表中,下面簡單講解一下Kconfig語法規(guī)則。
Kconfig語法
Kconfig文件描述了菜單選項,每行都是以關鍵字開頭,我們逐一解釋關鍵字意義:
config
config <symbol>
<config options>
config是關鍵字,表示一個配置選項的開始;緊跟著的<symbol>是配置選項的名稱。
例如上圖中:
config是關鍵字,緊跟著的VXLAN是配置選項的名稱,其實省略了前綴"CONFIG_"
tristate表示變量類型,即"CONFIG_VXLAN"的類型,有5種類型:bool,tristate,string,hex和int,其中bool類型變量的值:y和n;tristate類型變量的值:y,n和m;string變量的值:字符串;hex類型變量的值:是一個十六進制的數(shù)據;int類型變量的值:是一個整型的數(shù)據。
tristate之后的字符串“Virtual eXtensible Local Area Network (VXLAN)”是提示信息,在配置界面中上下移動光標選中它時,就可以通過按空格或回車鍵來設置CONFIG_VXLAN的值。
depends on:表示依賴于XXX,“depends on IENT”表示只有當IENT配置選項被選中時,當前配置選項的提示信息才會出現(xiàn),才能設置當前配置選項。
select:當前選項選中后則select后指定的選項自動被選擇。
比如我們在圖形界面中選中CONFIG_VXLAN這一項,CONFIG_VXLAN類型為tristate,所以可通過空格選擇此項是y,n,m:
然后在.config文件中就多出一項:
#CONFIG_NET_TEAM is not set
#CONFIG_MACVLAN is not set
#CONFIG_IPVLAN is not set
#CONFIG_VXLAN = y
#CONFIG_NETCONSOLE is not set
Makefile文件會根據這項配置選擇編譯該功能驅動。
menuconfig
menuconfig <symbol>
<config options>
此關鍵字是一個菜單名稱,該菜單名下有一系列的配置選項,只有選中該菜單項后,才會呈現(xiàn)該菜單下的配置選項。例如下圖,使用if/endif語句判斷NEW_LEDS選項是否被選中,如果被選中,則會出現(xiàn)LEDS_CLASS,LEDS_CLASS_FLASH等配置選項。
choices
choice
<choice options>
<choice block>
endchoice
該關鍵字定義了一組配置選擇項,用戶只能在這些配置項中選擇一項。比如,RTC支持多種型號時鐘芯片,我們只能選擇其中一種:
comment
comment <prompt>
<comment options>
這里定義了在配置過程中顯示給用戶的提示信息。
例如:
menu
menu <prompt>
<menu options>
<menu block>
endmenu
這里定義了一個簡單的菜單名,與menuconfig關鍵字的菜單名不同,menuconfig關鍵字的菜單名自身可配置,menu關鍵字的菜單名不可配置。
如下圖,menu關鍵字之后是USB HID support菜單名。
source
source用于引用讀取其他目錄中Kconfig文件,如:
menu " Device Drivers "
source " drivers/amba/Kconfig "
source " drivers/base/Kconfig "
source " drivers/bus/Kconfig "
source " drivers/connector/Kconfig "
source " drivers/mtd/Kconfig "
source " drivers/of/Kconfig "
source " drivers/parport / Kconfig "
source " drivers/pnp/Kconfig "
source " drivers/block/Kconfig "