1 Kconfig格式

菜单入口 "菜单入口名"[依赖][反向依赖][引入其它Kconfig文件]... ...[帮助]配置项 symbol值类型[输入提示][默认值][依赖][反向依赖]... ...[帮助]

2 属性

bool/tristate/int/hex/string

值类型,只有配置选项有值类型。包括: bool——值为y或n、 tristate——值为y或m或n、string——值为字符串、int——值为十进制整数、 hex——值为十六进制整数

prompt "提示字符串" [if <expr>]

输入提示:每个菜单入口最多只能有一个展示给用户看的输入提示,可以使用“if”来表示输入提示的依赖性,这个依赖性是可选的。

default <expr> [if <expr>] 

默认值:一个配置选项可以有任意多个默认值,但只有第一个有效的。当输入提示是可见时,才能看到默认值,并且可以输入一个值将默认值覆盖。与输入提示一样,可以使用“if”来表示默认值的依赖性,这个依赖性是可选的。

def_bool/def_tristate <expr> ["if" <expr>] 

值类型+默认值:说明值类型时同时说明默认值。可以使用“if”来表示默认值的依赖性,这个依赖性是可选的。

requires(或depends on)<expr>,

依赖: 依赖项给菜单入口或配置项定义了一个依赖规则,只有当expr为真或被选中时,该菜单入口或配置项才有效,依赖对菜单入口或配置项中的其它属性都有效。

select <symbol> ["if" <expr>] 

反向依赖:当前配置项被选中时,选中symbol,忽略依赖项和手动设置值。只有boolean和tristate类型的symbol可以使用反向依赖。

imply <symbol> [if <expr>] 

弱反向依赖:当前配置项被选中时,选中symbol,但是symbol仍然可由依赖或者手动配置为n。

range <value1> <value2> ["if"<expr>],

值范围:限定int和hex类型symbol的输入值。用户只能输入一个大于等于第一个symbol的值,并且小于等于第二个symbol的值。

visible if <expr> 

只能用于menu/endmenu中,当expr为真时菜单可见。

---help---/help 

帮助:定义了一个帮助文本。帮助文本的结尾是根据缩进级别来决定的,这就意味着如果帮助文本中某一行相对于第一行有更小的缩进,那么这一行就是帮助文档的最后一行。”—help—”和“help”在使用功能上没有区别,”—help—”是用来作为对开发者的一种提示,它显式区别于文档中的配置选项“help”。

option <symbol>[=<value>] 

其它属性:各种不常见的选项的通过这个选项来定义,比如修改菜单入口的行为和配置symbol。下面这些配置当前是允许的:

defconfig_list 
        定义了一系列默认入口,当使用默认配置时可以从这里寻找(当主.config文件不存在时会使用默认配置)
        modules 
        声明了一个symbol将被当做MODULES symbol,MODULES symbol是所有配置symbol的第三种模块化状态。
       env=<value>, 
       导入了一个环境变量到Kconfig中。环境变量就像是Kconfig中的一个默认值,但是它是从外部环境中导入的。正因为它从外           部环境导入,所以赋值的这个时候它相对于正常的默认值来说是没有定义的。这个symbol当前没有导出到构建环境中(如果         想要这样的话,可以通过另一个symbol导出)
       allnoconfig_y 
       声明symol默认值为y。
补充:

值类型后可以紧跟一个输入提示(也可以单独使用一个提示属性),所以下面的这两个例子是等价的:

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

依赖对菜单入口中的其它属性都有效,下面两种写法是等价的

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

并非每个菜单入口或者配置项都具有所有的属性。

限制一个配置项只能编译为模块或不选择。

config FOOdependson m

限制一个配置项只能编译或模块化

config FOOtristate "foo"select FOO if mdefault m

如果一个配置项只有值类型属性,则它的选中只能通过其他配置项的select属性

3 表达式expr

