Linux Kbuild文档 2

2. Kconfig

linux在2.6版本以后将配置文件由原来的config.in改为Kconfig,对于Kconfig的语法在内核源代码/Documentation/kbuild/kconfig-language.txt中做了详细的说明。

2.1 Kconfig的树状关系

Kconfig的配置选项是以树的形式组织的,如下所示所示:

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

arch/$(ARCH)/Kconfig文件是主Kconfig文件,跟体系结构有关系。主Kconfig文件调用其他目录的Kconfig文件,其他的Kconfig文件又调用各级子目录的配置文件,成树状关系。

2.2菜单选项

多数选项定义了一个配置选项,其它选项起辅助组织作用。一个配置选项定义可以是下面的形式:

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

2.3菜单属性

一个菜单选项可以有多个属性,这些属性受到语法的限制。每个配置选项都必须指定类型。类型定义包括:"bool"、"tristate"、"string"、"hex"、"int"共五种。其中有两个基本类型:tristate 和 string,其他类型都是基于这两个基本类型。内核菜单属性说明表3所示。

表3 内核菜单属性说明

属性

语法

说明

输入提示

"prompt" <prompt>

["if" <expr>]

每个菜单选项最多只能有一个显示给用户的输入提示。可以用"if" 来表示该提示的依赖关系,当然这是可选的。

默认值

"default" <expr>

["if" <expr>]

一个配置选项可以有任意多个默认值。如果有多个默认值,那么只有第一个被定义的值是可用的。默认值并不是只限于应用在定义他们的菜单选项。这就意味着默认值可以定义在任何地方或被更早的定义覆盖。如果用户没有设置(通过上面的输入提示),配置选项的值就是默认值。如果可以显示输入提示的话,就会把默认值显示给用户,并可以让用户进行修改。默认值的依赖关系可以用 "if" 添加。

依赖关系

"depends on"

/"requires" <expr>

为一菜单选项定义依赖关系。如果定义了多个依赖关系,它们之间用 '&&' 间隔。依赖关系也可以应用到该菜单中所有的其它选项(同样接受一if表达式)。

反向依赖关系

"select" <symbol>

["if" <expr>]

尽管普通的依赖关系可以降低一选项的上限,反向依赖能将这一限制降的更低。当前菜单选项的值是symbol的最小值。如果symbol被选择了多次,上限就是其中的最大值。反向依赖只能用在 boolean 或 tristate 选项上。

数据范围

"range" <symbol>

<symbol>

["if" <expr>]

为int和hex类型的选项设置可以接受输入值范围。用户只能输入大于等于第一个symbol,小于等于第二个symbol的值。

帮助信息

"help"

or

"---help---"

定义一帮助信息。帮助信息的结束就由缩进的水平决定的,这也就意味着信息是在第一个比帮助信息开始行的缩进小的行结束。"---help---" 和 "help" 在实现的作用上没有区别,"---help---" 有助于将文件中的配置逻辑与给开发人员的提示分开。

2.4菜单依赖关系

依赖关系决定了菜单选项是否可见,也可以减少tristate的输入范围。tristate逻辑比boolean逻辑在表达式中用更多的状态(state)来表示模块的状态。依赖关系表达式的语法如表4所示,表达式是以优先级的降序列出的。

表4 菜单依赖关系语法说明

表达式

结果说明

<expr> ::= <symbol>

将symbol赋给表达式。boolean和tristate类型的symbol直接赋给表达式。所有其它类型的symbol都赋 'n'。

<symbol> '=' <symbol>

如果两个symbol相等,返回'y',否则为'n'。

<symbol> '!=' <symbol>

如果两个symbol相等,返回'n',否则为'y'。

'(' <expr> ')'

返回表达式的值。用于改变优先级。

'!' <expr>

返回 (2-/expr/) 的结果。

<expr> '&&' <expr>

返回 min(/expr/,/expr/) 的结果。

<expr> '||' <expr>

返回 max(/expr/,/expr/) 的结果。

一个表达式的值可以是'n','m'或'y'(或者是计算的结果 0,1,2)。当表达式的值为'm'或'y'的时候,菜单项才是可见的。

symbol有两种类型:不可变的和可变的。不可变的symbol是最普通的,由'config'语句定义,完全由数字、字母和下划线组成(alphanumeric characters or underscores)。

不可变的symbol只是表达式的一部分。经常用单引号或双引号括起来。在引号中,可以使用任何字符,使用引号要用转义字符'\'。

2.5菜单结构

菜单在树中的位置可由两种方法决定。

第一种可以是这样:

所有的在"menu" ... "endmenu" 之间都是"Network device support"的子菜单。所有的子菜单选项都继承了父菜单的依赖关系,比如,"NET"的依赖关系就被加到了配置选项NETDEVICES的依赖列表中。

