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文件。