Linux内核中的Kconfig用法与说明

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux内核中的Kconfig文件

本节不对内核的Kconfig文件进行深入展开,更多Kconfig语法和说明请阅读

内核源码树每个目录下都还包含一个Kconfig文件,用于描述所在目录源代码相关的内核配置菜单,各个目录的Kconfig文件构成了一个分布式的内核配置数据库。通过make menuconfig(make xconfig或者make gconfig)命令配置内核的时候,从Kconfig文件读取菜单,配置完毕保存到文件名为.config的内核配置文件中,供Makefile文件在编译内核时使用。

1.1.1 Kconfig基本语法

如程序清单0.1所示代码摘自文件,是一个比较典型的Kconfig

文件片段,包含了Kconfig的基本语法。

程序清单0.1drivers/char/Kconfig片段

menu "Character devices"

source "drivers/tty/Kconfig"

config DEVKMEM

bool "/dev/kmem virtual device support"

default y

help

Say Y here if you want to support the /dev/kmem device. The

/dev/kmem device is rarely used, but can be used for certain

kind of kernel debugging operations.

When in doubt, say "N".

……

endmenu

1.子菜单

通过menu和endmenu来定义一个子菜单,程序清单0.1所示代码定义了一个“Character devices”子菜单,子菜单在界面中用“--->”表示,如图0.1所示。

图0.1menu定义的子菜单

子菜单的菜单项则由config来定义,随后的“bool”、“default”、“help”等都是该菜单

项的属性:

config DEVKMEM

bool "/dev/kmem virtual device support"

这两行语句定义了一个bool选项,在.config中的配置变量名称为CONFIG_DEVKMEM,选项提示信息为“/dev/kmem virtual device support”,在内核配置界面的实际表现为:

[*] /dev/kmem virtual device support

由于设置其默认属性default为y,所以该选项默认选中。

help引出帮助信息,在内核配置界面,选择选项后,通过可以查看帮助信息。

2.属性

类型定义:每个菜单项都必须定义类型,可选类型有:bool、tristate、string、hex和int,各类型描述如表0.1所列。

表0.1菜单项类型和说明

定义选项的类型后面可以加菜单信息,用引号(“”)给出,留空则不加提示信息。

对于布尔型选项,在配置界面用[]表示:

[*] /dev/kmem virtual device support

[*]表示选中,对应CONFIG_XXX=y,[ ]则表示未选中。

对于三态选项,在配置界面用<>表示:

<*> Kernel .config support

<*>表示选中,对应CONFIG_XXXx=y,表示编译为模块,对应CONFIG_XXX=m,<>表示未选中。

子菜单也可同时设置类型,如下列代码在定义PWM菜单的同时定义了菜单属性为三态:

menuconfig GENERIC_PWM

tristate "PWM Support"

default n

help

Enables PWM device support implemented via a generic

framework. If unsure, say N.

在配置界面表现为:

<> PWM Support --->

说明:子菜单的配置值会影响其子选项的可能值。例如三态子菜单配置为,则其三态子选项依旧可有3种可能值,即可配置为或者不选中;而三态子菜单配置为,则其子选项只有和不选中两种状态可用。

默认值:有写选项可以设置默认值,无论是哪种类型,都可以通过default设置其默认值,例如:

config ARM

bool

default y

select HA VE_AOUT

选中:前面这个示例的select,表示了一种选中关系,即选中某个选项后,会自动选中某个或者某些选项。前面这个示例表明,选中ARM后,会自动选中HA VE_AOUT。

依赖关系:如果一个选项能否生效与否与其它选项的设置有关,则必须通过depends on 来声明这种依赖关系。例如,只有使能了SMP才能设置CPU个数变量NR_CPUS,在Kconfig 中则写成:

config NR_CPUS

int "Maximum number of CPUs (2-32)"

range 2 32

depends on SMP

default "4"

帮助:通过help关键字引入帮助,帮助的正文必须另起一行。

菜单选项属性的每个关键字,必须用TAB键与行首隔开,不能用等数的空格替代。

3.目录层次迭代

通过source可以直接引用下级目录的Kconfig文件,形成新的菜单项或者子菜单,这样方便每个目录独立管理各自的配置内容。“source "drivers/tty/Kconfig"”就是直接引用

文件,形成更多菜单(项)。

1.1.2 配置项和配置开关

通过config定义的菜单配置项,在内核配置后会产生一个以“CONFIG_”开头的配置开关变量,该开关变量可在Makefile中或者源代码中使用。

例如:“config BAR”将会产生一个开关变量CONFIG_BAR,在Makefile中可以这么使用:

相关文档
最新文档