内核的配置和编译大致涉及三类主要文件:Kconfig、.config、Makefile。它们之间的关系大致可用下图描述;
1. Kconfig(详细内容可参见kbuild/kconfig_language.txt)
内核配置选项的源文件。arch/$(ARCH)/Kconfig是主Kconfig文件,与具体体系结构有关,主Kconfig会调用其他子目录的Kconfig文件,其他的Kconfig文件会调用各级目录的Kconfig文件,形成树状结构。需要注意的是只有被依赖选项已经选中,自选项才会显示。
2. .config
最终编译的内核配置选项,主要生成方式有两种:
a)由make xxxconfig进行配置保存后生成
make config #通过命令行更新配置文件
make menuconfig #通过菜单程序更新配置文件
make xconfig #通过QT图形界面更新配置文件
make gconfig #通过GTK图形界面更新配置文件
make oldconfig #使用已提供的.config配置文件
make randconfig #使用随机配置的配置文件
make defconfig #使用缺省配置
make allmodconfig #配置选项尽可能选"m"
make allyesconfig #配置选项尽可能选"y"
make allnoconfig #配置选项尽可能选"n"
b)复制arch/$(ARCH)/configs/xxx_defconfig默认配置
cp arch/$(ARCH)/configs/xxx_defconfig .config
3.Makefile(详细内容可参见kbuild/Makefile.txt)
定义了配置和编译的规则。arch/$(ARCH)/Makefile文件,与具体体系结构相关,主Makefile会读取.config文件中的配置选项编译内核镜像vmlinux以及所有的模块文件module,它递归地遍历所有内核源码树中的所有子目录,编译所有目标文件。