linux 中 make 命令执行的时候会递归搜索所有被include的文件,如果有目标则执行该目标,如果没有目标则执行默认的目标
我们在make defconfig,make menuconfig,make xconfig .... 的时候,这些目标在/scripts/kconfig/Makefile中定义,现在简单了解下以下两个命令产生的结果如何:
export ARCH=arm
make defconfig
前一条指令导入一个系统变量,为后一条指令使用
make defconfig 首先生成两个文件,分别位于/scripts/basic/fixdep (不清楚用处) , 和/scripts/kconfig/conf .而conf则是生成.config的程序
若我们执行 make defconfig,会看到有 "versatile_defconfig“ 字样输出,说明我们生成的.config文件是依赖于该文件的,我们可以手动复现这一过程:
将scripts/kconfig/conf 复制到源码根目录
执行: ./conf --defconfig=arch/arm/configs/versatile_defconfig arch/arm/Kconfig
则会在当前根目录下生成.config配置文件,与 第一步生成的.config 文件做比较,除了kernel version没有赋值(KERNELVERSION)之外,其余的都一致
初步推测,若 versatile_defconfig中指定某个变量为y,那么生成的.config文件中就会引入,否则会根据Kconfig中包含的所有Kconfig的默认值来生成每个宏的值
在 arch/ARCH/Kconfig 会包括诸多的Kconfig文件,包括的每个文件中,某些select 后面的配置变量会根据包含该select的条件来生成宏的值
下一步,分析conf源码......