在内核编译中如何将各个目录树中的文件组织起来编译是一个很重要的问题,并且要根据用户配置来编译特有的内核。为了解决这个问题,内核使用两种文件,Makefile和 Kconfig。分布到各目录的 Kconfig构成了个分布式的内核配置数据库,每个 Kconfig分别描述了所属目录源文档相关的内核配置菜单,就是我们使用命令 make menuconfig(或者 xconfig)后产生的配置菜单,此菜单包含多层,每个层次都是由各个目录中的Kconfig产生的。用户根据需求来选择如何编译内核,然后将配置结果保存到 config中,然后执行 Makefile时就会根据 onfig的结果来实现内核的编译。
这个过程是由 kbuild系统来完成的,Linux编译系统会两次扫描 Linux的 Makefile:首先编译系统会读取 Linux内核顶层的 Makefile,然后根据读到的内容第二次读取 Kbuild的 Makefile来编译 Linux内核。内核编译系统或者说 kbuild,是一种在编译內核时,可以对内核配置选项进行选择的机制。2.6内核树中已经更新了这种机制,新版本的 kbuild不仅高速而且备有更完善的文档。Kbuild机制完全依赖于源代码的层次结构。
Kconfig的作用就是为了让用户配置内核,在Kconfig中定义了一些变量,用户通过设置变量的值来选择如何个性化自己的系统內核。定义的变量将在
每个菜单都有一个关键字标识,最常见的就是contig