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位的默认配置,执行下面命令即可:
如果想使用Samsung的S5PV210平台的默认配置,则使用如下命令:
如果对这些内核内置的默认配置依然不满意,kbuild还提供了创建一个最小配置的方法,从某种意义上讲,这是最彻底的定制方式了,命令如下:
执行该命令后,内核除了选中必选项外,其余全部不选。我们举个例子来展示这个配置方式,例如某Kconfig文件中有如下配置:
如果我们在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如下:
在本书中,我们基于make allnoconfig的结果开始配置内核,命令如下:
接下来各节中,我们以这个基本配置为基础,按照需要进行具体的配置。希望读者可以通过这个过程的学习,能够做到举一反三,在具体的项目中进行最优的配置。