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 工具的使用
相关推荐
噫吁嚱!!!32 分钟前
Linux安装elasticsearch单机版
linux·运维·ubuntu
lshzdq41 分钟前
【CMake】基本概念和快速入门
linux·运维·服务器
爱技术的小伙子1 小时前
Linux 磁盘管理与分区:使用fdisk、parted、df、du等命令管理磁盘和分区
linux·运维·服务器
Java小白白同学1 小时前
Linux:CentOS 系统磁盘扩容操作
linux·服务器·centos
不喜欢就睡大觉1 小时前
Linux—网络设置
linux·运维·服务器
我爱小白羊1 小时前
【Linux】进程优先级 + 环境变量
linux·运维·服务器
TheJustice_1 小时前
Linux 常用指令详解
linux·运维·服务器
Tassel_YUE1 小时前
linux修改内核实现禁止被ping
linux·运维·笔记
fs哆哆1 小时前
ExcelVBA运用Excel的【条件格式】(二)
linux·运维·服务器·前端·excel
缘友一世1 小时前
Armbian 1panel面板工具箱中FTP服务无法正常启动的解决方法
linux·运维·后端·1panel