嵌入式linux之kconfig語法解析
kconfig?什么是kconfig呢,就是執(zhí)行make menuconfig的時候出來的那個配置界面的編譯語言;linux編譯是這樣的make?menuconfig--->生成XXX_deconfig,make XXX_deconfig最終會生成.config,然后內核或者boot會根據(jù).config里面的配置項去選擇相應的模塊進行編譯
????語法1:mainmenu--主菜單,就是剛剛執(zhí)行make?menuconfig看到的主界面
mainmenu "U-Boot $UBOOTVERSION Configuration"定義了主菜單的名字

語法2:menu生成菜單條目/endmenu菜單條目結束
條目一
menu "General setup"
????config?config LOCALVERSION
。。。。。
endmenu
條目二
menu "Boot images"
????config SUPPORT_SPL
。。。。。。
endmenu

語法3:config? 條目??
config 后面配置的就是config條目,后面.config里面的配置項就是根據(jù)這個
配置項名字加上“CONFIG_”前綴
config CC_OPTIMIZE_FOR_SIZE
bool "Optimize for size"
default y
help
? Enabling this option will pass "-Os" instead of "-O2" to gcc
? resulting in a smaller U-Boot image.
? This option is enabled by default for U-Boot.
例如此處的配置項,生成后在.config里面就變成CONFIG_CC_OPTIMIZE_FOR_SIZE? y
bool 是類型,總攻有bool、tristate、string、hex 和 int,5種類型,最常用的是 bool、tristate 和 string 這三種,bool 類型有兩種值:y 和 n,當為 y 的時候表示使能這個配置項,當為 n 的時候就禁止這個配置項。tristate 類型有三種值:y、m 和 n,其中 y 和 n 的涵義與 bool 類型一樣,m 表示將這個配置項編譯為模塊。string 為字符串類型
“default y”表示 CONFIG_CC_OPTIMIZE_FOR_SIZE??的默認值就是 y
help 表示幫助信息,告訴我們配置項的含義
語法4:depends on 和 和 select
config SYS_GENERIC_BOARD
????bool
?????depends on HAVE_GENERIC_BOARD
, “depends on”說明“SYS_GENERIC_BOARD”項依賴于“HAVE_GENERIC_BOARD”,
也就是說“HAVE_GENERIC_BOARD”被選中以后“SYS_GENERIC_BOARD”才能被選中。
bool "ARM architecture"
select CREATE_ARCH_SYMLINK
select HAVE_PRIVATE_LIBGCC if !ARM64
select HAVE_GENERIC_BOARD
select SYS_GENERIC_BOARD
select SUPPORT_OF_CONTROL
“select”表示方向依賴,當選中“ARM”以后,后面select 的選項也會被選擇
語法5:choice/endchoice
代碼段定義了一組可選擇項,將多個類似的配置項組合在一起,類似于menu
語法6:menuconfig
menuconfig MODULES
?bool "菜單"
?if MODULES
。。。。。。
?endif # MODULES
主要看這個if
MODULES這個條目需要選中,if里面的條目才能被選擇
語法7:comment
comment "Generic NAND options"這一條只是用來注釋

語法8:source
source 用于讀取另一個 Kconfig,比如:
source "arch/Kconfig"
最后記住Kconfig 文件的最終目的就是在.config 文件中生成以“CONFIG_”開頭的變量