<expr> ::= <symbol>                             (1)<symbol> '=' <symbol>                (2)<symbol> '!=' <symbol>               (3)<symbol1> '<' <symbol2>              (4)<symbol1> '>' <symbol2>              (4)<symbol1> '<=' <symbol2>             (4)<symbol1> '>=' <symbol2>             (4)'(' <expr> ')'                       (5)'!' <expr>                           (6)<expr> '&&' <expr>                   (7)<expr> '||' <expr>                   (8)

表达式以降序的顺序排列在下面。

1.将一个symbol转换成表达式。Bool和tristate symbol简单地转换成相应的表达式值。其它类型的symbol就转换成‘n’。
        2.如果两个symbol的值相等,就返回‘y’,否则返回‘n’。
        3.如果两个symbol的值不相等,就返回‘n’,否则返回‘y’。
        4.如果symbol1的值小于、大于、小于等于、大于等于symbol2的值返回y,否则返回n。
        5.返回表达式的值。用来覆盖之前的值
        6.返回(2-表达式的值)
        7.返回min(expr,expr2)
        8.返回max(expr,expr2)
一个表达式的值可以是’n’,’m’或’y’(或者相对于0,1,2)。当表达式的值是m或者y的时候,菜单入口就是可见的。

存在两种类型的symbol:常数symbol和非常数symbol。非常数symbol是最常见的一类symbol,定义的时候使用‘config’来声明。非常数symbol由字母和下划线组成。

常数symbol只是表达式的一部分。常数symbol通常被单引号或者双引号包围着。在引号中,任何字母都是允许的,并且可以使用‘\’进行转义。

4 菜单入口

主菜单——最顶层的菜单

mainmenu "主菜单名字"

多选菜单——带配置项但本身不可配置。它的属性只能是依赖项和可见性。

menu "string"... ...
endmenu 

可选菜单——带配置项且本身是配置项。配置关键字前面添加CONFIG_后就构成了“.config”文件中的配置项名字。

menuconfig 配置关键字... ...

config——配置项,配置关键字前面添加CONFIG_后就构成了“.config”文件中的配置项名字,但不是配置界面显示的字符,配置界面显示的是提示字符。

config 配置关键字... ...

单选菜单,单选菜单只能是bool类型或tristate类型 ,并且布尔选择只允许一个单一的配置项被选中,三态选择还允许任何配置项被设置为“M”。这可以用在下面的情况:如果一个硬件存在多个驱动程序,并且只有一个驱动程序可以编译/加载到内核中,但所有的驱动程序可以编译成模块。

 choice... ...endchoice

注释,这定义了一条在用户配置过程中显示的注释,同时会写入导出文件。它的属性只有依赖项。

comment

条件——当expr为真或选中时,中间的内容才有效。

if <expr>... ...
endif

引入其他Kconfig文件,方便菜单嵌套。

source "...dir/Kconfig"

5 菜单结构

一种是使用了菜单入口明确指定,如下中所有位于“menu”…和“endmenu”之间的入口都是”Network device support”的一个子菜单入口。所有的子入口都继承了菜单入口的依赖项,例如,依赖项”NET”就会被加入到子菜单”NETDEVICESx”的依赖项列表中。

menu "Network device support"depends on NETconfig NETDEVICES1...config NETDEVICES2... menuconfig NETDEVICES3...config NETDEVICES1...config NETDEVICES2...
endmenu

另外一种生成菜单结构的方法是通过分析依赖项。如果一个菜单入口依赖依赖于前一个入口,那么它就是前一个入口的一个子菜单。首先,之前的(父)symbol一定位于子入口的依赖列表中,其次,下面两个条件中有一个必须是真的: 
子入口必须是不可见的,当父symbol被设置成’n’
子入口必须是可见的,当父菜单是可见的

config MODULESbool"Enable loadable module support"
config MODVERSIONSbool"Set version information on all module symbols"dependson MODULES
comment "module support disabled"dependson !MODULES

