背景:

  上篇文章《添加自己的驱动程序到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"

Kconfig语法简介的更多相关文章

  1. freemarker语法简介

    ftl是一种模板标记语言,用于渲染数据,输入html结构.语法简介如下: ${book.name} ${book.name?if_exists} //值是否存在 ${book.name??} //值是 ...

  2. Android系统Recovery工作原理之使用update.zip升级过程---updater-script脚本语法简介以及执行流程(转)

    目前update-script脚本格式是edify,其与amend有何区别,暂不讨论,我们只分析其中主要的语法,以及脚本的流程控制. 一.update-script脚本语法简介: 我们顺着所生成的脚本 ...

  3. protobuf语法简介2

    protobuf语法简介2 1.optional的字段和默认值 如上所述,消息描述中的一个元素可以被标记为"可选的"(optional).一个格式良好的消息可以包含0个或一个opt ...

  4. protobuf 语法简介

    protobuf 语法简介 1.基本语义 在.proto文件中,最基本的数据类型为message,如其定义所示,由message引导,之后是message类型的名字,之后是由{}包含的各个域(fiel ...

  5. ROS Learning-032 (提高篇-010 Launch)Launch 深入研究 --- (启动文件编程)ROS 的 XML语法简介

    ROS 提高篇 之 Launch 深入研究 - 01 - 启动文件的编程 - ROS 的 XML语法简介 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubu ...

  6. ES6常用语法简介import export

    ES6常用语法简介import export let与var用法区别 //var var a = []; for (var i = 0; i < 10; i++) { a[i] = functi ...

  7. Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7465603       Android系统Recovery工作原理之使用update.zip ...

  8. 【ABAP系列】SAP ABAP7.40新语法简介第一篇

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP7.40新语法简 ...

  9. 【ABAP系列】SAP ABAP7.40新语法简介第二篇

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP7.40新语法简 ...

随机推荐

  1. Python读写Excel文件和正则表达式

    Python 读写Excel文件 这里使用的是 xlwt 和 xlrd 这两个excel读写库. #_*_ coding:utf-8 _*_ #__author__='观海云不远' #__date__ ...

  2. 走进JavaWeb技术世界9:Java日志系统的诞生与发展

    本文转自[码农翻身] ## 一个著名的日志系统是怎么设计出来的? # 1前言 Java帝国在诞生之初就提供了集合.线程.IO.网络等常用功能,从C和C++领地那里吸引了大量程序员过来加盟,但是却有意无 ...

  3. github免费私有仓库使用

    本文链接:https://blog.csdn.net/subfate/article/details/86147645github仓库前不久开放了个人私有仓库(原来要收费),个人使用无数量限制.对于想 ...

  4. 基础数据结构 对应 基础api

    <深入理解Redis> mastering redis

  5. SVN分支创建与合并

    SVN分支 一个branch是某个development line(通常是主线也即trunk)的一个拷贝,branch存在的意义在于,在不干扰trunk的情况下,和trunk并行开发,待开发结束后合并 ...

  6. python 混入类MixIn

    写在前面 能把一件事情说的那么清楚明白,感谢廖雪峰的官方网站. 1.为什么要用混入类?(小白入门) 继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能. step1: 回忆一下 ...

  7. PorterDuffXfermode之PorterDuff.Mode.XOR入门学习

    package com.loaderman.customviewdemo.view; import android.content.Context; import android.graphics.* ...

  8. 机器学习 - 算法示例 - Xgboost

    安装 能直接安装就再好不过 pip install xgboost 如果不能就下载之后本地安装 安装包下载地址 这里 想要啥包都有 数据集 pima-indians-diabetes.csv 文件 调 ...

  9. 阶段5 3.微服务项目【学成在线】_day07 课程管理实战_04-新增课程-数据字典

    课程的等级是个单选按钮 2.3 数据字典 2.3.1介绍 在新增课程界面需要选择课程等级.课程状态等,这些信息统一采用数据字典管理的方式. 本项目对一些业务的分类配置信息,比如:课程等级.课程状态.用 ...

  10. java实现https免证书认证

    java实现https免证书认证   解决方法: 1.下载两个包,httpclient-4.2.jar和httpcore-4.2.jar,复制以下代码就可使用. 2.调用类代码: String htt ...