Chinaunix首页 | 论坛 | 博客
  • 博客访问: 240399
  • 博文数量: 27
  • 博客积分: 832
  • 博客等级: 准尉
  • 技术积分: 336
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-20 20:47
文章存档

2012年(9)

2010年(10)

2009年(7)

2008年(1)

我的朋友

分类: LINUX

2010-06-23 21:46:18


HoxmDocument-Study


Linux配置选项机制介绍

V0.1
2010/06/23


踏踏实实做人,认认真真做事,实力沉淀于积累,能力提升自总结,
追逐每天升起的太阳, 挥洒汗水,放飞心情。

内容目录

   1. 内容目录
   2. 一、配置选项系统构成
         1. Step1: 顶层Makefile调用配置工具
         2. Step2: scripts/kconfig/Makefile调用配置工具
         3. Step3: 配置工具解释配置脚本
         4. step4: 用户配置结果保存
   3. 二、配置选项脚本文件
         1. 配置脚本语法-关键字
         2. 配置脚本语法-类型
         3. 配置脚本语法-属性
         4. 配置脚本语法-表达式
   4. 三、内核配置系统的应用

 

一、配置选项系统构成

Linux内核的配置系统由以下几个部分组成:

  1. Makefile:分布在 Linux 内核源代码中的Makefile,定义 Linux 内核的编译规则;

  2. 配置脚本:Kconfig文件,定义了各个模块和其对应的可配置选项

  3. 配置工具:配置命令解释器(如Make config、Make menuconfig 和 make xconfig),对配置脚本进行解释,提供基于字符或图形的用户配置选择界面。

  4. 配置文件:顶层.config文件,用户配置选择的初值和选择结果。


其中配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码),除非是配置系统的维护者,一般的内核开发者无须了解它们的原理,只需知道如何编写 Makefile 和配置脚本就可以。


Step1: 顶层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


Step2: scripts/kconfig/Makefile调用配置工具

#以menuconfig为例,其他的类似

menuconfig: $(obj)/mconf

$< $(Kconfig)


Kconfig := arch/$(SRCARCH)/Kconfig , SRCARCH:=arm

所以相当于调用 scripts/kconfig/mconf arch/arm/Kconfig 在顶层目录生成.config

.config会被转换为include/linux/autoconf.h头文件,然后被include/linux/config.h包含。

Step3: 配置工具解释配置脚本

配置工具

对应的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软件包的图形界面


step4: 用户配置结果保存

.config 文件中保存配置结果。


二、配置选项脚本文件

参考文档: 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,读取其他配置文件

例子:
config NR_CPUS
        int "Maximum number of CPUs (2-32)"
        range 2 32
        depends on SMP
        default "4"


配置脚本语法-类型

bool, int, hex, tristate, string

配置脚本语法-属性

属性

语法

说明
选择提示
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

……

CONFIG-y, CONFIG-n 分别得到定义的和没有定义的映射集合。


 




 

阅读(2063) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~