make menuconfig 分析

文章目录

make menuconfig V=1

make menuconfig V=1:

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 menuconfig
5 	set -e; mkdir -p scripts/kconfig/; 	/bin/bash scripts/kconfig/mconf-cfg.sh < scripts/kconfig/mconf-cfg.sh > scripts/kconfig/.mconf-cfg.tmp; if [ -r scripts/kconfig/.mconf-cfg ] && cmp -s scripts/kconfig/.mconf-cfg scripts/kconfig/.mconf-cfg.tmp; then rm -f scripts/kconfig/.mconf-cfg.tmp; else : '  UPD     scripts/kconfig/.mconf-cfg'; mv -f scripts/kconfig/.mconf-cfg.tmp scripts/kconfig/.mconf-cfg; fi
6 	  cc -Wp,-MD,scripts/kconfig/.mconf.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/mconf.o scripts/kconfig/mconf.c
7 	  bison -oscripts/kconfig/zconf.tab.c -t -l scripts/kconfig/zconf.y
8 	  flex -oscripts/kconfig/zconf.lex.c -L scripts/kconfig/zconf.l
9 	  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
10	  cc -Wp,-MD,scripts/kconfig/lxdialog/.checklist.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/checklist.o scripts/kconfig/lxdialog/checklist.c
11	  cc -Wp,-MD,scripts/kconfig/lxdialog/.inputbox.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/inputbox.o scripts/kconfig/lxdialog/inputbox.c
12	  cc -Wp,-MD,scripts/kconfig/lxdialog/.menubox.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/menubox.o scripts/kconfig/lxdialog/menubox.c
13	  cc -Wp,-MD,scripts/kconfig/lxdialog/.textbox.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/textbox.o scripts/kconfig/lxdialog/textbox.c
14	  cc -Wp,-MD,scripts/kconfig/lxdialog/.util.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/util.o scripts/kconfig/lxdialog/util.c
15	  cc -Wp,-MD,scripts/kconfig/lxdialog/.yesno.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/yesno.o scripts/kconfig/lxdialog/yesno.c
16	  cc   -o scripts/kconfig/mconf scripts/kconfig/mconf.o scripts/kconfig/zconf.tab.o scripts/kconfig/lxdialog/checklist.o scripts/kconfig/lxdialog/inputbox.o scripts/kconfig/lxdialog/menubox.o scripts/kconfig/lxdialog/textbox.o scripts/kconfig/lxdialog/util.o scripts/kconfig/lxdialog/yesno.o   -Wl,-Bsymbolic-functions -lncursesw -ltinfo
17	scripts/kconfig/mconf  Kconfig
# 顶层 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
......
481	scripts_basic:
482		$(Q)$(MAKE) $(build)=scripts/basic
483		$(Q)rm -f .tmp_quiet_recordmcount
......
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
......	
563	%config: scripts_basic outputmakefile FORCE
564		$(Q)$(MAKE) $(build)=scripts/kconfig $@
......
2318 FORCE:

当在命令行中输入: make menuconfig V=1 时,94行条件成立,KBUILD_VERBOSE = 1,101行条件成立,quiet 和 Q 为空,则输出整个命令。
输入命令自动匹配 563 行,由于目标 %config依赖 scripts_basic outputmakefileFORCE, 所以先生成依赖:

  1. 生成依赖 scripts_basic ,见《make xxxx_defconfig 分析—1.1 生成依赖scripts_basic》,生成 scripts/basic/fixdep, 【回显 1-3 行】
  2. 生成依赖 outputmakefile《make xxxx_defconfig 分析—1.2 生成依赖outputmakefile》,什么都不做
  3. 生成依赖 FORCE,什么都不做


由上面三步可知,目标%config 的所有依赖都已生成,接下来执行目标的生成语句即可。
$(build)在 scripts/Kbuild.include 文件【在顶层Makefile的386行引用】的第184行定义:

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

最终展开为:

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

结果:< 3. make -f ./scripts/Makefile.build obj=scripts/kconfig menuconfig > 分析可知:

  1. 执行 $(src)/mconf-cfg.sh 脚本,并将执行结果写入到$(obj)/.mconf-cfg 文件中。【生成 $(obj)/.mconf-cfg 文件】 【回显 5 行】
  2. 打印和执行$(cmd_host-cobjs),并将实现目标$(obj)/mconf.o所用的命令、源码、头文件等信息全部写入到 $(obj)/.mconf.o.cmd 文件中。 【回显 6 行】
  3. 打印和执行$(cmd_flex),并将cmd_scripts/kconfig/flex.lex.c := $(cmd_flex)的内容输入到 scripts/kconfig/.zconf.lex.c.cmd 文件中。【生成 flex.lex.c 文件】 【回显 8 行】
  4. 打印和执行$(cmd_bison),并将cmd_scripts/kconfig/zconf.tab.c := $(cmd_bison)的内容输入到 scripts/kconfig/.zconf.tab.c.cmd 文件中。【生成 zconf.tab.c 文件】 【回显 7 行】
  5. 打印和执行 $(cmd_host-cobjs),并将实现目标 $(obj)/zconf.tab.o 所用的命令、源码、头文件等信息全部写入到 scripts/kconfig/.zconf.tab.o.cmd 文件中。【生成 zconf.tab.o 文件】 【回显 9 行】
  6. 打印和执行$(cmd_host-cobjs),并将实现目标$(obj)/lxdialog/checklist.o所用的命令、源码、头文件等信息全部写入到 $(obj)/lxdialog/.checklist.cmd 文件中。 【回显 10 行】
  7. 打印和执行$(cmd_host-cobjs),并将实现目标$(obj)/lxdialog/inputbox.o所用的命令、源码、头文件等信息全部写入到 $(obj)/lxdialog/.inputbox.cmd 文件中。 【回显 11 行】
  8. 打印和执行$(cmd_host-cobjs),并将实现目标$(obj)/lxdialog/menubox.o所用的命令、源码、头文件等信息全部写入到 $(obj)/lxdialog/.menubox.cmd 文件中。 【回显 12 行】
  9. 打印和执行$(cmd_host-cobjs),并将实现目标$(obj)/lxdialog/textbox.o所用的命令、源码、头文件等信息全部写入到 $(obj)/lxdialog/.textbox.cmd 文件中。 【回显 13 行】
  10. 打印和执行$(cmd_host-cobjs),并将实现目标$(obj)/lxdialog/checklist.o所用的命令、源码、头文件等信息全部写入到 $(obj)/lxdialog/.util.cmd 文件中。 【回显 14 行】
  11. 打印和执行$(cmd_host-cobjs),并将实现目标$(obj)/lxdialog/yesno.o所用的命令、源码、头文件等信息全部写入到 $(obj)/lxdialog/.yesno.cmd 文件中。 【回显 15 行】
  12. 打印和执行$(cmd_host-cmulti),并将cmd_scripts/kconfig/mconf := $(cmd_host-cmulti)的内容输入到 scripts/kconfig/.mconf.cmd 文件中。【生成 mconf 工具】 【回显 16 行】
  13. 执行scripts/kconfig/mconf Kconfig命令, 【回显 17 行】mconf 工具的使用

相关推荐

  1. 数据分析-概率分布

    2024-06-16 13:10:01       57 阅读
  2. 资料分析

    2024-06-16 13:10:01       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-16 13:10:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-16 13:10:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-16 13:10:01       82 阅读
  4. Python语言-面向对象

    2024-06-16 13:10:01       91 阅读

热门阅读

  1. leecode N皇后

    2024-06-16 13:10:01       36 阅读
  2. HTML基础标签解析:H1-H6、DIV与P的正确使用方法

    2024-06-16 13:10:01       26 阅读
  3. Vue3 中 props 与 emit 用法

    2024-06-16 13:10:01       35 阅读
  4. django orm 查询返回指定关键字

    2024-06-16 13:10:01       35 阅读
  5. 深度学习500问——Chapter12:网络搭建及训练(1)

    2024-06-16 13:10:01       26 阅读
  6. 【AI原理解析】— 星火大模型

    2024-06-16 13:10:01       32 阅读
  7. 基于SpringBoot+Spark搭建本地计算引擎服务

    2024-06-16 13:10:01       38 阅读
  8. Pytorch-Padding Layers

    2024-06-16 13:10:01       27 阅读