微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > GNU ARM汇编--(十七)u-boot的makefile和mkconfig解读

GNU ARM汇编--(十七)u-boot的makefile和mkconfig解读

时间:11-26 来源:互联网 点击:

        1. u-boot.bin,必须得到u-boot.u-boot.bin是最后要烧写到板子上的二进制bin档
        2. #利用objcopy来得到这个二进制文件($@是规则的目标文件名,$<是规则的第一个依赖文件名)
        3. #调用BOARD_SIZE_CHECK
        4. ###################################################################################


        u-boot的依赖分析:
        $(obj)u-boot: depend
        $(SUBDIR_TOOLS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT) $(obj)u-boot.lds
        $(GEN_UBOOT)

        u-boot 依赖depend $(SUBDIR_TOOLS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT) $(obj)u-boot.lds
        然后用$(GEN_UBOOT)生成最后的u-boot,GEN_UBOOT就是用ld链接的过程

        a.看一下depend:
        depend dep: $(TIMESTAMP_FILE) $(VERSION_FILE)
        $(obj)include/autoconf.mk
        $(obj)include/generated/generic-asm-offsets.h
        $(obj)include/generated/asm-offsets.h
        for dir in $(SUBDIRS) $(CPUDIR) $(LDSCRIPT_MAKEFILE_DIR) ; do
        $(MAKE) -C $$dir _depend ; done
        对$(SUBDIRS) $(CPUDIR) $(LDSCRIPT_MAKEFILE_DIR)目录生成depend依赖文件;
        而_depend是在rules.mk中定义的,利用CC的-M选项生成依赖文件.

        b.看一下$(SUBDIR_TOOLS):
        tools目录

        c.看一下$(OBJS):
        $(OBJS): depend
        $(MAKE) -C $(CPUDIR) $(if $(REMOTE_BUILD),$@,$(notdir $@))
        看下$(if $(REMOTE_BUILD),$@,$(notdir $@))
        因为$(REMOTE_BUILD)为空,所以返回的是$(notdir $@)的值;
        因为$@指的是规则的目标,所以就是$(OBJS),而$(OBJS)就是arch/arm/cpu/arm920t/start.o
        notdir内嵌函数返回的文件名;所以返回start.o
        执行makc -C arch/arm/cpu/arm920t start.o

        d.$(LIBBOARD)
        $(LIBBOARD): depend $(LIBS)
        $(MAKE) -C $(dir $(subst $(obj),,$@))
        执行make -C board/samsung/smdk2410

        e.$(LIBS)
        $(LIBS): depend $(SUBDIR_TOOLS)
        $(MAKE) -C $(dir $(subst $(obj),,$@))
        进入到LIBS包含的很多目录,执行make,生成很多.a文件.

        f.$(LDSCRIPT)
        $(LDSCRIPT): depend
        $(MAKE) -C $(dir $@) $(notdir $@)
        在前面找链接脚本时已然知晓LDSCRIPT就是arch/arm/cpu/u-boot.lds
        执行make -C arch/arm/cpu u-boot.lds 这个目录没有makefile,这什么意思?!!!

        g.$(obj)u-boot.lds
        $(obj)u-boot.lds: $(LDSCRIPT)
        $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@

        这些就是编译uboot的规则,分析的比较粗糙,在移植的过程中肯定还会遇到各式各样的问题,在移植过程中再进一步深入并修正.

  • Copyright © 2017-2020 微波EDA网 版权所有

    网站地图

    Top