Análisis del proceso make xxx_defconfig del Makefile de nivel superior del kernel de Linux 2

1. Trabajo de configuración del kernel de Linux

Este artículo analiza específicamente lo que realmente hace el Makefile de nivel superior al configurar el código fuente del kernel de Linux.

Este artículo continúa el análisis del artículo anterior, la dirección es la siguiente:

Análisis del proceso make xxx_defconfig del Makefile de nivel superior del kernel de Linux 1_Blog-CSDN de Ling Xiaozhan

2. hacer el proceso xxx_defconfig

Artículo anterior, analizado:

Al configurar el código fuente del kernel de Linux (es decir, ejecutar el comando "make xxx_defconfig"), el Makefile de nivel superior en realidad ejecuta el siguiente comando:

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


Analicemos qué hacen exactamente estos dos comandos. Específicamente dividido en dos comandos, se implementan dos funciones.

1. Comando correspondiente al destino scripts_basic

Los comandos correspondientes al destino scripts_basic son:
make -f ./scripts/Makefile.build obj= scripts/basic 
Abra el archivo scripts/Makefile.build y tenga el siguiente código:
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)
El comando anterior se expande a:
kbuild-dir=./scripts/basic
kbuild-file= ./scripts/basic/Makefile
include ./scripts/basic/Makefile

Continúe analizando scripts/Makefile.build , el siguiente código:
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 es el destino predeterminado. Debido a que el comando "@make -f ./scripts/Makefile.build obj=scripts/basic" no especifica un destino, se utilizará el destino predeterminado __build .
En el Makefile de nivel superior, KBUILD_BUILTIN es 1 y KBUILD_MODULES está vacío, por lo que el objetivo expandido __build es:
__build:$(builtin-target) $(lib-target) $(extra-y)) $(subdir-ym) $(always)
@:

Se puede ver que el objetivo __build tiene 5 dependencias: buildin-target , lib-target , extra-y , subdir-ym y siempre .
Los contenidos específicos de estas cinco dependencias son los siguientes:
builtin-target =
lib-target =
extra-y =
subdir-ym =
always = scripts/basic/fixdep scripts/basic/bin2c

Entonces __build termina siendo:
__build: scripts/básico/fixdep scripts/basic/bin2c
@:
__build depende de scripts/basic/fixdep y scripts/basic/bin2c , por lo que primero debe agregar scripts/basic/fixdep y
Los dos archivos scripts/basic/bin2c.c se compilan en fixdep y bin2c .

En resumen, la función de scripts_basic target es compilar scripts/basic/fixdep y scripts/basic/bin2c.
Dos programas.

El siguiente artículo continúa analizando la función del segundo comando.

おすすめ

転載: blog.csdn.net/wojiaxiaohuang2014/article/details/133109196