Kconfig配置文件保存内核配置选项菜单,给用户提供配置选择的功能。
运行make menuconfig等时,配置工具首先分析与体系架构对应的arch/xxx/Kconfig文件,
arch/xxx/Kconfig文件中除本身包含一些与体系结构相关的配置项和配置菜单以外,还通过
source语句引入一系列Kconfig文件,而这些Kconfig文件可能再次通过source语句引入下一
层Kconfig文件,配置工具根据Kconfig包含的菜单和条目即可生成配置界面供开发人员配置
内核,最后生成配置文件.config,将所有的选项以宏的形式保存在Linux内核根目录下的
include/generated/autoconf.h文件下,内核中的源代码就都会包含以上.h文件,跟宏的定
义情况进行条件编译。
arch/arm/configs/xxx_defconfig用于配置内核选项的值,在make img时会首先执行make xxx_defconfig生成.config文件。
生成的过程:cp xxx_defconfig .defconfig,然后再添加一些配置选项生成最终的.config文件。
另外在uboot中 include/configs/xxx.h文件也配置了一些选项,最终也会保存到config文件中。
1. 如果.config不存在,运行make config/menuconfig时的缺省设置由固化在各个Kconfig文件中各项目的缺省值决定。
2. 如果.config存在,运行make config/menuconfig时的缺省设置即是当前.config的设置,若对设置进行了修改,.config将被更新。
3. arch/arm/defconfig是一个缺省的配置文件,make defconfig时会根据这个文件生成当前的.config。
4. arch/arm/configs文件夹中有许多命名为xxx_defconfig的配置文件,如果运行make xxx_defconfig,当前.config文件会由xxx_defconfig文件生成。
5. make oldconfig的作用是备份当前.config文件为.config.old,如若make config/menuconfig设置不当可用于恢复先前的.config。
Kconfig文件的基本要素:
1.config条目(entry)
config TMPFS_POSIX_ACL
bool "Tmpfs POSIX Access Control Lists"
depends on TMPFS
select GENERIC_ACL
help
POSIX Access Control Lists (ACLs) support permissions for users and
groups beyond the owner/group/world scheme.
To learn more about Access Control Lists, visit the POSIX ACLs for
Linux website <http://acl.bestbits.at/>.
If you don't know what Access Control Lists are, say N.
解析:
config是关键字,表示一个配置选项的开始;紧跟着的TMPFS_POSIX_ACL是配置选项的名称,省略了前缀"CONFIG_"
bool表示变量类型,即"CONFIG_ TMPFS_POSIX_ACL "的类型,有5种类型:bool、tristate、string、hex和int,其中tristate和string是基本的类型
bool变量的值: y和n
tristate变量的值:y、n和m
string变量的值: 字符串
bool之后的字符串“Tmpfs POSIX Access Control Lists”是提示信息,在配置界面中上下移动光标选中它时,就可以通过按空格或回车键来设置
CONFIG_ TMPFS_POSIX_ACL的值
depends on:表示依赖于XXX,“depends on TMPFS”表示只有当TMPFS配置选项被选中时,当前配置选项的提示信息才会出现,才能设置当前配置选项
2.menu条目
menu条目用于生成菜单,其格式如下:
menu "Floating poing emulation"
config FPE_NWFPE
..............
config FPE_NWFPE_XP
.............
endmenu
menu之后的Floating poing emulation是菜单名,menu和endmenu间有很多config条目,在配置界面中如下所示:
Floating poing emulation--->
[] FPE_NWFPE
[] FPE_NWFPE_XP
3.choice条目
choice条目将多个类似的配置选项组合在一起,供用户单选或多选
choice
prompt "ARM system type"
default ARCH_VERSATILE
config ARCH_AAEC2000
.........
config ARCH_REALVIEW
.........
endchoice
prompt "ARM system type"给出提示信息“ARM system type”,光标选中后回车进入就可以看到多个config条目定义的配置选项
choice条目中定义的变量只有bool和tristate
4.comment条目
comment条目用于定义一些帮助信息,出现在界面的第一行,如在arch/arm/Kconifg中有如下代码:
menu "Floating point emulation"
comment "At least one emulation must be selected"
config FPE_NWFPE
.........
config FPE_NWFPE_XP
5.source条目
source条目用于读取另一个Kconfig文件,如:
source "net/Kconifg"