在编译 uboot 之前要使用 “make xxx_defconfig”命令 来配置 uboot,那么这个配置过程是如
本文来学习 uboot 源码在执行 make xxx_deconfig 这个配置过程中,顶层 Makefile的执行思路。
在编译 uboot源码时,执行了配置 uboot命令,即运行了 "make xxx_deconfig" 类似的命令,不同版本的开发板(NAND/EMMC)使用的配置文件不同。
473 KBUILD_DEFCONFIG := sandbox_defconfig
474 export KBUILD_DEFCONFIG KBUILD_KCONFIG
475
476 config: scripts_basic outputmakefile FORCE
477 $(Q)$(MAKE) $(build)=scripts/kconfig $@
478
479 %config: scripts_basic outputmakefile FORCE
480 $(Q)$(MAKE) $(build)=scripts/kconfig $@
上面 Makefile内容可以看出,当执行了 配置uboot命令后,顶层 Makefile 就会匹配到 479行代码,即 %config 目标,而目标 “%config” 依赖于 scripts_basic、outputmakefile 和 FORCE。
下面重点了解顶层 Makefile的如下内容:
%config: scripts_basic outputmakefile FORCE
$(Q)$(MAKE) $(build)=scripts/kconfig $@
1613 PHONY += FORCE
1614 FORCE:
406 PHONY += outputmakefile
407 # outputmakefile generates a Makefile in the output directory, if using a
408 # separate output directory. This allows convenient use of make in the
409 # output directory.
410 outputmakefile:
411 ifneq ($(KBUILD_SRC),)
412 $(Q)ln -fsn $(srctree) source
413 $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
414 $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
415 endif
mytest:
@echo KBUILD_SRC= $(KBUILD_SRC)
进入 uboot源码根目录,根目录输入如下命令测试:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/uboot/alientek_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga_alientek$ make mytest
KBUILD_SRC=
398 PHONY += scripts_basic
399 scripts_basic:
400 $(Q)$(MAKE) $(build)=scripts/basic
401 $(Q)rm -f .tmp_quiet_recordmcount
402
403 # To avoid any implicit rule to kick in, define an empty command.
404 scripts/basic/%: scripts_basic ;
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/uboot/alientek_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga_alientek$ make mytest
Q= @
MAKE= make
178 # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
179 # Usage:
180 # $(Q)$(MAKE) $(build)=dir
181 build := -f $(srctree)/scripts/Makefile.build obj
build=-f ./scripts/Makefile.build obj
scripts_basic:
@make -f ./scripts/Makefile.build obj=scripts/basic //也可以没有@,视配置而定
@rm -f . tmp_quiet_recordmcount //也可以没有@
%config: scripts_basic outputmakefile FORCE
$(Q)$(MAKE) $(build)=scripts/kconfig $@
make -f ./scripts/Makefile.build obj=scripts/kconfig xxx_defconfig
%config:make -f ./scripts/Makefile.build obj=scripts/basic
make -f ./scripts/Makefile.build obj=scripts/kconfig xxx_defconfig
从命令可以看出,scripts_basic 会调用文件 ./scripts/Makefile.build,第二条命令同样也会涉及 文件 ./scripts/Makefile.build。
下一篇文章继续了解 Makefile 有关 "make xxx_config"配置过程,具体了解 %config命令涉及调用到的文件 ./scripts/Makefile.build。