一、kconfig简介
当我们在使用MTK平台进行驱动开发时,很多的外设是需要进行Kconfig配置的。那么Kconfig配置在驱动中有什么用呢?
首先我来回答一下Kconfig,Kconfig在u-boot和Linux kernel中会被经常使用到,他是和图像化配置界面有关的。它会匹配顶层Makefile的一些变量,最终生成可执行程序,这里我们主要是讨论Kconfig语法,对生成可执行程序的过程不做过多解释。
二、kconfig语法
1、mainmenu
mainmenu:根据字面意思可知,mainmenu就是图型化配置界面主菜单的意思。
例如:mainmenu "U-Boot 2023.7.24 Configuration",那么它生成的图形化配置界面的主菜单名称就为 U-Boot 2023.7.24 Configuration。
2、source
source 的主要作用就是调用其它目录下的kconfig文件,和makefile一样,Kconfig 也可以调用其他子目录中的 Kconfig 文件,调用方法如下: source "xxx/Kconfig" //xxx 为具体的目录名,相对路径。
例如:source "arch/Kconfig"
source "fs/Kconfig"
3、menu/endmenu
menu 用于生成菜单,endmenu 就是菜单结束标志,这两个一般是成对出现的。一般用于在一个界面中生成子菜单。
例如:
menu "General setup"
config LOCALVERSION 17
string "Local version - append to U-Boot release"
help
Append an extra string to the end of your U-Boot version.
This will show up on your boot log, for example.
The string you set here will be appended after the contents of
any files with a filename matching localversion* in your
object and source tree, in that order. Your total string can
be a maximum of 64 characters.
.......
endmenu # Boot images
4、config条目
先看如下代码:
menu "General setup"
config LOCALVERSION
string "Local version - append to U-Boot release"
help
Append an extra string to the end of your U-Boot version.
This will show up on your boot log, for example.
The string you set here will be appended after the contents of
any files with a filename matching localversion* in your
object and source tree, in that order. Your total string can
be a maximum of 64 characters.
config LOCALVERSION_AUTO
bool "Automatically append version information to the version
string"
default y
help
......
endmenu # General setup
可以看出,在 menu/endmenu 代码块中有大量的“config xxxx”的代码块,也就是 config 条 目。config 条目就是“General setup”菜单的具体配置项。 “config LOCALVERSION”对应着第一个配置项,“config LOCALVERSION_AUTO”对应 着 第 二 个 配 置 项 , 以 此 类 推 。 我 们 以 “ config LOCALVERSION ” 和 “ config LOCALVERSION_AUTO”这两个为例来分析一下 config 配置项的语法:
以 config 关键字开头,后面跟着 LOCALVERSION 和 LOCALVERSION_AUTO,这两个就是配置项名字。假如我们使能了 LOCALVERSION_AUTO 这个功能,那么就会下.config 文件中生成 CONFIG_LOCALVERSION_AUTO。
除config_xxxx以外就是配置项的属性。属性里面描述了配置项的类型、输入提示、依赖关系、帮 助信息和默认值等。
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 是个字符串变量,用来存储本地字符 串,选中以后即可输入用户定义的本地版本号。
help 表示帮助信息,告诉我们配置项的含义,当我们按下“h”或“?”弹出来的 帮助界面就是 help 的内容。
“CONFIG_LOCALVERSION_AUTO”是个 bool 类型,可以通过按下 Y 或 N 键来使能或者禁止 CONFIG_LOCALVERSION_AUTO。
“default y”表示 CONFIG_LOCALVERSION_AUTO 的默认值就是 y,所以这一 行默认会被选中。