1 概述
内核编译时会根据内核目录下的.config 文件进行编译,而进行内核配置时实际上就是修改.config 文件。一般常见的硬件平台在内核目录 arch/<平台>/configs/文件夹下会包含有默认的配置文件,可以使用 cp 命令将其覆盖内核根目录下的.config 文件。
在编译前都必须使用配置命令在内核根目录下进行一次配置(即使是使用默认的配置文件也必须这样做)。而配置命令有以下几种:
- Kconfig 是'规则',定义所有可配置项;
- deconfig 是'模板',提供快速初始化配置;
- .config 是'结果',包含最终编译所需的完整配置;
- 配置工具是'桥梁',连接规则与结果,确保依赖关系正确。
通过这一套体系,Linux 内核实现了高度可定制化,支持从嵌入式设备到服务器的广泛场景。
make ARCH=<平台> config #比较繁琐,不推荐
make ARCH=<平台> oldconfig #常用于内核升级,提示新内核特性
make ARCH=<平台> menuconfig #常用
make ARCH=<平台> xconfig #X 界面的配置方式
make ARCH=<平台> gconfig #GTK 界面的配置方式
make ARCH=<平台> defconfig #使用默认的配置
make ARCH=<平台> allyesconfig #所有配置选项设置为 yes
make ARCH=<平台> allmodconfig #所有选项配置为 module
在配置时,每一项都有几种选项,分别为 Y,N,M。
Y : 代表将此项编译入内核中 N : 代表不将此项编译 M : 代表将此项编译为模块,在需要使用到的时候再加载入内核

2 操作技巧
- 基于现有配置修改
cp /boot/config-$(uname -r) .config # 复制当前系统配置
make menuconfig # 基于现有配置修改
- 预设配置选项
scripts/config --set-val CONFIG_XXX y # 命令行修改配置
make olddefconfig # 应用默认值填充未设置的选项
make savedefconfig #当前的配置到一个默认配置文件 defconfig 中
- 配置差异分析
diff .config.old .config.new # 比较两个配置文件差异
- 环境变量预设
export KCONFIG_CONFIG=myconfig
KCONFIG_OVERWRITECONFIG=1



