uboot详细Makefile编译流程

1、make过程

当我们make的时候,首先make distclean或者make mrproper,就会调用顶层的Makefile

 

2、make ***_config

 

 

 

 %通配符,有目标与之匹配,当输入“make xxx_defconfig”的时候就会匹配到%config 目标,目标“%config”依赖于 scripts_basicoutputmakefile FORCE

 

PHONY += FORCE
FORCE:

FORCE 是没有规则和依赖的,所以每次都会重新生成 FORCE。当 FORCE 作为其他目标的依赖时,由于 FORCE 总是被更新过的,因此依赖所在的规则总是会执行的。

1.scripts_basic

 

 

$(Q)$(MAKE) $(build)=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

展开$(Q)$(MAKE) $(build)=scripts/kconfig $@:
make -f ./scripts/Makefile.build obj=scripts/kconfig xxx_defconfig

2.outputmakefile

 

 

 可以通过echo查看KBUILD_SRC为空

mytest:
    @echo KBUILD_SRC = $(KBUILD_SRC)

 

3./scripts/Makefile.build

 

1.make -f ./scripts/Makefile.build obj=scripts/basic

 

2.make -f ./scripts/Makefile.build obj=scripts/kconfig xxx_defconfig
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-yarch/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链接

 

posted @ 2020-12-03 15:51  11YS  阅读(868)  评论(0)    收藏  举报