参考文章:博客
总体原则:每一个 config 就表示一个配置选项的开始,后面紧跟着的 ARCH_AIROHA
是配置选项的名称,config 下面几行定义了该配置选项的属性:如选项名是什么,依赖什么,选中这个后同时会选择什么等等
一、菜单项
eg:
config ARCH_AIROHA
bool "选项名"
depends on ARCH_MULTI_V7
select ARM_AMBA
default n
help
Support for Airoha EN7523 SoCs
config —> 选项。
ARCH_AIROHA —> 句柄,可用于控制Makefile,选择编译方式。
bool —> 选择可能:TRUE选中、FALSE不选;选中则编译,不选中则不编译。如果后面选项名字串为空,则表示其不会出现在选择软件列表中。
depends on —> 依赖,后面的选择被选择后,这个选项才能被选。
select —> 当前选项选中后,则select后指定的选项自动被选择。
default—> 缺省配置项。
help—> 帮助信息。
二、类型定义
bool/tristate/string/hex/int
菜单选项可以有多个属性。并不要求这些属性可以用在任何地方。每个配置选项都必须指定类型。
在5种类型中tristate 和 string 为基本类型,其他类型都是基于这两个基本类型。
- bool:布尔类型:取值范围为Y/N。
config BSP_USING_WDT
bool "Enable Watchdog Timer"
select RT_USING_WDT
default n
-
tristate 三态类型:取值范围为Y/N/M,相较bool类型,tristate类型的菜单项多了编译成内核模块的选项
-
string 字符串:默认菜单选项显示对应字符串。
config RT_CONSOLE_DEVICE_NAME
string "the device name for console"
default "uart1"
- int 整型
config BSP_I2C1_SCL_PIN
int "I2C1 scl pin number"
range 1 176
default 116
- hex 十六进制
prompt: 输入提示
prompt [“if” ]
default: 默认值
一个配置选项可以有任意多个默认值。如果有多个默认值,那么只有第一个被定义的值是可用的
depends on/requires: 依赖关系
select: 反向依赖关系
imply: 弱反向依赖关系
visible if: 选项可见
range: 数据范围
help: 帮助信息
菜单依赖关系
菜单结构关系
一个菜单项在菜单树中的位置是通过两种方式确定的。首先,它可以被明确指定:
menu "Network device support"
depends on NET
config NETDEVICES
...
endmenu
三、KConfig语法
配置文件描述了一系列菜单项,其中每行以关键字开头(帮助文本除外)。下列关键字则作为菜单项结束
- config
- menuconfig
- choice/endchoice
- comment
- menu/endmenu
- if/endif
- source
上述前五项也作为菜单项定义的开始。
config: 配置项
"config" <symbol>
<config options>
menuconfig: 配置菜单块
menuconfig <symbol>
<config options>
choice/endchoice: 选择组
choice [<symbol>]
<choice options>
<choice block>
endchoice
comment: 注释项
"comment" <prompt>
<comment options>
menu/endmenu: 菜单块
"menu" <prompt>
<menu options>
<menu block>
"endmenu"
if/endif: 条件块
"if" <expr>
<if block>
"endif"
source: 读取项
"source" <prompt>
source条目用于读取另一个Kconfig文件。例如:
// /Config.in文件:
menu "Target options"
……………………
endmenu
menu "Build options"
……………………
endmenu
source "toolchain/Config.in"
// /toolchain/Config.in文件:
menu "Toolchain"
……………………
endmenu
mainmenu: 标题栏
"mainmenu" <prompt>
如果配置程序启用,将被显示在配置程序的标题栏。该语句应该被放在配置文件的开头,所有语句之前。例如在buildroot根目录下config.in文件开头定义了该句
#: 注释
除了上述语法,在源文件行任何地方出现一个未加引号的’#'字符,表示该行的其余部分是一段注释。