make menuconfig 分析

文章目录

  • [make menuconfig V=1](#make menuconfig V=1)

make menuconfig V=1:

bash 复制代码
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
bash 复制代码
# 顶层 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行定义:

bash 复制代码
# scripts/Kbuild.include 
184	build := -f $(srctree)/scripts/Makefile.build obj

最终展开为:

bash 复制代码
# 顶层 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 分钟前
PaddlePaddle飞桨Linux系统Docker版安装
linux·docker·paddlepaddle
Hacker_xingchen6 分钟前
天融信Linux系统安全问题
linux·运维·系统安全
张暮笛17 分钟前
抓取手机HCI日志
linux
大猫和小黄18 分钟前
Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit
linux·服务器·windows·git
Joyner201822 分钟前
【Linux】ubuntu通过远程命令行启动桌面应用
linux·服务器·ubuntu
ghostwritten26 分钟前
Linux Swap: 深入解析 mkswap, mkfs.swap, 和 swapon
linux·运维·服务器
我是唐青枫27 分钟前
Linux xargs 命令使用教程
linux·运维·服务器
未知陨落1 小时前
Linux常用命令
linux·运维·服务器
chian-ocean1 小时前
Linux内核调度优先级详解:如何优化你的系统性能
linux·运维·服务器
望获linux2 小时前
赋能新一代工业机器人-望获实时linux在工业机器人领域应用案例
linux·运维·服务器·机器人·操作系统·嵌入式操作系统·工业控制