linux内核Kconfig语法相关推荐

  1. linux内核kconfig objs,linux内核中Kconfig和Makefile 详解

    内核源码树的目录下都有两个文档 Kconfig (2.4版本是Config.in)和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录 ...

  2. 内核kconfig语法及原理

    语法 http://www.cnblogs.com/AP0904225/p/5967979.html 目前自己用过 一.菜单 menu "desc" endmenu 二.可配菜单 ...

  3. Linux 内核实时补丁 PREEMPT_RT补丁 与 Linux4.1.15 + patch-4.1.15-rt18.patch 补丁,实测实时性差

    Linux4.1.15 + patch-4.1.15-rt18.patch 补丁,实测实时性差 开发环境 发行环境 该环境用于发行 Linux: 4.1.15 preempt_rt: patch-4. ...

  4. Linux内核源码树学习:Kconfig和Makefile

    Linux内核源码树的每个目录下都有两个文档Kconfig和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单 ...

  5. Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

    前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式--在一个独立的文件夹通过makefile配合内核源码路径完成   那么如何将驱动直接编译进内核 ...

  6. Linux内核的Makefile和kconfig解读

    一.概述 在内核编译中如何将各个目录树中的文件组织起来编译是一个很重要的问题,并且要根据用户配置来编译特有的内核.为了解决这个问题,内核使用两种文件,Makefie和Kconfig.分布到各目录的Kc ...

  7. linux驱动基础开发3——linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解-转

    前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式--在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢? ...

  8. 【学习笔记】编译Linux内核(下)---KConfig、Makefile详解以及ARM平台Linux内核的编译

    本文主要介绍Linxu2.6的内核配置系统. 如果你浏览一下源代码目录,就可以发现源码目录及其子目录中有很多的KConfig文件和Makefile文件.这些文件什么作用呢?正是这些文件组成了Linux ...

  9. KConfig、Makefile详解以及ARM平台Linux内核的编译

    本文主要介绍Linxu2.6的内核配置系统. 如果你浏览一下源代码目录,就可以发现源码目录及其子目录中有很多的KConfig文件和Makefile文件.这些文件什么作用呢?正是这些文件组成了Linux ...

最新文章

  1. Linux环境程序栈溢出原理
  2. DataGrid的使用
  3. SQL Server 数据库设计
  4. php 去除中英文空格,php去除字符串首尾中英文空格程序_PHP教程
  5. key-value 多线程server的Linux C++实现
  6. android.net.wifi的简单使用方法
  7. 如何切底卸载Oracle
  8. node之npm一直出错
  9. pytorch ocr_使用PyTorch解决CAPTCHA(不使用OCR)
  10. java wed汽车4s店销售管理系统
  11. 微信android打不开pdf,安卓系统下微信小程序打开pdf文件 没反应
  12. jupyter怎么换背景颜色
  13. 张家界自助游(攻略)介绍!
  14. 从 三江方士 的 中华级数 想到 数学的界限
  15. 【论文笔记】Radatron: Accurate Detection Using Multi-Resolution Cascaded MIMO Radar
  16. Flutter实战开发(2)------实现条形码扫描获取商品信息
  17. 安装jieba库的解决办法及简单使用
  18. matlab中polyadd的意思,关于polyadd
  19. Linux系统中进程的查看及控制
  20. Android从零单排之免费短信验证

热门文章

  1. android qq弹出菜单,Android开发实现qqminihd 左右滑动菜单效果
  2. JS判断视频Video的播放、暂停、结束完成及获取长度事件监听处理
  3. 数仓主题表怎么设计_陶瓷企业展厅设计主题风格怎么确定?
  4. css 文字重叠_html网页文字重叠 字体叠加显示css如何解决
  5. mysql第七章课后答案_mysql核心内幕第七章-查询解析与优化器
  6. android封装方法js调用方法吗,common
  7. mysql性能仪表盘_mysql-笔记-性能
  8. 深度linux magento,linux下安装magento
  9. java 策略模式 促销_java设计模式——策略模式
  10. 操作系统之计算机系统概述:4、操作系统的运行机制(内核态用户态、特权指令非特权指令、内核程序应用程序)