3.2.2 构建过程概述

在编译内核时,通常我们只需要执行"make bzImage",或者make后面不接任何目标。在没有接目标时,构建的内核映像也是bzImage。读者自然会问:我们并没有指定构建vmlinux、vmlinux.bin和setup.bin,最后的bzImage是怎么来的呢?

虽然我们没有显示指定这几部分的构建,但是读者想必已经猜出来了,这是Makefile的依赖的魔法。下面是构建bzImage的规则,我们暂且不讨论它的由来,先把焦点放在bzImage的依赖关系上:

3.2.2 构建过程概述 - 图1

根据构建规则可见,bzImage依赖于setup.bin和vmlinux.bin,所以在构建bzImage前,make将自动先去构建它们,以此类推,vmlinux的构建也是同样的道理。因此,组成内核映像的各个部分的构建顺序如下:

1)构建有效载荷vmlinux,并将其压缩为vmlinux.bin.gz;

2)构建二级推进系统,并将二级推进系统装配到有效载荷上,组成vmlinux.bin;

3)构建一级推进系统,即构建setup.bin;

4)将setup.bin和vmlinux.bin组合为bzImage。

接下来我们就依次讨论各个部分的构建过程。