一、分析u-boot源码中执行make menuconfig的过程。
1、在u-boot源码顶层目录下,打开Makefile文件,搜索config,查找到如下打印信息
564 %config: scripts_basic outputmakefile FORCE
568 $(Q)$(MAKE) $(build)=scripts/kconfig $@
2、在该文件中,使用echo打印每个变量的信息
564 %config: scripts_basic outputmakefile FORCE 565 @echo "Q=$(Q)"
566 @echo "MAKE=$(MAKE)"
567 @echo "build=$(build)"
568 $(Q)$(MAKE) $(build)=scripts/kconfig $@
3、在u-boot源码顶层目录下,执行make menuconfig后,退出图形化界面,在终端查看相应变量的打印信息
Q=@
MAKE=make
build=-f ./scripts/Makefile.build obj
4、因此, $(Q)$(MAKE) $(build)=scripts/kconfig $@ 中将变量替换过来就是如下命令
@make build=-f ./scripts/Makefile.build obj=scripts/kconfig menuconfig
5、执行该命令,就是在 u-boot源码目录/scripts/kconfig 这个目录下执行该目录下的Makefile文件
6、进入到 u-boot源码目录/scripts/kconfig 这个目录下,打开该目录下的makefile文件,搜索menuconfig,查找到如下打印信息
34 menuconfig: $(obj)/mconf
35 $< $(silent) $(Kconfig)
7、在u-boot源码顶层目录下,执行make menuconfig后,退出图形化界面,在终端查看相应变量的打印信息
$< $(silent) $(Kconfig) <======> scripts/kconfig/mconf Kconfig
8、进入到 u-boot源码目录/scripts/kconfig 这个目录下,用file命令查看mconf文件,打印如下信息
mconf: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=e39c5acfcdc6cef1977ebe46e4ba5f9352ad84ed, not stripped
表示mconf文件是一个二进制可执行程序
而 scripts/kconfig/mconf Kconfig 就是在运行该程序,其中Kconfig是传递给该程序的参数