kconfig

1. kconfig简单介绍

Kconfig用来配置内核,它就是各种配置界面的源文件,内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config

2. kconfig和makefile关系

makefile用来配置编译源文件的方法,kconfig可以说是以界面的方式来配置决定那些makefile文件需要编译。

看kconfig和makefile和源文件如何关联起来

makefile

obj-$(CONFIG_LCD_TRULY_TFT240240_2_E)  += truly_tft240240_2_e.o

truly_tft240240_2_e:源文件名字
CONFIG_LCD_TRULY_TFT240240_2_E:CONFIG_是前缀,重点是后面的LCD_TRULY_TFT240240_2_E,kconfig通过LCD_TRULY_TFT240240_2_E关联到makefile,从而找到truly_tft240240_2_e,然后进行编译。
kconfig

config LCD_TRULY_TFT240240_2_E 
tristate "SLCD TRULY TFT240240-2-E with control IC st7789s (240x240)"
depends on BACKLIGHT_CLASS_DEVICE
default

这个我们只用看config config LCD_TRULY_TFT240240_2_E ,其他先不管。LCD_TRULY_TFT240240_2_E和makeflie的CONFIG_LCD_TRULY_TFT240240_2_E中的LCD_TRULY_TFT240240_2_E对应。

然后可以通过make menuconfig 查看结果

在菜单用按 / 可以搜索

kconfig常用语法,入门必看_提示信息


kconfig常用语法,入门必看_服务器_02


这样通过空格键选中就可以选中编译的方式,如不编译、编译到内核

编译到模块。

以上就是基本的使用流程###常见命令

kconfig常用语法,入门必看_开发语言_03

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.

以上对应的配置界面为

kconfig常用语法,入门必看_java_04


解析:

        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),在配置界面中上下移动光标选中它时,就可以通过按空格或回车键来设置CONFIG_ TMPFS_POSIX_ACL的值(即选择了哪个值就会把该值赋值给CONFIG_TMPFS_POSIX_ACL)

depends on:表示依赖于XXX,“depends on TMPFS”表示只有当TMPFS配置选项被选中时,当前配置选项的提示信息才会出现,才能设置当前配置选项
select:是反向依赖关系的意思,即当前配置选项被选中,则GENERIC_ACL就会被选中。

  1. menu条目

menu条目用于生成菜单,其格式如下:

     menu "Floating point emulation"
config FPE_NWFPE

..............

config FPE_NWFPE_XP

.............

endmenu

menu之后的Floating poing emulation是菜单名。menu和endmenu间有很多config条目,在配置界面中如下所示:

kconfig常用语法,入门必看_提示信息_05


其中Floating point emulation就是菜单名,然后进入这个菜单有 FPE_NWFPE、FPE_NWFPE_XP…等config条目选择

     Floating point emulation--->
[] FPE_NWFPE

[] FPE_NWFPE_XP

3.choice条目
choice条目将多个类似的配置选项组合在一起,供用户单选或多选,这不同于menu条目

choice
prompt "soc x1000 codec type select"
depends on SOC_X1000
config SND_ASOC_INGENIC_PHOENIX_ICDC
tristate "Audio support for phoenix with internal codec"
select SND_ASOC_DMA_V13
select SND_ASOC_JZ_AIC_I2S_V13
select SND_ASOC_JZ_ICDC_D3
#select SND_ASOC_JZ_PCM_V13
#select SND_ASOC_FIIO_PCM5242

config SND_ASOC_INGENIC_PHOENIX_SPDIF
tristate “Audio support for phoenix with spdif”
select SND_ASOC_DMA_V13
select SND_ASOC_JZ_AIC_SPDIF_V13
select SND_ASOC_JZ_SPDIF_V13
#select SND_ASOC_JZ_PCM_V13

endchoice

  prompt "soc x1000 codec type select"给出提示信息“soc x1000 codec type select”,光标选中后回车进入就可以看到多个config条目定义的配置选项

choice条目中定义的变量只有bool和tristate
如下图

kconfig常用语法,入门必看_提示信息_06

  1. comment条目
    menu “Floating point emulation”

comment “At least one emulation must be selected”

config FPE_NWFPE

config FPE_NWFPE_XP

在界面中如下所示:

kconfig常用语法,入门必看_提示信息_07

  1. ** source条目**
    source条目用于读取另一个Kconfig文件,如:
source "net/Kconifg" 

参考了
​​​ https://www.jianshu.com/p/aba588d380c2​​