3.3.2 基本内核配置

编译内核的第一步是配置内核,但是在我们使用的这一版的内核中,有成千上万的配置项,并且很多配置项彼此之间存在着非常紧密的依赖关系,如果从零开始一项一项地配置,显然不是一个好办法。

幸运的是,在很多情况下,我们都会有一个目标系统的老版本内核配置文件,而不必每次都从零开始。在此种情况下,首先将已有的内核配置文件复制到顶层目录下,并命名为.config;然后运行make oldconfig,其将会询问用户如何处理变动的内核配置;最后用户可以使用make menuconfig进行微调。虽然内核提供make oldconfig的方法,但是这些方法并不是完美的,读者需要小心处理新内核中新增或改变的配置项。

但是也有很多情况,已有配置并不理想,我们需要进行更彻底定制,或者我们根本找不到一个合适的已有配置。难道我们就别无选择,只能从零开始了吗?当然不是,内核构建系统已经为开发者考虑了这些。

一方面内核为很多平台附带了默认配置文件,保存在arch/<arch>/configs目录下,其中<arch>对应具体的架构,如x86、arm或者mips等。比如,对于x86架构,内核分别提供了32位和64位的配置文件,即i386_defconfig和x86_64_defconfig;对于arm架构,内核提供了如NVIDA的Tegra平台的默认配置tegra_defconfig,Samsung的S5PV210平台的默认配置s5pv210_defconfig等。

如果我们打算使用x86的32位的默认配置,执行下面命令即可:

3.3.2 基本内核配置 - 图1

如果想使用Samsung的S5PV210平台的默认配置,则使用如下命令:

3.3.2 基本内核配置 - 图2

如果对这些内核内置的默认配置依然不满意,kbuild还提供了创建一个最小配置的方法,从某种意义上讲,这是最彻底的定制方式了,命令如下:

3.3.2 基本内核配置 - 图3

执行该命令后,内核除了选中必选项外,其余全部不选。我们举个例子来展示这个配置方式,例如某Kconfig文件中有如下配置:

3.3.2 基本内核配置 - 图4

3.3.2 基本内核配置 - 图5

如果我们在IA32上执行"make allnoconfig",则内核构建系统基本按照如下规则处理上述各配置项。

❑config A:无条件选中。

❑config B:不会被选中,因为平台不是X86_64架构。

❑config C:无条件选中。另外,因为该选项明确要求选中D,所以选项D也会被选中。

❑config E:不会被选中。

❑config F:不会被选中。虽然该选项指出默认值"default y",但是注意"default y"和"def_bool y"是有本质区别的,"def_bool y"是无条件选中,"default y"只是建议。

执行make allnoconfig后,生成的配置文件.config如下:

3.3.2 基本内核配置 - 图6

在本书中,我们基于make allnoconfig的结果开始配置内核,命令如下:

3.3.2 基本内核配置 - 图7

接下来各节中,我们以这个基本配置为基础,按照需要进行具体的配置。希望读者可以通过这个过程的学习,能够做到举一反三,在具体的项目中进行最优的配置。