深入了解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 | 配置尽可能小的内核 |








