• 二、主目录 Makefile 分析(3)


    2.8 编译选项

      重新回到 主 makefile 中执行

    2.8.1 u-boot  的编译顺序

      代码166 到 189 行,这些是 u-boot 文件编译的顺序,由代码可以看到,首先是从cpu/$(CPU)/start.S,开始启动。

      然后执行 addprefix 函数,将obj(编译存储目录)变量当作 OBJS 的前缀,之后加入各种 .a  的库,最后将 LIBS 定义为一个伪目标

    • 伪目标:
      • 所谓伪目标就是这样一个目标,它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们将一个伪目标成为标签。  
      • 一般情况下,一个伪目标不作为另一个目标的依赖。当一个伪目标没有作为任何目标的依赖时,我们只能通过make命令来明确指定它为make的终极目标,来执行它所在规则所定义的命令。  
     1 #########################################################################
     2 # U-Boot objects....order is important (i.e. start must be first)
     3 
     4 OBJS  = cpu/$(CPU)/start.o
     5 ifeq ($(CPU),i386)
     6 OBJS += cpu/$(CPU)/start16.o
     7 OBJS += cpu/$(CPU)/reset.o
     8 endif
     9 ifeq ($(CPU),ppc4xx)
    10 OBJS += cpu/$(CPU)/resetvec.o
    11 endif
    12 ifeq ($(CPU),mpc83xx)
    13 OBJS += cpu/$(CPU)/resetvec.o
    14 endif
    15 ifeq ($(CPU),mpc85xx)
    16 OBJS += cpu/$(CPU)/resetvec.o
    17 endif
    18 ifeq ($(CPU),mpc86xx)
    19 OBJS += cpu/$(CPU)/resetvec.o
    20 endif
    21 ifeq ($(CPU),bf533)
    22 OBJS += cpu/$(CPU)/start1.o    cpu/$(CPU)/interrupt.o    cpu/$(CPU)/cache.o
    23 OBJS += cpu/$(CPU)/cplbhdlr.o    cpu/$(CPU)/cplbmgr.o    cpu/$(CPU)/flush.o
    24 endif
    25 
    26 OBJS := $(addprefix $(obj),$(OBJS))
    27 
    28 LIBS  = lib_generic/libgeneric.a
    29 LIBS += board/$(BOARDDIR)/lib$(BOARD).a
    30 LIBS += cpu/$(CPU)/lib$(CPU).a
    31 ifdef SOC
    32 LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a
    33 endif
    34 LIBS += lib_$(ARCH)/lib$(ARCH).a
    35 LIBS += fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a 
    36     fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a
    37 LIBS += net/libnet.a
    38 LIBS += disk/libdisk.a
    39 LIBS += rtc/librtc.a
    40 LIBS += dtt/libdtt.a
    41 LIBS += drivers/libdrivers.a
    42 LIBS += drivers/nand/libnand.a
    43 LIBS += drivers/nand_legacy/libnand_legacy.a
    44 LIBS += drivers/usb/libusb.a
    45 LIBS += drivers/sk98lin/libsk98lin.a
    46 LIBS += common/libcommon.a
    47 LIBS += $(BOARDLIBS)
    48 
    49 LIBS := $(addprefix $(obj),$(LIBS))
    50 .PHONY : $(LIBS)

    2.9 all 目标

      (1)241行出现了整个主Makefile中第一个目标all(也就是默认目标,我们直接在uboot根目录下make其实就等于make all,就等于make这个目标)

      (2)目标中有一些比较重要的。譬如:u-boot是最终编译链接生成的elf格式的可执行文件

      (3)unconfig字面意思来理解就是未配置。这个符号用来做为我们各个开发板配置目标的依赖。目标是当我们已经配置过一个开发板后再次去配置时还可以配置。

      (4)我们配置开发板时使用:make xxx_defconfig,因此分析xxx_defconfig肯定是主Makefile中的一个目标。

      ALL 目标之后,都是配置编译过程,就不详细叙述了

      之后再 1886 1887 行,我们配置了我们的目标板

    1 100ask24x0_config    :    unconfig
    2     @$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0

      MKCONFIG = 源码目录下的  mkconfig  脚本文件

      我们在 执行 make 100ask24x0_config 的时候,实际上是执行的下面的命令,此命令就是传入了 mkconfig 脚本

      100ask24x0_config 里的_config部分用空替换,得到:x210_sd,这就是第一个参数,所以:

      $1: 100ask24x0
      $2: arm
      $3: arm920t
      $4: 100ask24x0
      $5: NULL
      $6: s3c24x0
      所以,$# = 6

      下节继续分析

  • 相关阅读:
    字符串-01. 在字符串中查找指定字符(15)
    数组-14. 数字加密(15)
    软考笔记第一天之数制
    基于c#开发的简易点名器
    软考笔记之存储管理
    IO inputStream和outputStream
    java可变参数
    Map集合总结
    Collection集合总结
    Struts 获得前台传参几种方式
  • 原文地址:https://www.cnblogs.com/kele-dad/p/8898171.html
Copyright © 2020-2023  润新知