文章目录
- 一、什么是.config文件
- **`.config` 文件是什么?**
- **`.config` 文件的格式**
- **常见的配置值**
- **`.config` 文件的作用**
- **`.config` 文件的生成**
- **`.config` 和 `Kconfig` 的关系**
- **总结**
- 二、.config文件生成步骤
- `make mx6ull_14x14_evk_defconfig`、`.config` 和 `Kconfig` 的关系及 `.config` 文件的生成过程
- **1. 命令 `make mx6ull_14x14_evk_defconfig` 的作用**
- **2. `Kconfig` 的作用**
- **3. `.config` 文件的生成过程**
- **(1) 解析 `defconfig`**
- **(2) 处理 Kconfig 逻辑**
- **(3) 生成 `.config`**
- **总结**
一、什么是.config文件
.config
文件是什么?
.config
是 U-Boot(或者 Linux 内核等)构建系统的配置文件,它记录了所有的编译选项和系统参数。这个文件是 Kconfig 处理后生成的最终配置,用于控制 U-Boot 的编译过程。
在 U-Boot 或 Linux 内核中,.config
主要用于:
- 记录用户选择的编译选项
- 作为 Makefile 和 C 代码的编译输入
- 影响最终的二进制文件(如 U-Boot 镜像或 Linux 内核)
.config
文件的格式
.config
文件是一个纯文本文件,格式如下:
CONFIG_FOO=y
CONFIG_BAR=m
# CONFIG_BAZ is not set
常见的配置值
配置值 | 含义 |
---|---|
CONFIG_X=y | 该功能启用,编译进 U-Boot |
CONFIG_X=m | 该功能以模块形式编译(仅适用于 Linux 内核,U-Boot 不支持) |
# CONFIG_X is not set | 该功能未启用,编译时会被忽略 |
.config
文件的作用
-
决定编译选项
.config
影响Makefile
,决定哪些功能会被编译进 U-Boot。例如:CONFIG_CMD_NET=y # 启用网络命令支持 CONFIG_MMC=y # 启用 MMC(SD 卡)支持 CONFIG_USB=y # 启用 USB 支持
这些选项会在代码中通过
#ifdef CONFIG_xxx
进行条件编译:#ifdef CONFIG_USB printf("USB enabled\n"); #endif
-
生成
include/generated/autoconf.h
.config
文件最终会转换成include/generated/autoconf.h
,供 C 代码使用:
#define CONFIG_USB 1 #define CONFIG_MMC 1
-
影响 U-Boot 的功能
.config
直接决定 U-Boot 是否支持某些功能,如:- 是否支持网络 (
CONFIG_NET
) - 是否启用命令行 (
CONFIG_CMDLINE
) - 是否支持 USB (
CONFIG_USB
)
- 是否支持网络 (
.config
文件的生成
.config
由 Kconfig
配置系统解析并生成,具体流程如下:
-
运行
make defconfig
生成.config
make mx6ull_14x14_evk_defconfig
- 读取
configs/mx6ull_14x14_evk_defconfig
作为默认配置 - 解析
Kconfig
并生成.config
- 读取
-
使用
menuconfig
交互式修改make menuconfig
- 进入图形化菜单,手动修改配置项
- 修改完成后,会更新
.config
文件
-
手动编辑
.config
- 直接用
vim
或nano
修改.config
,但不推荐手动编辑,因为可能破坏依赖关系。
- 直接用
-
重新应用
.config
- 修改
.config
后,需要运行:
make oldconfig
- 该命令会检查
.config
是否完整,并补充缺失的默认选项。
- 修改
.config
和 Kconfig
的关系
文件 | 作用 |
---|---|
Kconfig | 定义所有可配置项,并设置默认值 |
defconfig | 默认配置文件,提供一组推荐的 .config 配置 |
.config | 由 Kconfig 解析并生成的最终配置文件 |
autoconf.h | 由 .config 生成的 C 头文件,供代码使用 |
总结
.config
是 U-Boot 编译配置文件,记录所有功能选项。- 通过
make defconfig
或make menuconfig
生成。 .config
影响Makefile
和 C 代码的编译,决定 U-Boot 是否支持某些功能。- 修改
.config
后需要运行make oldconfig
以确保完整性。
二、.config文件生成步骤
make mx6ull_14x14_evk_defconfig
、.config
和 Kconfig
的关系及 .config
文件的生成过程
1. 命令 make mx6ull_14x14_evk_defconfig
的作用
该命令用于为 i.MX6ULL 14x14 EVK(评估套件)生成默认的 U-Boot 配置文件 .config
。
执行流程:
-
查找默认配置文件
make mx6ull_14x14_evk_defconfig
会在configs/
目录下查找mx6ull_14x14_evk_defconfig
这个配置文件。- 该文件包含了 U-Boot 的默认配置选项(基于
Kconfig
)。
-
调用 Kconfig 处理脚本
make
调用scripts/kconfig/conf
解析Kconfig
文件,并使用confdata.c
处理默认配置。- 具体来说,
conf_read_simple()
读取configs/mx6ull_14x14_evk_defconfig
并填充symbol
结构体中的默认值。
-
生成
.config
文件- 解析
Kconfig
,应用mx6ull_14x14_evk_defconfig
中的选项,并最终生成.config
。 .config
记录了所有的 U-Boot 编译选项。
- 解析
2. Kconfig
的作用
Kconfig
是 U-Boot 的配置文件,定义了各种可配置的编译选项,如:config SYS_BOARDstringdefault "mx6ull_14x14_evk"
- 这些选项在
conf.c
和expr.c
代码中解析,最终存储在.config
文件中。
3. .config
文件的生成过程
(1) 解析 defconfig
conf_read_simple()
读取configs/mx6ull_14x14_evk_defconfig
,解析Kconfig
并填充symbol
结构。
(2) 处理 Kconfig 逻辑
-
conf.c
:conf()
遍历Kconfig
的菜单结构menu
,调用conf_choice()
或conf_sym()
处理不同类型的配置项。
-
expr.c
:expr_alloc_symbol()
创建symbol
结构体并存储Kconfig
变量信息。expr_trans_bool()
进行布尔值转换,确保依赖关系正确。
(3) 生成 .config
conf_write()
负责写.config
,格式如下:CONFIG_SYS_BOARD="mx6ull_14x14_evk" CONFIG_FOO=y # CONFIG_BAR is not set
conf_set_sym_val()
负责格式化symbol
数据并写入文件。
总结
make mx6ull_14x14_evk_defconfig
触发conf.c
解析configs/mx6ull_14x14_evk_defconfig
。conf_read_simple()
读取Kconfig
并解析所有选项。expr.c
解析 Kconfig 表达式并设置symbol
值。conf_write()
生成.config
,存储最终的 U-Boot 编译选项。