嵌入式linux之kconfig语法解析
kconfig?什么是kconfig呢,就是执行make menuconfig的时候出来的那个配置界面的编译语言;linux编译是这样的make menuconfig--->生成XXX_deconfig,make XXX_deconfig最终会生成.config,然后内核或者boot会根据.config里面的配置项去选择相应的模块进行编译
语法1:mainmenu--主菜单,就是刚刚执行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里面的配置项就是根据这个
配置项名字加上“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_”开头的变量