全部博文(27)
分类: LINUX
2010-06-23 21:46:18
Linux配置选项机制介绍 V0.1 2010/06/23 踏踏实实做人,认认真真做事,实力沉淀于积累,能力提升自总结, 追逐每天升起的太阳, 挥洒汗水,放飞心情。 |
Linux内核的配置系统由以下几个部分组成:
Makefile:分布在 Linux 内核源代码中的Makefile,定义 Linux 内核的编译规则;
配置脚本:Kconfig文件,定义了各个模块和其对应的可配置选项
配置工具:配置命令解释器(如Make config、Make menuconfig 和 make xconfig),对配置脚本进行解释,提供基于字符或图形的用户配置选择界面。
配置文件:顶层.config文件,用户配置选择的初值和选择结果。
其中配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码),除非是配置系统的维护者,一般的内核开发者无须了解它们的原理,只需知道如何编写 Makefile 和配置脚本就可以。
scripts_basic: $(Q)$(MAKE) $(build)=scripts/basic …… #rule for config config: scripts_basic outputmakefile FORCE $(Q)mkdir -p include/linux include/config $(Q)$(MAKE) $(build)=scripts/kconfig $@ #rule for xconfig, gconfig, menuconfig, oldconfig %config: scripts_basic outputmakefile FORCE $(Q)mkdir -p include/linux include/config $(Q)$(MAKE) $(build)=scripts/kconfig $@ |
${Q}:根据V选项,为空或者@,是否显示这条命令执行过程
相当于执行:make –C scripts/kconfig/ config
#以menuconfig为例,其他的类似 menuconfig: $(obj)/mconf $< $(Kconfig) |
所以相当于调用 scripts/kconfig/mconf arch/arm/Kconfig 在顶层目录生成.config
.config会被转换为include/linux/autoconf.h头文件,然后被include/linux/config.h包含。
配置工具 |
对应的Makefile目标 |
依赖的程序和软件 |
conf | defconfig, oldconfig | conf.c, zconf.tab.c |
mconf | menuconfig | mconf.c, zconf.tab.c 调用scripts/lxdialog/lxdialog |
qconf | xconfig | qconf.c, kconfig_load.c, zconf.tab.c 基于QT软件包的图形界面 |
gconf | gconfig | gconf.c, kconfig_load.c, zconf.tab.c 基于GTK软件包的图形界面 |
参考文档: Documentation/kbuild/kconfig-language.txt
主config:arch/$(SRCARCH)/Kconfig是主config文件,它会调用其他config文件,类似顶层Makefile。
关键字 |
语法 |
说明 |
config |
config symbolname |
定义一个配置选项符号及其属性 |
nemu |
menu |
定义一个菜单项,包括若干其他配置选项 |
choice |
choic |
定义一个选择组, 如果bool类型,则只能单选,三态类型除了单选还可以把其他的设置为m。optional类型允许一个都不选。 |
comment |
comment |
定义一个注视 |
if |
if ifblock endif |
if条件块 |
source |
source "Kconfig-file-name" |
类似include,读取其他配置文件 |
属性 |
语法 |
说明 |
选择提示 |
prompt "string" |
每个菜单选项只能有一个提示,可以和if配合使用 |
缺省值 |
default value [if expr] |
可以定义多个带if的default值,最和定义一个不发if的,类似else情况。 |
依赖关系 |
depends on require [if expr] |
依赖条件require 可以用&&或者|| 组合,可以定义多个denpends属性 |
反向依赖 |
select symbol [if expr] |
可以定义多个select选现 |
数字范围 |
range min max |
对于int hex类型的,定义其取值范围为 min<=x<=max |
帮助文档 |
help string 或者 ---help--- string |
只有接下来的一行的缩进不小于上一行的缩进,就一直作为help文档,不需要加引号 |
表达式用于对符号定义值的判断,可以使用( ), &&, ||, ! , =, != 操作符进行组合。
利用本文提到的mconf,qconf,gconf,conf等工具,编写config脚本文件,即可完成类似场合的配置工作。
特别的,声称的.config文件可以直接被makefile利用, 一般方法为:
CONFIG-${DEFINE_SYMBOL1_IN_CONFIG} += xxx CONFIG-${DEFINE_SYMBOL2_IN_CONFIG} += xxx …… |