Linux内核顶层Makefile的make xxx_defconfig过程分析二

一.  Linux内核的配置工作

本文具体分析 配置 Linux内核源码时,顶层 Makefile实际做的事。

本文续上一篇文章的分析,地址如下:

Linux内核顶层Makefile的make xxx_defconfig过程分析一_凌肖战的博客-CSDN博客

二.  make xxx_defconfig过程

上一篇文章,分析出来:

当 配置 Linux内核源码(即执行 "make xxx_defconfig"命令)时,顶层 Makefile实际执行如下命令:

    make -f ./scripts/Makefile.build obj= scripts/basic 
    make -f ./scripts/Makefile.build obj= scripts/kconfig xxx_defconfig


下面分析这两条命令具体做了什么?具体分为两条命令,也就实现两个功能。

1.  scripts_basic 目标对应的命令

scripts_basic 目标对应的命令为:
make -f ./scripts/Makefile.build obj= scripts/basic 
打开文 scripts/Makefile.build ,有如下代码:
41 # The filename Kbuild has precedence over Makefile
42 kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
43 kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuilddir)/Kbuild,$(kbuild-dir)/Makefile)
44 include $(kbuild-file)
将 上述命令 展开后为:
kbuild-dir=./scripts/basic
kbuild-file= ./scripts/basic/Makefile
include ./scripts/basic/Makefile

继续分析 scripts/Makefile.build ,如下代码:
94 __build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target)
$(extra-y)) \
95 $(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \
96 $(subdir-ym) $(always)
97 @:

_build 是默认目标,因为命令“@make -f ./scripts/Makefile.build obj=scripts/basic” 没有指定目标,所以会使用到默认目标__build
在顶层 Makefile 中,KBUILD_BUILTIN 为 1, KBUILD_MODULES 为空,因此展开后目标__build 为:
__build:$(builtin-target) $(lib-target) $(extra-y)) $(subdir-ym) $(always)
@:

可以看出目标 __build 5 个依赖: builtin-target lib-target extra-y subdir-ym always
5 个依赖的具体内容如下:
builtin-target =
lib-target =
extra-y =
subdir-ym =
always = scripts/basic/fixdep scripts/basic/bin2c

因此__build 最终为:
__build: scripts/basic/fixdep scripts/basic/bin2c
@:
__build 依赖于 scripts/basic/fixdep scripts/basic/bin2c ,所以要先将 scripts/basic/fixdep
scripts/basic/bin2c.c 这两个文件编译成 fixdep bin2c

综上所述,scripts_basic 目标的作用就是编译出 scripts/basic/fixdep 和 scripts/basic/bin2c 这
两个软件。

下一篇文章继续分析第二条命令的功能。

猜你喜欢

转载自blog.csdn.net/wojiaxiaohuang2014/article/details/133109196