make XXX_defconfig 分析

1 %config:

首先看顶层Makefile
line495:

%config: scripts_basic outputmakefile FORCE
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

经搜索可知outputmakefile FORCE均为空。
$(build)的定义在:scripts/Kbuild.include.
经替换,build := -f scripts/Makefile.build obj

因此line495 变为:

XXX_config: scripts_basic
	@make -f scripts/Makefile.build obj=scripts/kconfig XXX_config

1.1 依赖条件 scripts_basic:

再看依赖条件scripts_basic,
line414:

scripts_basic:
	$(Q)$(MAKE) $(build)=scripts/basic
	$(Q)rm -f .tmp_quiet_recordmcount

经替换:

scripts_basic:
	@make -f scripts/Makefile.build obj=scripts/basic
	@rm -f .tmp_quiet_recordmcount

该make命令的实际效果是去编译出 scripts/basic 目录下的三个 host program,也就是 fixdep docproc和hash。一般认为,host program是和内核无关,但是要在编译过程中使用的工具程序。

1.2 执行命令

再看line495 的命令:
@make -f scripts/Makefile.build obj=scripts/kconfig XXX_config
scripts/Makefile.build 会包含obj所指的目录下的Makefile,也即scripts/kconfig/Makefile,在该文件中可以找到:

%_defconfig: $(obj)/conf
	$(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)

经替换:

XXX_config:scripts/kconfig/conf
	@scripts/kconfig/conf --defconfig=arch/arm/configs/XXX_config Kconfig

这个命令就是读取并解析以 arch/arm/Kconfig 为首的内核功能选项配置文件,并将文件 arch/arm/configs/s3c2410_defconfig 所设置的默认值分配给对应的所有选项,最终生成隐藏配置文件 .config。

在 uboot 或内核开始真正编译之前,构建系统会以 .config 文件为蓝本生成 include/config/auto.conf 文件,这个文件的格式和 .config类似,这个文件会在顶层 以及 scripts/Makefile.build 文件中被直接包含进来,所以这些变量其实就成了 GNU Make 的变量。

参考:
https://www.cnblogs.com/idyllcheung/p/11206881.html
https://www.cnblogs.com/humaoxiao/p/4188015.html

你可能感兴趣的:(make,make)