Makefile和kconfig 语法与关系

kconfig用法

kconfig是可以menuconfig识别,专门从其中提取配置菜单项,用于添加到内核配置项目中

关键字如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
menuconfig:表示菜单。后面接在菜单中显示的选项名一般用大写说明,需要与Makefile文件中名称对应

source:加载子kconfig,该目录下含有子目录,在子目录中也有kconfig文件,必须用source。

tristate:变量值,表示可以设置3种状态,(对应Y、N、M三种选择方式)。

bool:变量值,和tristate类似,但只可以选择两种状态(对应Y和N)。

string:变量值,表示字符串。

depends:该配置项必须依赖某个配置项,依赖的配置项必须为Y或者M状态,如果是N状态,则不会在menu菜单中显示。

select:表示depends on的值有效时,select 修饰的配置项也会成立。

default:接三种状态,表示默认处于修饰的状态,特殊情况会伴随条件。

help:自己写的帮助描述信息,以“.”结束。

案例分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#
# PHY Layer Configuration
#

menuconfig MDIO_DEVICE
tristate "MDIO bus device drivers"
help
MDIO devices and driver infrastructure code.

config MDIO_BUS
tristate
default m if PHYLIB=m
default MDIO_DEVICE
help
This internal symbol is used for link time dependencies and it
reflects whether the mdio_bus/mdio_device code is built as a
loadable module or built-in.

menuconfig : 添加一个菜单项 MDIO_DEVICE
tristate:”MDIO bus device drivers” 可在menu菜单中设置状态
help:帮助信息

Makefile 和kconfig的关系

kernel源码目录中,每一个层级目录都会有一个Makefile文件,可以没有kconfig文件

Makefile 简单示例:
obj 后 $(kconfig 配置项名) += 对应驱动功能.o 文件

1
2
3
4
5
6
7
8
9
10
11
ifdef CONFIG_PHYLIB
libphy-y += $(mdio-bus-y)
else
obj-$(CONFIG_MDIO_DEVICE) += mdio-bus.o
endif
libphy-$(CONFIG_SWPHY) += swphy.o
libphy-$(CONFIG_LED_TRIGGER_PHY) += phy_led_triggers.o

obj-$(CONFIG_PHYLINK) += phylink.o
obj-$(CONFIG_PHYLIB) += libphy.o

注意事项:
1、当子Makefile,kconfig配置了选项,上层级的配置必须使能Y才能配置子层级

Makefile语法

参考地址