一. 简介
本文继续简单了解一下,uboot的图形化配置原理。具体了解 Kconfig语法。
之前文章了解了几个 Kconfig语法。地址如下:
menuconfig 图形化配置原理说明二-CSDN博客
二. menuconfig 图形化配置之 Kconfig语法
1. config 条目
顶层 Kconfig 中的 “General setup” 子菜单内容如下:
menu "General setup"
config LOCALVERSION
string "Local version - append to U-Boot release"
...................
config LOCALVERSION_AUTO
bool "Automatically append version information to the version string"
default y
...................
config SYS_MALLOC_F_LEN
hex "Size of malloc() pool before relocation"
...................
endif
endmenu # General setup
可以看出,在
menu/endmenu
代码块中,有大量的 “
config xxxx
” 的代码块,也就是
config
条目。
config
条目就是 “
General setup
” 菜单的具体配置项,如下图
所示:
顶层 Kconfig中,第 1行中,以 config 关键字开头,后面跟着 LOCALVERSION,LOCALVERSION就是配置项名字。
config 条目都是以 config条目开头的。后面紧跟着配置项名,例如,LOCALVERSION,使能了条目以后,就会在 .config文件 里面添加 CONFIG_LOCALVERSION=y。
由此可知,
.config
文件中的 “
CONFIG_xxx
”
(xxx
就是具体的配置项名字
)
就是
Kconfig
文件中
config
关键字后面的配置项名字加上 “
CONFIG_
” 前
缀。
config 关键字下面的这几行是配置项属性,3~5 行是 LOCALVERSION 的属性。
属性里面描述了配置项的类型、输入提示、依赖关系、帮助信息和默认值等。
第
17
行的
string
是变量类型,也就是“
CONFIG_ LOCALVERSION
”的变量类型。
可以为:bool
、
tristate
、
string
、
hex
和
int
,一共
5
种。
最常用的是
bool
、
tristate
和
string
这三种。
bool
类
型有两种值:
y
和
n
,当为
y
的时候表示使能这个配置项,当为
n
的时候就禁止这个配置项。
tristate
类型有三种值:
y
、
m
和
n
,其中
y
和
n
的涵义与
bool
类型一样,
m
表示将这个配置项编
译为模块。
string
为字符串类型,所以
LOCALVERSION
是个字符串变量,用来存储本地字符
串,选中以后即可输入用户定义的本地版本号。如下可以输入:
string
后面的 “
Local version - append to U-Boot release
” 就是这个配置项在图形界面上的显示出来的标题。
第
18
行,
help
表示帮助信息,告诉我们配置项的含义,当我们按下“
h
”或“
?
”弹出来的帮助界面就是
help
的内容。
2. source
source
用于读取另一个
Kconfig
,例如顶层 Kconfig 文件中 :
source "arch/Kconfig"
顶层 Kconfig 读取 uboot根目录下的 arch/目录下的 Kconfig。
3. choice/endchoice
在
arch/Kconfig
文件中有如下代码:
choice
prompt "Architecture select"
default SANDBOX
config ARC
bool "ARC architecture"
.................
config ARM
bool "ARM architecture"
.................
config X86
bool "x86 architecture"
.................
endchoice
choice/endchoice
代码段定义了一组可选择项,将多个类似的配置项组合在一起,供用户单
选或者多选。
就是选择处理器架构,可以从
ARC
、
ARM
、
AVR32
等这些架构
中选择,这里是单选。
在
uboot
图形配置界面上选择“
Architecture select
”,进入以后,如下图所示:
可以在图
中通过移动光标来选择所使用的
CPU
架构。
第
2
行的
prompt ,
给出这个
choice/endchoice
段的提示信息为“
Architecture select
”。
4. depends on 和 select
打开
arch/Kconfig
文件,在里面有这如下代码:
config HAVE_GENERIC_BOARD
bool
config SYS_GENERIC_BOARD
bool
depends on HAVE_GENERIC_BOARD
choice
prompt "Architecture select"
default SANDBOX
config ARC
bool "ARC architecture"
select HAVE_PRIVATE_LIBGCC
select HAVE_GENERIC_BOARD
select SYS_GENERIC_BOARD
select SUPPORT_OF_CONTROL
第
6
行,“
depends on
” 说明 “
SYS_GENERIC_BOARD
” 项依赖于 “
HAVE_GENERIC_BOARD
”,
也就是说 “
HAVE_GENERIC_BOARD
” 被选中以后,“
SYS_GENERIC_BOARD
” 才能被选中。
第
14~17
行,“
select
” 表示反向依赖,当选中 “
ARC
” 以后,“
HAVE_PRIVATE_LIBGCC
”、
“
HAVE_GENERIC_BOARD
”、“
SYS_GENERIC_BOARD
”和“
SUPPORT_OF_CONTROL
”这四个也会被选中。
5. comment
comment
用 于 注 释 , 也 就 是 在 图 形 化 界 面 中 显 示 一 行 注 释 , 打 开 文 件
drivers/mtd/nand/Kconfig
,有如下所示代码:
config NAND_ARASAN
bool "Configure Arasan Nand"
help
This enables Nand driver support for Arasan nand flash
controller. This uses the hardware ECC for read and
write operations.
comment "Generic NAND options"
第
8
行,使用
comment
标注了一行注释,注释内容为:“
Generic NAND options
”,这行注释在配置项
NAND_ARASAN
的下面。在图形化配置界面中按照如下路径打开:
-> Device Drivers-> NAND Device Support
如下图所示:
从上图中可以看出,在配置项“
Configure Arasan Nand
”下面有一行注释,注释内容为
“
*** Generic NAND options ***
”。