Skip to content

ooops-t/Kconfig-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

25276dd · Sep 29, 2022

History

4 Commits
Sep 29, 2022
Sep 28, 2022
Sep 28, 2022
Sep 29, 2022
Sep 28, 2022
Sep 28, 2022
Sep 29, 2022
Sep 29, 2022
Sep 29, 2022
Sep 28, 2022
Sep 28, 2022

Repository files navigation

Kconfig

Kconfig 是用来生成项目配置文件,也就是自动生成一些预定义的宏,最终生成的的配置文件是.configLinuxBuildrootBusyboxU-Boot 等项目都是使用 Kconfig 来进行配置。

Kconfig 基本用法

构建内核的第一步始终是配置。Kconfig 有助于使 Linux 内核高度模块化和可定制。Kconfig 为用户提供了许多配置目标(以 Linux 内核为例):

配置目标 解释
config 利用命令行程序更新当前配置
nconfig 利用基于 ncurses 菜单的程序更新当前配置
menuconfig 利用基于菜单的程序更新当前配置
xconfig 利用基于 Qt 的前端程序更新当前配置
gconfig 利用基于 GTK+ 的前端程序更新当前配置
oldconfig 基于提供的 .config 更新当前配置
localmodconfig 更新当前配置,禁用没有载入的模块
localyesconfig 更新当前配置,转换本地模块到核心
defconfig 带有来自架构提供的 defconfig 默认值的新配置
savedefconfig 保存当前配置为 ./defconfig(最小配置)
allnoconfig 所有选项回答为 no 的新配置
allyesconfig 所有选项回答为 yes 的新配置
allmodconfig 尽可能选择所有模块的新配置
alldefconfig 所有符号(选项)设置为默认值的新配置
randconfig 所有选项随机选择的新配置
listnewconfig 列出新选项
olddefconfig oldconfig 一样,但设置新符号(选项)为其默认值而无须提问
kvmconfig 启用支持 KVM 访客内核模块的附加选项
xenconfig 启用支持 xendom0 和 访客内核模块的附加选项
tinyconfig 配置尽可能小的内核

这些目标中 menuconfig 是这些目标中最常用的。这些目标都是由不同的程序进行处理,这些程序由内核提供并在内核构建期间编译生成。与 Kconfig 相关工具和源代码主要位于内核源码中的 scripts/kconfig/ 下。

scripts/kconfig/Makefile 中可以看到,这里有好几个程序,包含 confmconfnconf。除了 conf 之外,每个都负责一个基于 GUI 的配置目标,因此 conf 处理大多数目标。

从逻辑上讲,Kconfig 的基础构成有两部分:一部分实现一种新语言来定义配置,另一部分用来解析 Kconfig 语言并处理配置操作。

大多数配置目标具有大致相同的处理过程(如下所示):

Kconfig parse

Kconfig 基本语法

基本数据类型

  • y:选中该配置
  • n:不选该配置
  • m:以模块形式启用该配置,一般用于 Linux 驱动程序
类型 说明
bool y/n
tristate y/n/m, 一般用于 Linux 驱动程序
string 字符串
hex 十六进制数
int 整数

基本命令

命令 说明
mainmenu 顶级菜单
config 定义一个新的配置选项
menuconfig config 类似,但它在 config 的基础上要求所有的子选项作为独立的行显示
choice/endchoice 定义一组选项,只能选择其一
comment 定义了配置过程中显示给用户的注释,该注释还将写进输出文件, 可以使用 depends on
menu/endmenu 定义一个菜单,所有依赖于此菜单的选项都是它的子选项, 可以使用 depends on
if/endif 类似与 C 中的 if 条件判断, 支持与或非运算
source 引入其他的 Kconfig 文件
prompt 提示信息,显示在 make menuconfig 中的名称,一般省略
default 默认值,一个配置可以有多个默认值,但是只有第一个被定义的值有效, 如果没有默认值的话,默认为不选中, 可以使用 if 判断
depends on 依赖项,如果依赖的配置没有被选中,那么当前项也没有办法被选中 , 支持与或非运算
select 反向依赖,如果当前选项被选中,那么 select 定义的选项也会被选中
range 定义一个数据范围,用于 hexintergerrange A B: 当前值不小于 A,不大于 B
visible if 决定 menu 是否显示,depends on 可有同样的功能
help 帮助信息

Kconfig 实例

Demo 目录结构

.
├── .config # 生成的配置文件
├── .config.old # 上一次的配置文件
├── demo.c
├── include
│   ├── config
│   │   ├── auto.conf # 生成 Makefile 使用的变量定义
│   │   ├── auto.conf.cmd
│   │   ├── kconfig
│   │   └── tristate.conf
│   └── generated
│       └── autoconf.h # 生成 C 语言使用的头文件,都是一些宏定义
├── Kconfig
├── main.c
├── Makefile
├── other-dir
│   └── Kconfig
└── scripts # Kconfig 工具
    ├── conf
    └── mconf

实例代码

Kconfig Demo

参考链接

About

Kconfig demo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published