Kconfig语法简介

背景:

  上篇文章《添加自己的驱动程序到Linux内核树中》简单介绍了在Linux内核配置中添加自己的驱动选项。但是仅靠如此简单的配置有时候不能满足我们的要求。

Target    :hi3531d

Linux    :Linux-3.18

有关概念

每个选项都有其自己的依赖关系。这些依赖关系决定了选项是否是可见的。父选项可见,子选项才能可见。

单一选项 config
原则:每一个config就是一个选项,最上面跟着控制句柄,下面则是对这个选项的配置,如选项名是什么,依赖什么,选中这个后同时会选择什么。

大多数的选项都定义了一个配置选项,其它选项则有助于对它们进行组织。(Most entries definea config option, all other entries help to organize them.)

一个配置选项定义可以是下面的形式:

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
      kernel. ...

"config" ,配置选项。而它下面的几行定义了该配置选项的属性。

属性可以是该配置选项的类型,输入提示(input prompt),依赖关系,帮助信息和默认值。

配置选项可以用相同的名字定义多次,但每个定义只能有一个输入提示并且类型还不能冲突。

"bool" ,类型定义"bool"/"tristate"/"string"/"hex"/"int"

每个配置选项都必须指定类型。有两个基本类型:tristate 和 string,其他类型都是基于这两个基本类型。

类型定义可以用输入提示,所以下面的两个例子是等价的:

   bool "Networking support"
和
   bool
   prompt "Networking support"

"depends on", 依赖关系"depends on"/"requires" <expr>
为菜单选项定义依赖关系。如果定义了复杂的逻辑依赖关系系,它们之间用 '&&','||','('与')' 间隔。

依赖关系也可以应用到该菜单中所有的其它选项(同样接受一if表达式),所以下面的两个例子是等价的:

   bool "foo" if BAR
   default y if BAR
和
   depends on BAR
   bool "foo"
   default y

**"select", 反向依赖关系,语法为:**"select" <symbol> ["if" <expr>]

反向依赖只能用在 boolean 或 tristate 选项上。

当前选项选中后则select后指定的选项自动被选择。

尽管普通的依赖关系可以降低一选项的上限,反向依赖能将这一限制降的更低。

当前菜单选项的值是symbol的最小值。如果symbol被选择了多次,上限就是其中的最大值。

"default", 默认值"default" <expr> ["if" <expr>]
一个配置选项可以有任意多个默认值。如果有多个默认值,那么只有第一个被定义的值是可用的。

默认值并不是只限于应用在定义他们的菜单选项。这就意味着默认值可以定义在任何地方或被更早的定义覆盖。

如果用户没有设置(通过上面的输入提示),配置选项的值就是默认值。如果可以显示输入提示的话,就会把默认值显示给用户,并可以让用户进行修改。

默认值的依赖关系可以用 "if" 添加。(可选项)

**菜单 menu
**

menu条目用于生成菜单,格式如下:

menu "Floating poing emulation"
        config FPE_NWFPE
        ..............
        config FPE_NWFPE_XP
        .............
endmenu

menu之后的字符串是菜单名,menu和endmenu之间有很多config条目(待会说介绍config条目),在配置界面上会出现如下字样的菜单,移动光标选中它之后按回车进入,就会看到config条目定义的配置选项。

Floating point emulation  --->
           [] FPE_NWFPE
           [] FPE_NWFPE_XP

选择框 choice
choice条目将多个类似的配置选项组合在一起,供用户单选或者多选。

choice
    prompt "arm system type"
    default arch_versatile
config arch_aarc200
    ...
config arch_integrator
    ...
endchoice

prompt后面跟的是提示信息,光标选中它后按回车键进入,就可以看到多个config条目定义的配置选项。
条目中定义的变量类型只能有两种:bool和tristate,不能同时有这两种类型的变量。

对于bool类型的choice条目,只能在多个选项中选择一个;

对于tristate类型的choice条目,要么就把多个选项都设为m;要么就像bool类型的choice条目一样,只能选择一个。

**提示文本 comment
**

comment条目定义了一些帮助信息,它在配置过程中出现在界面的第一行;并且这些帮助信息会出现在配置文件中,格式如下:

comment <prompt>
<comment options>

例如:

menu "floating point emulation"
comment "At least one emultaion must be selected"
...

引入配置 source

source条目用于读入另一个Kconfig文件,格式如下:

source <promt>

例如:

source "net/Kconfig"
posted @ 2019-12-23 15:13  schips  阅读(3979)  评论(0编辑  收藏  举报