Linux内核中的Kconfig用法与说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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的基本语法。
程序清单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,
子菜单也可同时设置类型,如下列代码在定义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 --->
说明:子菜单的配置值会影响其子选项的可能值。例如三态子菜单配置为
默认值:有写选项可以设置默认值,无论是哪种类型,都可以通过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中可以这么使用: