make syncconfig V=1分析

make syncconfig

# 顶层 Makefile
94 	ifeq ("$(origin V)", "command line")
95 	  KBUILD_VERBOSE = $(V)
96 	endif
97 	ifndef KBUILD_VERBOSE
98 	  KBUILD_VERBOSE = 0
99 	endif
100
101	ifeq ($(KBUILD_VERBOSE),1)
102	  quiet =
103	  Q =
104	else
105	  quiet=quiet_
106	  Q = @
107	endif
......	
563	%config: scripts_basic outputmakefile FORCE
564		$(Q)$(MAKE) $(build)=scripts/kconfig $@
......
2318 FORCE:

执行命令 make syncconfig V=1 时,94行条件成立,KBUILD_VERBOSE = 1,则101行条件成立,quiet 和 Q 为空,则输出整个命令。
在顶层Makefile的 <386行> 引用scripts/Kbuild.include,其中有如下定义:

# scripts/Kbuild.include 
184	build := -f $(srctree)/scripts/Makefile.build obj

最终展开为:

# make syncconfig V=1
# 顶层 Makefile
563	syncconfig: scripts_basic outputmakefile FORCE
564		make -f ./scripts/Makefile.build obj=scripts/kconfig syncconfig

由上可知,依赖关系如下图所示:
在这里插入图片描述

  1. 创建目标syncconfig,见下面《3. 创建目标 syncconfig》 回显 4-10
    1.1 创建 scripts_basic ,见下面《1. 创建 scripts_basic》 回显 1-3
    1.2 创建 outputmakefile,见下面《2. 创建 outputmakefile》,什么都不做
    1.3 创建 FORCE,什么都不做


最终:

  1. 执行命令:make -f ./scripts/Makefile.build obj=scripts/basic 回显 1
    1.1 打印和执行 $(cmd_host-csingle) 命令,将创建scripts/basic/fixdep 所用的命令、源码、头文件等信息全部写入到 scripts/basic/.fixdep.cmd文件中。 回显 2
  2. 执行命令:rm -f .tmp_quiet_recordmcount 回显 3
  3. 执行命令make -f ./scripts/Makefile.build obj=scripts/kconfig syncconfig 回显 4
    3.1 打印和执行 $(cmd_host-cobjs)命令,并将创建scripts/kconfig/conf.o 所用的命令、源码、头文件等信息全部写入到 scripts/kconfig/.conf.o.cmd 文件中。 回显 5
    3.2 打印和执行$(cmd_bison)命令,并将cmd_scripts/kconfig/zconf.tab.c := $(cmd_bison)的内容输入到 scripts/kconfig/.zconf.tab.c.cmd 文件中。 回显 6
    3.3 打印和执行$(cmd_flex)命令,并将cmd_scripts/kconfig/flex.lex.c := $(cmd_flex)的内容输入到 scripts/kconfig/.zconf.lex.c.cmd 文件中。 回显 7
    3.4 打印和执行 $(cmd_host-cobjs)命令,并将创建$(obj)/zconf.tab.o 所用的命令、源码、头文件等信息全部写入到 scripts/kconfig/.zconf.tab.o.cmd 文件中。 回显 8
    3.5 打印和执行 $(cmd_host-cmulti)命令,并将 cmd_scripts/Kconfig/conf := $(cmd_host-cmulti) 的内容输入到 scripts/Kconfig/.conf.cmd 文件中。 回显 9
    3.6 打印和执行命令:scripts/kconfig/conf --syncconfig Kconfig《2. conf 工具》,执行结果如下: 回显 10
      3.6.1 创建include/config/auto.conf
      3.6.2 创建include/config/auto.conf.cmd
      3.6.3 创建include/config/tristate.conf
      3.6.4 创建include/generated/autoconf.h


回显 1-10

1 make -f ./scripts/Makefile.build obj=scripts/basic
2   cc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11     -o scripts/basic/fixdep scripts/basic/fixdep.c   
3 rm -f .tmp_quiet_recordmcount
4 make -f ./scripts/Makefile.build obj=scripts/kconfig syncconfig
5   cc -Wp,-MD,scripts/kconfig/.conf.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11     -c -o scripts/kconfig/conf.o scripts/kconfig/conf.c
6   bison -oscripts/kconfig/zconf.tab.c -t -l scripts/kconfig/zconf.y
7   flex -oscripts/kconfig/zconf.lex.c -L scripts/kconfig/zconf.l
8   cc -Wp,-MD,scripts/kconfig/.zconf.tab.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -Iscripts/kconfig -c -o scripts/kconfig/zconf.tab.o scripts/kconfig/zconf.tab.c
9   cc   -o scripts/kconfig/conf scripts/kconfig/conf.o scripts/kconfig/zconf.tab.o   
10 scripts/kconfig/conf --syncconfig Kconfig

创建:
创建 scripts/basic/fixdep 回显 2
创建 scripts/basic/.fixdep.cmd 回显 2
创建 scripts/kconfig/conf.o 回显 5
创建 scripts/kconfig/.conf.o.cmd 回显 5
创建 scripts/kconfig/zconf.tab.c 回显 6
创建 scripts/kconfig/.zconf.tab.c.cmd 回显 6
创建 scripts/kconfig/zconf.lex.c 回显 7
创建 scripts/kconfig/.zconf.lex.c.cmd 回显 7
创建 scripts/kconfig/zconf.tab.o 回显 8
创建 scripts/kconfig/.zconf.tab.o.cmd 回显 8
创建 scripts/kconfig/conf 回显 9
创建 scripts/kconfig/.conf.cmd 回显 9
创建 include/config/auto.conf 回显 10
创建 include/config/auto.conf.cmd 回显 10
创建 include/config/tristate.conf 回显 10
创建 include/generated/autoconf.h 回显 10

1. 创建 scripts_basic

# 顶层 Makefile
386 include scripts/Kbuild.include
......
481	scripts_basic:
482		$(Q)$(MAKE) $(build)=scripts/basic
483		$(Q)rm -f .tmp_quiet_recordmcount

在顶层Makefile的 <386行> 引用scripts/Kbuild.include,其中有如下定义:

# scripts/Kbuild.include 
184	build := -f $(srctree)/scripts/Makefile.build obj

$(srctree)在顶层 Makefile 中定义为srctree = .,所以展开后为:

# 顶层 Makefile
481 scripts_basic:
482 	make -f ./scripts/Makefile.build obj=scripts/basic
483 	rm -f .tmp_quiet_recordmcount

由上可知,目标无依赖,接下来执行目标的创建语句即可。

  1. 执行命令:make -f ./scripts/Makefile.build obj=scripts/basic 回显 1
    《1. make -f ./scripts/Makefile.build obj=XXX》 分析可知:
    1.1 在《1.1 引用文件》中引用scripts/basic/Makefilescripts/Makefile.libscripts/Makefile.host等,由此可知:
    $(builtin-target):$(obj-y) 、$(obj-m) 、$(obj-)、 $(subdir-m) 、$(lib-target)未定义为空
    $(lib-target):$(lib-y)、$(lib-m)、$(lib-)未定义为空
    $(extra-y):未定义为空
    $(subdir-ym):未定义为空
    $(always) := $(obj)/fixdep
    2.2. 由步骤1中的定义可知,《1.2 创建 $(builtin-target)》,什么都不做;
    2.3. 由步骤1中的定义可知,《1.3 创建 $(lib-target)》,什么都不做;
    2.4. 由步骤1中的定义可知,《1.4 创建 $(extra-y)》,什么都不做;
    2.5. 由步骤1中的定义可知,《1.5 创建 $(subdir-ym)》,什么都不做;
    2.6. 由步骤1中的定义可知, 《1.6 创建 $(always)》,什么都不做;
    《1. 目标 $(obj)/fixdep》分析可知:
    打印和执行 $(cmd_host-csingle) 命令,将创建scripts/basic/fixdep 所用的命令、源码、头文件等信息全部写入到 scripts/basic/.fixdep.cmd文件中。 回显 2
  2. 执行命令:rm -f .tmp_quiet_recordmcount 回显 3


最终:

  1. 执行命令:make -f ./scripts/Makefile.build obj=scripts/basic 回显 1
  2. 打印和执行 $(cmd_host-csingle) 命令,将创建scripts/basic/fixdep 所用的命令、源码、头文件等信息全部写入到 scripts/basic/.fixdep.cmd文件中。 回显 2
  3. 执行命令:rm -f .tmp_quiet_recordmcount 回显 3


回显 1-3

1 make -f ./scripts/Makefile.build obj=scripts/basic
2   cc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11     -o scripts/basic/fixdep scripts/basic/fixdep.c   
3 rm -f .tmp_quiet_recordmcount

创建:
创建 scripts/basic/fixdep 回显 2
创建 scripts/basic/.fixdep.cmd 回显 2

2. 创建 outputmakefile

# 顶层 Makefile
492	outputmakefile:
493	ifneq ($(KBUILD_SRC),)
494		$(Q)ln -fsn $(srctree) source
495		$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
496			$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
497	endif

当输入make O=dir时,KBUILD_SRC=dir,由于这里没有O=,所以第493行条件不成立,这里什么都不做。

3. 创建目标 syncconfig

# make syncconfig V=1
# 顶层 Makefile
563	syncconfig: scripts_basic outputmakefile FORCE
564		make -f ./scripts/Makefile.build obj=scripts/kconfig syncconfig

《1. 创建 scripts_basic》《2. 创建 outputmakefile》可知,目标的所有依赖都已创建,接下来执行目标的创建命令即可。 回显 4


最终:< 4. make -f ./scripts/Makefile.build obj=scripts/kconfig syncconfig > 分析可知:

  1. 打印和执行 $(cmd_host-cobjs)命令,并将创建scripts/kconfig/conf.o 所用的命令、源码、头文件等信息全部写入到 scripts/kconfig/.conf.o.cmd 文件中。 回显 5
  2. 打印和执行$(cmd_bison)命令,并将cmd_scripts/kconfig/zconf.tab.c := $(cmd_bison)的内容输入到 scripts/kconfig/.zconf.tab.c.cmd 文件中。 回显 6
  3. 打印和执行$(cmd_flex)命令,并将cmd_scripts/kconfig/flex.lex.c := $(cmd_flex)的内容输入到 scripts/kconfig/.zconf.lex.c.cmd 文件中。 回显 7
  4. 打印和执行 $(cmd_host-cobjs)命令,并将创建$(obj)/zconf.tab.o 所用的命令、源码、头文件等信息全部写入到 scripts/kconfig/.zconf.tab.o.cmd 文件中。 回显 8
  5. 打印和执行 $(cmd_host-cmulti)命令,并将 cmd_scripts/Kconfig/conf := $(cmd_host-cmulti) 的内容输入到 scripts/Kconfig/.conf.cmd 文件中。 回显 9
  6. 打印和执行命令:scripts/kconfig/conf --syncconfig Kconfig《2. conf 工具》 回显 10
    执行结果如下:
    6.1 创建include/config/auto.conf
    6.2 创建include/config/auto.conf.cmd
    6.3 创建include/config/tristate.conf
    6.4 创建include/generated/autoconf.h


回显 4-10

4  make -f ./scripts/Makefile.build obj=scripts/kconfig syncconfig
5   cc -Wp,-MD,scripts/kconfig/.conf.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11     -c -o scripts/kconfig/conf.o scripts/kconfig/conf.c
6   bison -oscripts/kconfig/zconf.tab.c -t -l scripts/kconfig/zconf.y
7   flex -oscripts/kconfig/zconf.lex.c -L scripts/kconfig/zconf.l
8   cc -Wp,-MD,scripts/kconfig/.zconf.tab.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -Iscripts/kconfig -c -o scripts/kconfig/zconf.tab.o scripts/kconfig/zconf.tab.c
9   cc   -o scripts/kconfig/conf scripts/kconfig/conf.o scripts/kconfig/zconf.tab.o   
10 scripts/kconfig/conf --syncconfig Kconfig

创建:
创建 scripts/kconfig/conf.o 回显 5
创建 scripts/kconfig/.conf.o.cmd 回显 5
创建 scripts/kconfig/zconf.tab.c 回显 6
创建 scripts/kconfig/.zconf.tab.c.cmd 回显 6
创建 scripts/kconfig/zconf.lex.c 回显 7
创建 scripts/kconfig/.zconf.lex.c.cmd 回显 7
创建 scripts/kconfig/zconf.tab.o 回显 8
创建 scripts/kconfig/.zconf.tab.o.cmd 回显 8
创建 scripts/kconfig/conf 回显 9
创建 scripts/kconfig/.conf.cmd 回显 9
创建 include/config/auto.conf 回显 10
创建 include/config/auto.conf.cmd 回显 10
创建 include/config/tristate.conf 回显 10
创建 include/generated/autoconf.h 回显 10

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值