第二种是通过分析依赖关系生成菜单的结构。如果菜单选项在一定程度上依赖于前面的选项,它就能成为该选项的子菜单。首先,前面的(父)选项必须是依赖列表中的一部分并且它们中必须有满足下面两个条件的选项:如果父选项为'n',子选项必须不可见;如果父选项可见,子选项才能可见。

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

2.6 Kconfig语法

配置文件描述了菜单选项,每行都是以一关键字开头(除了帮助信息)。菜单的关键字如表5所示。其中菜单开头的关键字有:config、menuconfig、choice/endchoice、comment、menu/endmenu。它们也可以结束一个菜单选项,另外还有if/endif、source也可以结束菜单选项。

表5 Kconfig菜单关键字说明

关键字

语法

说明

config

"config" <symbol>

<config options>

定义了一配置选项 <symbol> 并且可以接受任何前面介绍的属性。

menuconfig

"menuconfig" <symbol>

<config options>

此关键字和前面的关键字很相似,但它在前面的基础上要求所有的子选项作为独立的行显示。

choices

"choice"

<choice options>

<choice block>

"endchoice"

该关键字定义了一组选择项,并且选项可以是前面描述的任何属性。尽管boolean只允许选择一个配置选项,tristate可以抒多个配置选项设为'm',但选项只能是boolean或tristate类型。这可以在一个硬件有多个驱动的情况下使用,最终只有一个驱动被编译进/加载到内核,,但所有的驱动都可以编译成模块。选项可以接受的另一个选项是"optional",这样选项就被设置为'n',没有被选中的。

comment

"comment" <prompt>

<comment options>

这定义了在配置过程中显示给用户的注释,该注释还将写进输出文件中。唯一可用的可选项是依赖关系。

menu

"menu" <prompt>

<menu options>

<menu block>

"endmenu"

这里定义了一个菜单,详细信息请看前面的"菜单结构"。唯一可用的可选项是依赖关系。

if

"if" <expr>

<if block>

"endif"

这里定义了if结构。依赖关系<expr>被加到所有在if ... endif 中的菜单选项中。

source

“source” <prompt>

读取指定的配置文件。读取的文件也会解析生成菜单。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php upw5.5,UPW

PHP EngineerResponsibilities:●Analysis and module design of software system&#xff1b;●Development and design of new products, and be able to write the core module code independently&#xff1b;●Responsible for the maintenance and upgrading of existing…

cocos2d对动画的各种操作

关于动画的各种操作&#xff0c;总结一下以便以后复习查找。 内容简要: 1、瞬时动作2、延时动作 3、 组合动作 4、动画 5、速度变化6、函数调用7、创建动作动画8、控制动画帧的速度 原文地址&#xff1a; http://blog.csdn.net/dingkun520wy/article/details/7014233 --…

matlab的灰色关联,五种灰色关联度分析matlab代码

《五种灰色关联度分析matlab代码》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《五种灰色关联度分析matlab代码(3页珍藏版)》请在人人文库网上搜索。1、灰色邓关联分析% p12-the study on the grey relational degree and its applicationFunction R1gld_deng(x)ssi…

Linux Kbuild文档 3

3. Kbuild Makefile Linux内核源代码是通过Makefile组织编译的&#xff0c;Linux2.6内核Makefile的许多特性和2.4内核差别很大&#xff0c;在内核目录的documention/kbuild/makefiles.txt中有详细的说明。 3.1 Makefile的组织结构 Linux内核的Makefile分为5个部分&#xff0…

SQL求解两个时间差

sql 求解两个时间差SELECTDATEDIFF( Second, 2009-8-25 12:15:12, 2009-9-1 7:18:20) --返回相差秒数SELECTDATEDIFF( Minute, 2009-9-1 6:15:12, 2009-9-1 7:18:20) --返回相差分钟数 SELECTDATEDIFF( Day, 2009-8-25 12:15:12,2009-9-1 7:18:20)--返回相差的天数SELEC…

matlab如何画一个平面,matlab 画平面

&period;framework使用注意、静态库配置及构架合成使用注意: 1.项目中使用的framework中包含了资源文件时,需要手动添加该framework中的资源文件 2.由于动态库(framework默认生成为动态库)不能上架,我们在生成的时候需要修改为 ...spring加载hibernate映射文件的几种方式 &…

Linux Kbuild文档 4

4. 一个使用linux kbuild实现可配置编译的例子 我编写了一个使用Linux kbuild机制实现可配置编译的小例子&#xff0c;工程名为print-example。包括如下如下几个目录&#xff1a; 其中scripts、Makefile、Makefile.flags是从busybox-1.9.0复制过来的。 4.1 运行print 运行m…

php标准输出重定向,python标准输出重定向方式

