探索Linux内核:Kconfig的秘密

2019-01-16 21:08:55王振洲

深入了解Linux配置/构建系统是如何工作的。

自从Linux内核代码迁移到Git之后,Linux内核配置/构建系统(也称为Kconfig/kBuild)已经存在了很长时间。然而,作为支持基础设施,它很少受到关注;即使在日常工作中使用它的内核开发人员也从未真正考虑过它。

为了探索Linux内核是如何编译的,本文将深入研究Kconfig/kBuild内部进程,解释.config文件和vmlinux/bzImage文件是如何生成的,并介绍一个用于依赖性跟踪的智能技巧。

Kconfig

构建内核的第一步总是配置。Kconfig帮助使Linux内核高度模块化和可定制。Kconfig为用户提供了许多配置目标:

config 使用面向行的程序更新当前配置
nconfig 使用基于ncurses菜单的程序更新当前配置
menuconfig 使用基于菜单的程序更新当前配置
xconfig 利用基于qt的前端更新当前配置
gconfig 利用基于GTK+的前端更新当前配置
oldconfig 使用提供的.config作为基础更新当前配置
localmodconfig 更新未加载的当前配置禁用模块
localyesconfig 更新当前配置,将本地MODS转换为核心
defconfig 从Arch提供的Defconfig中获得默认配置的新配置
Savedefconfig 将当前配置保存为./defconfig(最小配置)
allnoconfig 使用“no”回答所有选项的新配置
allyesconfig 新配置,在该配置中,所有选项都以“是”接受
allmodconfig 在可能的情况下选择新的配置模块
alldefconfig 将所有符号设置为默认值的新配置
randconfig 具有对所有选项的随机答案的新配置
listnewconfig 列出新选项
olddefconfig 与oldconfig相同,但在不提示的情况下将新符号设置为默认值
kvmconfig 为kvm客户端内核支持启用其他选项
xenconfig 启用Xen dom0和来宾内核支持的其他选项
tinyconfig 配置尽可能小的内核