一. 简介
之前一篇文章中,我们已经知道:
scripts/kconfig/mconf
会调用
uboot
根目录下的
Kconfig
文件开始
构建图形化配置界面。
接下来简单学习一下
Kconfig
的语法。因为后面学习
Linux
驱动开发
时,可能会涉及到修改
Kconfig
,对于
Kconfig 语法我们不需要太深入的去研究。本文我们大概了解其原理即可。
二. menuconfig 图形化配置之 Kconfig语法
打开
uboot
根目录下的
Kconfig
,这个
Kconfig
文件就是顶层
Kconfig
,我们就以这个文件为例来简单学习一下
Kconfig
语法。
1. mainmenu
顾名思义
mainmenu
就是主菜单,也就是输入“
make menuconfig
”以后打开的默认界面,在顶层
Kconfig
中有如下代码:
mainmenu "U-Boot $UBOOTVERSION Configuration"
以上的代码是定义了一个名为 “
U-Boot $UBOOTVERSION Configuration
” 的主菜单,其中,UBOOTVERSION=2016.03
,因此,主菜单名为“
U-Boot 2016.03 Configuration
”,如下图所示:
2. 调用其他目录下的 Kconfig 文件
和 makefile 一样,Kconfig 也可以调用其他子目录中的 Kconfig 文件,调用方法如下:
source "xxx/Kconfig" //xxx 为具体的目录名,相对路径
在顶层 Kconfig 中有如下代码:
source "arch/Kconfig"
................
source "drivers/Kconfig"
source "fs/Kconfig"
source "lib/Kconfig"
source "test/Kconfig"
可以看出,顶层
Kconfig
文件调用了很多其他子目录下的
Kconfig
文
件,这些子目录下的
Kconfig
文件在主菜单中生成各自的菜单项。
3. menu/endmenu 条目
menu
用于生成菜单,
endmenu
就是菜单结束标志,这两个一般是成对出现的。在顶层 Kconfig
中有如下代码:
menu "General setup"
.................
When disabling this, please check if malloc calls, maybe
should be replaced by calloc - if expects zeroed memory.
endif
endmenu # General setup
可以看出,有一个
menu/endmenu
代码块,这个代码块就是一个子菜单。
第
1
行的 “
menu "General setup"
” 表示子菜单“
General setup
”。
4. menuconfig
menuconfig
和
menu
很类似,但是
menuconfig
是个带选项的菜单,其一般用法为:
menuconfig MODULES
bool "菜单"
if MODULES
...
endif # MODULES
第
1
行,定义了一个可选的菜单
MODULES
,只有选中了
MODULES
,第
3~5
行
if
到
endif 之间的内容才会显示。在顶层
Kconfig
中有如下代码:
menu "General setup"
.................
menuconfig EXPERT
bool "Configure standard U-Boot features (expert users)"
default y
help
This option allows certain base U-Boot options and settings
to be disabled or tweaked. This is for specialized
environments which can tolerate a "non-standard" U-Boot.
Only use this if you really know what you are doing.
if EXPERT
.................
should be replaced by calloc - if expects zeroed memory.
endif
endmenu # General setup
第1
~6
行使用
menuconfig
实现了一个菜单,路径如下:
General setup-> Configure standard U-Boot features (expert users) --->
配置界面如下图所示:
可以看到,前面有“
[ ]
”说明这个菜单是可选的,当选中这个菜单以后就可以进入到子选项中,
也就是
的第12
~15
行所描述的菜单。效果如下:
如果不选择 “
Configure standard U-Boot features (expert users)
”,那么代码中
的
第
12~15
行所描述的菜单就不会显示出来,进去以后是空白的。