一. 背景在Python中&#xff0c;文件对象sys.stdin、sys.stdout和sys.stderr分别对应解释器的标准输入、标准输出和标准出错流。在程序启动时&#xff0c;这些对象的初值由sys.__stdin__、sys.__stdout__和sys.__stderr__保存&#xff0c;以便用于收尾(finalization)时恢复标准…

C# 温故而知新:Stream篇(六)

C# 温故而知新&#xff1a;Stream篇&#xff08;六&#xff09; BufferedStream 目录&#xff1a; 简单介绍一下BufferedStream如何理解缓冲区&#xff1f;BufferedStream的优势从BufferedStream 中学习装饰模式    如何理解装饰模式    再次理解下装饰模式在Stream中的…

Linux内核的Makefile和kconfig解读

一、概述 在内核编译中如何将各个目录树中的文件组织起来编译是一个很重要的问题&#xff0c;并且要根据用户配置来编译特有的内核。为了解决这个问题&#xff0c;内核使用两种文件&#xff0c;Makefie和Kconfig。分布到各目录的Kconfig构成了一个分布式的内核配置数据库&#…

网页快照

C#生成网站网页快照&#xff0c;Html转成图片2012-04-09 22:29HtmlToImg.cs using System; using System.Drawing; using System.Threading; using System.Windows.Forms; /// <summary> /// 生成网页快照 /// </summary> publicclassHtmlToImg { Bitmap m_Bitmap;…

php获取网页输出,PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)_PHP教程

看点&#xff1a;1、file_get_contents超时控制。2、页面编码判断。3、键盘Enter键捕捉响应。4、键盘event兼容处理。//event event || window.event;5、XMLHttpRequest 和 jQuery 两种实现方案。6、页面及源码同时展示。XMLHttpRequest版本 get_web.php复制代码 代码如下:hea…

HDU 3306 Another kind of Fibonacci

题意&#xff1a;A(0) 1 , A(1) 1 , A(N) X * A(N - 1) Y * A(N - 2) (N > 2)&#xff1b;给定三个值N&#xff0c;X&#xff0c;Y求S(N):S(N) A(0)2 A(1)2……A(n)2。 思路&#xff1a;原来我们讲的斐波那契数列是&#xff1a; F(0) 1, F(1) 1, F(N) F(N - 1) F(N…

php中拼接html代码,如何利用ajax给html动态拼接代码

function get_all_category_with_id() {$.ajax( {type: "get", url: "../../../appUpload/getAllCategoryByid", async : false, dataType: "text", success: function (data) {var obj JSON.parse(data);var str "";//先将元素对应清…

Arm Linux交叉编译和连接过程分析(1)

一、配置内核&#xff08;Kconfig&#xff09; 我们配置内核是实质是根据众多目录下面的Kconfig文件中组合成我们需要的一个最佳选择&#xff0c;即最终在根目录下面生成的.config文件&#xff0c;而这个文件会在根目录Makefile下调用的。这一部分我们主要讨论整个SEP4020体系…

struts2标签_select获取action传过来的值

<s:select list"#session.userlist" //从Action传过来的键(属性)的名称headerKey"请选择" //默认选中项的值headerValue"请选择" //默认选中项显示的信息listKey"project_id" …

3500 yuan to php,350 CNY to PHP Currency Converter - 人民币 菲律宾比索 汇率兑换

Exchange350 CNY2612.29 PHPExchange 350 人民币2612.29 菲律宾比索Exchange1750 CNY13061.46 PHPExchange 1750 人民币13061.46 菲律宾比索Exchange3500 CNY26122.92 PHPExchange 3500 人民币26122.92 菲律宾比索Exchange17500 CNY130614.62 PHPExchange 17500 人民币130614.6…

Arm Linux交叉编译和连接过程分析(2)

二、编译内核镜像过程 1、编译过程中涉及到到文件&#xff1a; /Makefile 编译产生顶层vmlinux镜像文件/scripts/Kbuild.include make过程中到一些基本定义 /scripts/Makefile.lib 编译内核时用到到函数库文件 /scripts/Makefile.build 内核编译到相关命令文件…

sipxecs简介

SipX和SipExchange的代码于2007年合并成SipXecs&#xff0c;北电和NTT等大公司参与构建SipXecs架构。SipXecs是电信级的&#xff0c;针对统一通信UC和呼叫中心Call Center应用&#xff0c;另外&#xff0c;支持设备批量升级&#xff0c;批量配置管理等应用&#xff0c;网管支持…

ASP.NET数据格式的Format-- DataFormatString

我们在呈现数据的时候&#xff0c;不要将未经修饰过的数据呈现给使用者。例如金额一万元&#xff0c;如果我们直接显示「10000」&#xff0c;可能会导致使用者看成一千或十万&#xff0c;造成使用者阅读数据上的困扰。若我们将一万元润饰后输出为「NT$10,000」&#xff0c;不但…