KConfig 语法基础(一)

转自 https://www.jianshu.com/p/aba588d380c2

配置文件描述了菜单选项,每行都是以一关键字开头(除了帮助信息),下一个关键字结束此菜单选项:
1 - config 配置项
2 - menuconfig 带菜单的配置项
3 - choice/endchoice 单选配置项
4 - comment 注释
5 - menu/endmenu 菜单
6 - if/endif 条件判断
7 - source 读取其他配置文件

命令说明
config此关键字定义了一新的配置选项
menuconfig此关键字和前面的关键字很相似,但它在前面的基础上要求所有的子选项作为独立的行显示。
choice/endchoice该关键字定义了一组选择项。
comment这里定义了在配置过程中显示给用户的注释,该注释还将写进输出文件中。格式说明: comment “eg: description content”
menu / endmenu这里定义了一个菜单,所有依赖于此菜单的选项都是它的子选项。
if/endif这里定义了if结构。
source读取其他具体的配置文件,其他配置文件会被解析。

1、菜单选项
每个菜单项都有一个关键字标识,最常见的就是config,一个配置选项定义的形式:

config  MODVERSIONS
   bool  "Set version information on all module symbols"
   depends  MODULES
   help
      Usually, modules have to be recompiled whenever you switch to a new

“config” 为定义了一新的配置选项。下面的几行定义了该配置选项的属性。属性可以是该配置选项的(1)类型,(2)输入提示(input prompt),(3)依赖关系,(4)默认值和,(5)帮助信息。
一个配置选项可以用相同的名字定义多次,但每个定义只能有一个输入提示并且类型还不能冲突。

(1)配置选项的类型:“bool”,“tristate”,“string”,“hex”,“int”
每个config菜单项都要有类型定义

  • bool:布尔类型
  • tristate三态:内建、模块、移除
  • string:字符串
  • hex:十六进制
  • int:整型
    如:bool类型的只能选中或不选中,tristate类型的菜单项多了编译成内核模块的选项等,类型定义可以用输入提示,所以下面的两个例子是等价的:
   bool "Networking support"

   bool
   prompt "Networking support"

每个菜单选项最多只能有一个显示给用户的输入提示。可以用 “if” 来表示该提示的依赖关系输入提示:( “prompt” [“if” ]),当然这是可选的。
(2) 输入提示:
输入提示,举例:

prompt "Networking support"

(3) 依赖关系:“depends on”
为一菜单选项定义依赖关系。如果定义了多个依赖关系,它们之间用 ‘&&’ 间隔。依赖关系也可以应用到该菜单中所有的其它选项。并且depends on与if等价,如下等价:

   bool "foo" if BAR
   default y if BAR

   depends on BAR
   bool "foo"
   default y

(4)默认值:
"default" <expr> ["if" <expr>]
一个配置选项可以有任意多个默认值。如果有多个默认值,那么只有第一个被定义的值是可用的。如果用户没有设置(通过上面的输入提示),配置选项的值就是显示输入也即默认值。如果可以显示输入提示的话,就会把默认值显示给用户,并可以让用户进行修改。
默认值的依赖关系可以用 “if” 添加。(可选项)
(4)帮助信息
"help" or "---help---"
帮助信息的结束就由缩进的水平决定的,这也就意味着信息是在第一个比帮助信息开始行的缩进小的行结束。
“—help—” 和 “help” 在实现的作用上没有区别,“—help—” 有助于将文件中的配置逻辑与给开发人员的提示分开。

2、菜单结构
菜单在树中的位置可由两种方法决定。第一种——直接树状结构:

menu "Network device support"
   depends NET

config NETDEVICES
   ...

endmenu

所有的在"menu" … “endmenu” 之间都是"Network device support"的子菜单。所有的子菜单选项都继承了父菜单的依赖关系,比如,"NET"的依赖关系就被加到了配置选项NETDEVICES的依赖列表中。
第二种_通过分析依赖关系生成菜单的结构:

config MODULES
   bool "Enable loadable module support"

config MODVERSIONS
   bool "Set version information on all module symbols"
   depends MODULES

如果菜单选项在一定程度上依赖于前面的选项,它就能成为该选项的子菜单。前面的(父)选项必须是依赖列表中的一部分并且它们中必须有满足下面两个条件的选项:

  • 如果父选项为’n’,子选项必须不可见。
  • 如果父选项可见,子选项才能可见。

如上面的例子中:MODVERSIONS 直接依赖 MODULES,这就意味着如果MODULES不为’n’,该选项才可见。换句话说,当MODULES可见时,MODVERSIONS选项才可见(MODULES的(空)依赖关系也是选项依赖关系的一部分)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kconfig文件的语法比较简单,主要由以下几个部分组成: 1. 菜单:用menu关键字定义,表示一个配置菜单,通常包含多个子选项。 2. 子菜单:用menuconfig或config关键字定义,表示一个子菜单,也可以包含多个子选项。 3. 选项:用config关键字定义,表示一个配置选项,通常包括选项名、类型、默认值、帮助信息等。 4. 依赖关系:用depends on关键字定义,表示一个选项的依赖关系,当依赖的选项被选择时,该选项才会被编译进内核。 5. 选项值:用bool、tristate、string、int等关键字定义,表示选项的类型和取值范围。 下面是一个简单的Kconfig文件示例: ``` menu "My Kernel Configuration" config MY_OPTION bool "Enable My Option" default y help This option enables my custom feature. config MY_STRING string "My String Option" default "Hello World" help This option sets my custom string. config MY_INT int "My Integer Option" default 10 help This option sets my custom integer. config MY_DEPENDENCY bool "Enable My Dependency" depends on MY_OPTION default y help This option enables my dependency. endmenu ``` 在该示例中,使用menu定义了一个配置菜单“My Kernel Configuration”,包括了四个选项:MY_OPTION、MY_STRING、MY_INT和MY_DEPENDENCY。其中,MY_OPTION是一个bool类型的选项,表示是否启用自定义功能;MY_STRING是一个string类型的选项,表示自定义字符串;MY_INT是一个int类型的选项,表示自定义整数;MY_DEPENDENCY是一个bool类型的选项,表示是否启用依赖项MY_OPTION。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值