赞
踩
上一节我们找到了整个KBuild体系的第一个目标,根据是否进行了编译配置而分别是385行的scripts_basic和949行的include/config/kernel.release。更重要的是,通过第一个目标的寻找,我们把KBuild体系的整个顶层Makefile文件脉络梳理了一遍,这对我们研究vmlinux的形成及其重要。下面我们就从第一个目标开始,对编译配置后make的整个过程来过一遍。
949行,第一个目标:
949 include/config/kernel.release: include/config/auto.conf FORCE
950 $(Q)rm -f $@
951 $(Q)echo $(kernelrelease) > $@
执行的命令很简单,删除旧的kernel.release,新建一个kernel.release并把kernelrelease变量的值转移标准输出,写入该文件:
358 KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
948 kernelrelease = $(KERNELVERSION)$(localver-full)
第一个目标完成后,来到966行的prepare3目标:
966 prepare3: include/config/kernel.release
967 ifneq ($(KBUILD_SRC),)
968 @$(kecho) ' Using $(srctree) as source for kernel'
969 $(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then /
970 echo " $(srctree) is not clean, please run 'make mrproper'";/
971 echo " in the '$(srctree)' directory.";/
972 /bin/false; /
973 fi;
974 endif
没有问题,不会去执行的,因为$(KBUILD_SRC)是空的。所以来到977行:
977 prepare2: prepare3 outputmakefile
我们看到prepare2什么命令也不执行,但它除了prepare3还有个依赖outputmakefile:
396 outputmakefile:
397 ifneq ($(KBUILD_SRC),)
398 $(Q)ln -fsn $(srctree) source
399 $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile /
400
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。