linux Kconfig语法

内核配置脚本文件的语法也比较简单,主要包括如下几个方面。
(1)配置选项
大多数内核配置选项都对应Kconfig中的一个配置选项(config):
config MODVERSIONS
bool "Module versioning support"
help
Usually, you have to use modules compiled with your kernel.
Saying Y here makes it ...
“config”关键字定义新的配置选项,之后的几行代码定义了该配置选项的属性。配置选项的属性包括
类型、数据范围、输入提示、依赖关系、选择关系及帮助信息、默认值等。

·每个配置选项都必须指定类型,类型包括bool、tristate、string、hex和int,其中tristate和string是两种
基本类型,其他类型都基于这两种基本类型。类型定义后可以紧跟输入提示,下面两段脚本是等价的:
bool “Networking support”

bool
prompt "Networking support"

·输入提示的一般格式为:
prompt <prompt> [if <expr>]
其中,可选的if用来表示该提示的依赖关系。

·默认值的格式为:
default <expr> [if <expr>]
如果用户不设置对应的选项,配置选项的值就是默认值。

·依赖关系的格式为:
depends on(或者requires) <expr>
如果定义了多重依赖关系,它们之间用“&&”间隔。依赖关系也可以应用到该菜单中所有的其他选项
(同样接受if表达式)内,下面两段脚本是等价的:
bool "foo" if BAR
default y if BAR

depends on BAR
bool "foo"
default y

·选择关系(也称为反向依赖关系)的格式为:
select <symbol> [if <expr>]
A如果选择了B,则在A被选中的情况下,B自动被选中。

·数据范围的格式为:
range <symbol> <symbol> [if <expr>]

·Kconfig中的expr(表达式)定义为:
<expr> ::= <symbol>
<symbol> '=' <symbol>
<symbol> '!=' <symbol>
'(' <expr> ')'
'!' <expr>
<expr> '&&' <expr>
<expr> '||' <expr>
也就是说,expr是由symbol、两个symbol相等、两个symbol不等以及expr的赋值、非、与或运算构
成。而symbol分为两类,一类是由菜单入口配置选项定义的非常数symbol,另一类是作为expr组成部分的
常数symbol。比如,SHDMA_R8A73A4是一个布尔配置选项,表达式“ARCH_R8A73A4&&SH_DMAE!
=n”暗示只有当ARCH_R8A73A4被选中且SH_DMAE没有被选中的时候,才可能出现这个
SHDMA_R8A73A4。
config SHDMA_R8A73A4
def_bool y
depends on ARCH_R8A73A4 && SH_DMAE != n

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

·帮助信息的格式为:
help(或---help---)
开始

结束
帮助信息完全靠文本缩进识别结束。“---help---”和“help”在作用上没有区别,设计“---help---”的初衷在
于将文件中的配置逻辑与给开发人员的提示分开。

(2)菜单结构
配置选项在菜单树结构中的位置可由两种方法决定。

第一种方式为:
menu "Network device support"
depends on NET
config NETDEVICES

endmenu
所有处于“menu”和“endmenu”之间的配置选项都会成为“Network device support”的子菜单,而且,所有
子菜单(config)选项都会继承父菜单(menu)的依赖关系,比如,“Network device support”对“NET”的依
赖会被加到配置选项NETDEVICES的依赖列表中。
注意:menu后面跟的“Network device support”项仅仅是1个菜单,没有对应真实的配置选项,也不具备
3种不同的状态。这是它和config的区别。

另一种方式是通过分析依赖关系生成菜单结构。如果菜单项在一定程度上依赖于前面的选项,它就能
成为该选项的子菜单。如果父选项为“n”,子选项不可见;如果父选项可见,子选项才可见。例如:
config MODULES
bool "Enable loadable module support"
config MODVERSIONS
bool "Set version information on all module symbols"
depends on MODULES
comment "module support disabled"
depends on !MODULES
MODVERSIONS直接依赖MODULES,只有MODULES不为“n”时,该选项才可见。
除此之外,Kconfig中还可能使用“choices...endchoice”、“comment”、“if...endif”这样的语法结构。其
中“choices...endchoice”的结构为:
choice
<choice options>
<choice block>
endchoice"
它定义一个选择群,其接受的选项(choice options)可以是前面描述的任何属性,例如,LDD6410的
VGA输出分辨率可以是1024×768或者800×600,在drivers/video/samsung/Kconfig中就定义了如下choice:
choice
depends on FB_S3C_VGA
prompt "Select VGA Resolution for S3C Framebuffer"
default FB_S3C_VGA_1024_768
config FB_S3C_VGA_1024_768
bool "1024*768@60Hz"
---help---
TBA
config FB_S3C_VGA_640_480
bool "640*480@60Hz"
---help---
TBA
endchoice
上述例子中,prompt配合choice起到提示作用。

用Kconfig配置脚本和Makefile脚本编写的更详细信息,可以分别参见内核文档Documentation目录内的
kbuild子目录下的Kconfig-language.txt和Makefiles.txt文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值