引入
还记得我们在文章《uboot构建框架1-总览》里面提到的米尔开发板uboot编译三个命令中的的第二个吗?就是:
sunke@droresrv:~/work/MYiR-iMX-Uboot$ make mys_imx6ull_14x14_nand_defconfig
道理还是一样的
在文章《make menuconfig命令的过程追踪》里面,我们追踪了menuconfig的执行流程。上述命令跟menuconfig还是有点相像的,目标都以config结尾。还记得我们提到过,以config结尾的目标,有个共同的入口吗?算了,不想让你们到处跳转了,这里再复制一次,看好了:
%config: scripts_basic outputmakefile FORCE
$(Q)$(MAKE) $(build)=scripts/kconfig $@
怎么样,就是menuconfig的那个入口,对于这个命令,我们不妨再次展开在这里:
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.build obj=scripts/kconfig mys_imx6ull_14x14_nand_defconfig
这个比menuconfig要恶心一些,又臭又长。但是道理都是一样的,去到了Makefile.build,并且使用了两个目标:obj和mys_imx6ull_14x14_nand_defconfig,我们打开Makefile.build,在其59行,会展开为:
include ./scripts/kconfig/Makefile
打开./scripts/kconfig/Makefile,我们会看到第113行,有个模式规则:
%_defconfig: $(obj)/conf
$(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
看到没,这个规则的目标匹配mys_imx6ull_14x14_nand_defconfig。但是跟menuconfig不同的是,依赖不再是mconf,而是conf。这个conf和mconf一样,也是个C语言程序,本机编译,运行在本机。具体使用方法可以参考--help选项。我们这里将这条命令展开,如下:
@scripts/kconfig/conf --defconfig=arch/../configs/mys_imx6ull_14x14_nand_defconfig Kconfig
如上,最终调用了conf程序,使用了--defconfig参数选项和Kconfig命令行选项。这个conf程序,虽然我们没有展开分析,但是猜测应该和mconf类似,无非是conf没有图形界面,会根据指定的配置文件输入进行操作,最后生成的标准的.config等结果。