kconfig语法详解

作者:fly 发布于:2016-12-7 10:01 分类:Linux

www.forwhat.cn

source 关键字:


用法:source <filename>


这个关键字相当于C语言里的“include”关键字,source后面跟一个文件名,相当于把该文件的内容复制到当前位置。下面是源码目录的arch/arm目录下Kconfig文件的部分内容。

1348741528_9694.JPG


通过这种source引用,可以引入很多其他子目录中的Kconfig文件,而且引入的Kconfig文件中,还可以继续通过source来引入下一级的Kconfig文件。这样的结构就可以将所有的Kconfig文件包含进来。


一个菜单项(或叫配置项)的基本组成:config、bool(tristate)、default、prompt、help

一个简单的菜单项:

1348744157_6406.JPG



其中,config关键字表示新定义一个菜单项,后面跟的是这个菜单项的名字(ARCH_IXP23XX)。bool标识这个菜单项是bool类型,也就是这一项只能有两个值Y和N,此外还有一种最常用的类型,tristate三态型,这种类型的可以有三个值,Y/M/N,这三个值的意义在(上)篇中已经说过了。后面的“IXP23XX-based”是这个菜单项的描述,就是在make menuconfig时我们能看到的,如下图:


1348744730_7079.JPG


在菜单列表里我们并看不到一个菜单项的名字,而只能看到它的描述,因为看它的描述更便于我们理解这个菜单项的意义,方便我们配置。关于菜单项的描述,还有一个prompt关键字,举例说明其用法。比如下面两段是等效的

----------------------------------

CONFIG MY_MENU

bool

prompt "this is my menu"

----------------------------------

CONFIG MY_MENU

bool "this is my menu"

----------------------------------

就是说,一个菜单项的描述,可以直接跟在其类型(bool)的后面来进行声明,也可以由prompt关键字声明。

关于default关键字,截图中并未出现,但也是很常用的,它表明一个菜单项的默认值。如

default y

在进入菜单列表时,可以发现很多菜单项都有默认值,这些默认值就是通过Kconfig文件里的default定义的。

还有一个help关键字,help关键字后面的内容是帮助信息,就是我们点击右下角的heip时显示的关于这个菜单项的帮助信息。下面是关于上图所示的菜单项的帮助信息:


1348745771_7967.JPG


菜单项间的依赖关系:select和depends on

还拿上面的例子来说明,第三行"depends on MMU"。这一行是说,现在定义的"ARCH_IXP23XX"这个菜单项的值(Y/N)依赖于MMU这个菜单项的值。当MMU这个菜单项为N时,ARCH_IXP23XX只能为N。ARCH_IXP23XX的值必须“小于”MMU的值。(对于bool型,Y>N;对于tristate型,Y>M>N)。

select关键字的作用恰与depends on相反,它描述了一个反依赖的关系。以第五行"select PCI"为例,PCI的值依赖于ARCH_IXP23XX。在定义PCI这个菜单项时,也要加上这样一句:"depends on ARCH_IXP23XX"。

根据各菜单项之间的依赖关系,在make menuconfig时,系统会自动将这些相关联的菜单项整理成菜单项与子菜单项的形式,如下图


1348747003_5128.JPG

1348747253_7209.JPG


第二张图中的菜单项都依赖于"Enable the block layer"对应的菜单项,所以系统将它们整理成子菜单项。只有"Enable the block layer"对应的菜单项不为N时,这些子菜单项才可以配置。


menu与endmenu关键字

这个关键字主要是为了给菜单项分组,使菜单结构看起来更有条理。menu用来定义一个子菜单,这个子菜单里包括一些相关的菜单项,在menu和endmenu关键字之间定义的菜单项都属于这个子菜单。还以那上面两张图为例,"Enable the block layer----->"菜单项下面的"system type--->"就是一个子菜单的名称。将这个子菜单展开就可以看到这个子菜单包含的菜单项了。


menu "System type"

config ……

…………

config……

…………

config………

…………

…………

endmenu

这里再额外解释一下,在上面的图中,"Enable the block layer--->"和"system type-->",这两个虽然看起来很像,都可以展开,但其性质是不同的。前者是根据各菜单项间的依赖关系建立起来的,"Enable the block layer"本身就对应一个菜单项或者说配置项,它也有自己的值(Y/M/N),而"system type"则只是一个子菜单的名称,它下面包含了一些相关的配置项,但他本身不对应某个配置项,因而没有值(所以菜单列表中"system type--->"的前面没有*或M这些符号)。


choices与endchoice关键字

跟menu与endmenu用法基本一样,唯一的区别在于,choices定义的“子菜单”(应该叫选项表)中的多个菜单项只能有一个被选中,相当于menu定义一个可多选的子菜单,choices定义一个单选的子菜单。篇幅限制,不再截图详述。

if与endif关键字

这两个真心不用解释,原谅我直接略过。


comment关键字

用来在菜单列表中插入一行文字,也是为了优化菜单结构。

1348749571_7901.JPG



如上图中的第四、五行,就是通过  comment "Processor Type"  和 comment "Processor Features"插入的。这两行既不能展开,也不能被配置,他们只是为菜单列表分段的一行文字。


发表评论:

 
Powered by emlog sitemap