uboot详细Makefile编译流程
1、make过程
当我们make的时候,首先make distclean或者make mrproper,就会调用顶层的Makefile

2、make ***_config

%通配符,有目标与之匹配,当输入“make xxx_defconfig”的时候就会匹配到%config 目标,目标“%config”依赖于 scripts_basic、 outputmakefile 和 FORCE。
PHONY += FORCE
FORCE:
FORCE 是没有规则和依赖的,所以每次都会重新生成 FORCE。当 FORCE 作为其他目标的依赖时,由于 FORCE 总是被更新过的,因此依赖所在的规则总是会执行的。
1.scripts_basic

Q是显示方式:静默make -s;详细make V=1;不显示make V=0
MAKE=make
build定义在scripts\kbuild.include
build := -f $(srctree)/scripts/Makefile.build obj
build := -f ./scripts/Makefile.build obj
展开$(Q)$(MAKE) $(build)=scripts/basic:
make -f ./scripts/Makefile.build obj=scripts/basic
2.outputmakefile

可以通过echo查看KBUILD_SRC为空
mytest:
@echo KBUILD_SRC = $(KBUILD_SRC)
3./scripts/Makefile.build
1.make -f ./scripts/Makefile.build obj=scripts/basic
src= scripts/kconfig kbuild-dir = ./scripts/kconfig kbuild-file = ./scripts/kconfig/Makefile include ./scripts/kconfig/Makefile
省略了一部分,没看懂

4.make

没有指明目标,使用默认的目标。

如果KBUILD_EXTMOD为空的话_all依赖于all。不编译模块,所以KBUILD_EXTMOD 空 ,_all依赖于all
all: $(ALL-y)
all依赖于ALL-y





head-y在 arch/arm/Makefile
head-y := arch/arm/cpu/$(CPU)/start.o
libs-y


libs-y +lib/ ---> lib/built-in.o,保存fs.built-in.o等built-in.o文件
u-boot将built-in.o和start.o文件链接在一起
4.链接
链接脚本为u-boot.lds,uboot链接


浙公网安备 33010602011771号