当前位置:文档之家› Kconfig指令详解

Kconfig指令详解

Kconfig指令详解
Kconfig指令详解

https://www.doczj.com/doc/1f13920766.html,ment

comment相当于插入语句,不起实际作用,只是起显示一句话如:comment "****Boot options******"

bool 后面+字符串(tristate与bool一样,只是多了一个M选项,意思是编译成动态模块,不是直接加载到内核的,而是单独编译成模块,需要时再加载,适合于外设驱动程序)

如:

config S3C_BOOT_WATCHDOG

bool "S3C Initialisation watchdog"

depends on S3C2410_W ATCHDOG

help

Say y to enable the watchdog during the kernel decompression

其中关键字config ,bool ,depends on

当S3C2410_W ATCHDOG被定义时,显示[ ] S3C Initialisation watchdog 选项

用空格来选择Y or N . bool 是用来定义Y或者N 的,当选择Y 时,则配置

CONFIG_S3C_BOOT_W ATCHDOG

在Makefile 中

obj-$( CONFIG_S3C_BOOT_W ATCHDOG) += watchdog.o 则该语句有效,编译watchdog.c 文件

3. int 的用法

config S3C2410_PM_CHECK_CHUNKSIZE

int "S3C UART to use for low-level messages"

default 0 //若要写成默认值100 则括号里面就是100

help

Choice of which UART port to use for the low-level messages,

箭头的使用如下:蓝色部分

//****************以下设置菜单前有选项[ ]**************************

menuconfig NET

bool "Networking support"

select NLATTR

---help---

Unless you really know what you are doing, you should say Y here.

。。。。。。。。。。。

//****************以下设置菜单前没有选项**************************

menu "Networking options" //出现蓝色部分再想出现子菜单

继续往下配置

config INET

bool "TCP/IP networking"

---help---

These are the protocols used on the Internet and

config NETWORK_SECMARK

bool "Security Marking"

help

This enables security marking of

……………………

endmenu

// **********************两者最大的区别是menuconfig 和menu*******************

(1) menu/endmenu

menu的作用,可以理解成一个目录,menu可以把其中一部分配置项包含到一个menu中,这样有利于配置的分类显示。menu 与endmenu是一组指令,必须同时出现。menu和endmenu中包含的部分就是子目录中的配置项。

比如,在init/Kconfig中24行(可能不同)显示为:

menu "General setup"

这样,就会生成一个目录,特征就是右侧会出现一个箭头,如

图1中第一行。当点击确认键时,会进入这个菜单项,如图2。

图1

图2

(2) menuconfig

menuconfig有点类似menu,但区别就在于menu后面多了一个config,这个menu是可以配置的,如图2中的第二行,前面比menu 类型多了一个方框,通过空格可以修改这个配置项的选中状态。

而且从格式上来看,也是有区别的。格式如init/Kconfig中1131行:

menuconfig MODULES

bool "Enable loadable module support"config

if MODULES

xx

endif

也就是说,配置项是位于if和endif中。其中的部分就是MODULES子目录显示的内容。如果选中了MODULE,那么if 和endif中的内容可以显示。如果没有定义,就只能进入一个空目

录。

4. config

config是构成Kconfig的最基本单元,其中定义了配置项的详细信息。定义的格式参考arch/arm/Kconfig中的第8行。

config ARM

bool

default y

select xxxxxxxxxx

help

???????????

可知,config需要定义名称,与menuconfig相同。这个名称不但用于裁剪内核中,还用于配置项之间的相互依赖关系中。

config的类型有5种,分别是bool(y/n),tristate(y/m/n),string(字符串),hex(十六进制),integer(整数)。其中,需要特别介绍一下bool和tristate,bool只能表示选中和不选,而tristate还可以配置成模块(m),特别对于驱动程序的开发非常有用。

5.

1) prompt:提示,显示在make menuconfig中的名称,一般省

略。下面两种写法相同。

a. bool “Networking Support”

b. bool

prompt “Networking Support”

2) default:默认值

一个配置项可以有多个默认值,但是只有第一个被定义的值是有效的。

3) depends on/requires:依赖关系

如果依赖的配置项没有选中,那么就当前项也无法选中。

4) select:反向依赖

如果当前项选中,那么也选中select后的选项。

5) range:范围,用于hex和integer

range A B表示当前值不小于A,不大于B

comment:注释

7) choice/endchoice

choice的作用,多选一,有点像MFC中的Radio控件。参考arch/arm/Kconfig第197行。

choice

prompt "ARM system type"

default ARCH_VERSATILE

……//省略

config ARCH_S3C2410

bool "Samsung S3C2410, S3C2412, S3C2413, S3C2440,

S3C2442, S3C2443"

select GENERIC_GPIO

select ARCH_HAS_CPUFREQ

select HA VE_CLK

……………//省略

Endchoice

显示的结果如图3,进入这一项后,显示结果如图4.

图3

图4

可见,choice有点类似于menu,是在子窗口里选择,但是不同的是子窗口中只能选择一项(不能再嵌入子菜单了)。在prompt 后会显示当前选择项的名称。

8)source

source只是将另外一个Kconfig文件直接复制到当前位置而已。

但它的作用也是明显的,可以将这个系统贯穿在一起。从开始位置arch/arm/Kconfig,来将整个系统都作为配置型。

9)if 一定要与endif配对

if BLOCK

menu "DOS/FAT/NT Filesystems"

source "fs/fat/Kconfig"

source "fs/ntfs/Kconfig"

endmenu

endif # BLOCK

10)mainmenu

mainmenu "Linux Kernel Configuration" 用来设置窗口的名称

11)string

string "Local version - append to kernel release" 将会在显示的前面加()

里面可以输入字符串。如:

12)rang

config LOG_BUF_SHIFT

int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"

range 12 21 //int 的变化范围是12—21之间

default 17 //默认是17

help

Select kernel log buffer size as a power of 2.

6.配置分析

当我们进入了linux源码的根目录时,输入make menuconfig。假设,此时根目录已经存在了.config,如果不存在,会自动生成。这时,在命令行显示如下面代码所示:

显然,在执行make menuconfig时,会自动调用scripts/Kconfig/mconf arch/arm/Kconfig开始系统的配置,那么arch/arm/Kconfig就是配置的起点。这个文件会通过source指令来调用其他目录下的Kconfig文件,从而完成整体配置。这样,arch/arm/Kconfig就可以理解成main函数,而source指令就有点类似于include。可以按照上面的语法,来分析Kconfig文件。

相关主题
相关文档 最新文档