Kconfig语法简介
背景:
上篇文章《添加自己的驱动程序到Linux内核树中》简单介绍了在Linux内核配置中添加自己的驱动选项。但是仅靠如此简单的配置有时候不能满足我们的要求。
有关概念:
每个选项都有其自己的依赖关系。这些依赖关系决定了选项是否是可见的。父选项可见,子选项才能可见。
单一选项 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"
Kconfig语法简介的更多相关文章
- freemarker语法简介
ftl是一种模板标记语言,用于渲染数据,输入html结构.语法简介如下: ${book.name} ${book.name?if_exists} //值是否存在 ${book.name??} //值是 ...
- Android系统Recovery工作原理之使用update.zip升级过程---updater-script脚本语法简介以及执行流程(转)
目前update-script脚本格式是edify,其与amend有何区别,暂不讨论,我们只分析其中主要的语法,以及脚本的流程控制. 一.update-script脚本语法简介: 我们顺着所生成的脚本 ...
- protobuf语法简介2
protobuf语法简介2 1.optional的字段和默认值 如上所述,消息描述中的一个元素可以被标记为"可选的"(optional).一个格式良好的消息可以包含0个或一个opt ...
- protobuf 语法简介
protobuf 语法简介 1.基本语义 在.proto文件中,最基本的数据类型为message,如其定义所示,由message引导,之后是message类型的名字,之后是由{}包含的各个域(fiel ...
- ROS Learning-032 (提高篇-010 Launch)Launch 深入研究 --- (启动文件编程)ROS 的 XML语法简介
ROS 提高篇 之 Launch 深入研究 - 01 - 启动文件的编程 - ROS 的 XML语法简介 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubu ...
- ES6常用语法简介import export
ES6常用语法简介import export let与var用法区别 //var var a = []; for (var i = 0; i < 10; i++) { a[i] = functi ...
- Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程【转】
本文转载自:http://blog.csdn.net/mu0206mu/article/details/7465603 Android系统Recovery工作原理之使用update.zip ...
- 【ABAP系列】SAP ABAP7.40新语法简介第一篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP7.40新语法简 ...
- 【ABAP系列】SAP ABAP7.40新语法简介第二篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP7.40新语法简 ...
随机推荐
- 为centos7配置阿里yum源遇到的问题以及解决方法
[问题背景] 卸载安装的Ambari,之前都是因为卸载不干净.这次重写安装,卸载完之后,发现httpd无法启动,所以想卸载httpd进行重新安装,但是执行命令yum list | grep httpd ...
- Java项目开发
项目开发整体构建: MVC+DAO设计模式 用面向对象的方式理解和使用数据库,一个数据库对应一个java项目 数据库--项目 表--类 字段--属性 表中的一条数据--类的一个对象 M:模型层 Jav ...
- bash常用的快捷键
bash常用快捷键 快捷键 作用 CTRL+A 把光标移动到命令行开头.如果我们输入的命令过长,则在想要把光标移动到命令行开头时使用 CTRL+E 光标移动到命令行行尾 CTRL+C 强制中止当前命令 ...
- ColorMatrix图片饱和度设置
package com.loaderman.customviewdemo; import android.app.Activity; import android.graphics.Bitmap; i ...
- Linux下设置Tomcat开机自启动
--未验证 第一步:在/etc/init.d下新建一个文件tomcat(需要root操作权限) vi /etc/init.d/tomcat 然后点击"i"写下如下代码,tomcat ...
- php 获得访问者的IP
<?php $user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : ...
- 初始化jsp页面下拉选备选项【我】
将下列 script标签放到页面的最下端 <!-- 初始化的全局变量,供js中使用,主要拼接下拉选的初始化值 --> <script type="text/javascri ...
- JAVA8 JVM内存结构变了,永久代到元空间
在文章<JVM之内存结构详解>中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化.作为面试官如果你还不知道,那么面试过程中是不是有些露怯? ...
- Oracle ORA-00984: column not allowed here
ORA-00984错误: 列在此处不允许当数据以char的形式存在时,应加单引号,则插入数据库就不会出现类似错误.
- (四)Centos之查询目录中内容命名ls
一.查询目录中内容命名ls 1.1 root代表当前登录用户,localhost代表主机名, ~代表当前主机目录,#代表用户权限 #表示超级用户,$表示普通用户: 1.2 查询目录中内容命令 ls ...