u-boot 的编译和配置

发布时间 2024-01-08 19:26:14作者: zxddesk

目录

 

一、uboot 配置过程

二、uboot 编译过程


 

一、uboot 配置过程

顶层Makefile会包含2个配置文件include/config/auto.conf、include/autoconf.mk。

u-boot中有非常多的配置文件:

1、.config:来自单板的默认配置、Kconfig;

2、include/config/auto.conf:来自.config,去掉了很多注释;

3、u-boot.cfg:它的内容跟头文件类似,来自:

      (1) .config

      (2) 头文件include/common.h,又包含了"#include <config.h>";

4、include/autoconf.mk:来自u-boot.cfg,但是移除include/config/auto.conf的内容以免重复。

配置过程分为两个阶段,如下图所示:

 

 

二、uboot 编译过程

执行 make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 指令编译之后,结果如下图所示:

1、各类u-boot文件都依赖于u-boot,先编译得到u-boot,它由u-boot-initu-boot-main两部分链接而成:

   (1) u-boot-init为:arch/arm/cpu/armv7/start.o

      在  arch/arm/Makefile文件中

   

(2) u-boot-main为:lib/built-in.o fs/built-in.o net/built-in.o 等,以下图片均是顶层 Makefile 中的:

  1.  
    /* 顶层 Makefile */
  2.  
    include config.mk              # 里面会包含arch/arm/config.mk(含有ALL-y += u-boot-dtb.imx)
  3.  
    include arch/$(ARCH)/Makefile  # arch/arm/Makefile, 里面含有head-y
  4.  
     
  5.  
     
  6.  
     
  7.  
    libs-ylibs-y += lib/
  8.  
    libs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
  9.  
    libs-$(CONFIG_OF_EMBED) += dts/
  10.  
    libs-y += fs/
  11.  
    libs-y += net/
  12.  
    libs-y += disk/
  13.  
    libs-y += drivers/
  14.  
    libs-y += drivers/dma/
  15.  
    libs-y += drivers/gpio/
  16.  
    libs-y += drivers/i2c/
  17.  
    libs-y += drivers/mmc/
  18.  
    libs-y += drivers/mtd/
  19.  
    libs-$(CONFIG_CMD_NAND) += drivers/mtd/nand/
  20.  
    libs-y += drivers/mtd/onenand/
  21.  
    libs-$(CONFIG_CMD_UBI) += drivers/mtd/ubi/
  22.  
    libs-y += drivers/mtd/spi/
  23.  
    libs-y += drivers/net/
  24.  
    libs-y += drivers/net/phy/
  25.  
    libs-y += drivers/pci/
  26.  
    libs-y += drivers/power/ \
  27.  
        drivers/power/fuel_gauge/ \
  28.  
        drivers/power/mfd/ \
  29.  
        drivers/power/pmic/ \
  30.  
        drivers/power/battery/ \
  31.  
        drivers/power/regulator/
  32.  
    libs-y += drivers/spi/
  33.  
    libs-$(CONFIG_FMAN_ENET) += drivers/net/fm/
  34.  
    libs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
  35.  
    libs-$(CONFIG_ALTERA_SDRAM) += drivers/ddr/altera/
  36.  
    libs-y += drivers/serial/
  37.  
    libs-y += drivers/usb/dwc3/
  38.  
    libs-y += drivers/usb/emul/
  39.  
    libs-y += drivers/usb/eth/
  40.  
    libs-y += drivers/usb/gadget/
  41.  
    libs-y += drivers/usb/gadget/udc/
  42.  
    libs-y += drivers/usb/host/
  43.  
    libs-y += drivers/usb/musb/
  44.  
    libs-y += drivers/usb/musb-new/
  45.  
    libs-y += drivers/usb/phy/
  46.  
    libs-y += drivers/usb/ulpi/
  47.  
    libs-y += cmd/
  48.  
    libs-y += common/
  49.  
    libs-$(CONFIG_API) += api/
  50.  
    libs-$(CONFIG_HAS_POST) += post/
  51.  
    libs-y += test/
  52.  
    libs-y += test/dm/
  53.  
    libs-$(CONFIG_UT_ENV) += test/env/
  54.  
     
  55.  
    libs-y += $(if $(BOARDDIR),board/$(BOARDDIR)/)
  56.  
     
  57.  
    libs-y := $(sort $(libs-y))
  58.  
     
  59.  
    u-boot-dirs    := $(patsubst %/,%,$(filter %/, $(libs-y))) tools examples
  60.  
     
  61.  
    u-boot-alldirs    := $(sort $(u-boot-dirs) $(patsubst %/,%,$(filter %/, $(libs-))))
  62.  
     
  63.  
    libs-y        := $(patsubst %/, %/built-in.o, $(libs-y))
  64.  
     
  65.  
    u-boot-init := $(head-y) # arch/arm/Makefile, 里面含有head-y
  66.  
    u-boot-main := $(libs-y)

2、由 u-boot 生成 u-boot-nodtb.bin

 

3、由 u-boot-nodtb.bin 生成 u-boot.bin

 

4、制作生成 u-boot.imx

 

 

5、顶层 Makefile 生成目标文件核心: