Skip to content

U-Boot Makefile 分析

Makefile的位置: u-boot/Makefile

这个Makefile是U-Boot项目的顶层Makefile,用于构建U-Boot引导加载程序。以下是对其主要功能的分析:

一.主要功能

  1. 版本控制

    • 定义了U-Boot的版本信息(VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION)
    • 生成版本相关的头文件(version_autogenerated.h, timestamp_autogenerated.h)
  2. 构建系统设置

    • 设置了各种编译标志和选项(KBUILD_CFLAGS, KBUILD_AFLAGS等)
    • 定义了交叉编译工具链(CC, LD, OBJCOPY等)
    • 处理输出目录(KBUILD_OUTPUT)
  3. 构建目标

    • 主要构建目标包括:
      • u-boot.bin:最终的二进制文件
      • u-boot.srec:Motorola S-record格式
      • u-boot.hex:Intel HEX格式
      • u-boot.img:镜像文件
      • spl/u-boot-spl.bin:SPL(Secondary Program Loader)二进制
      • tpl/u-boot-tpl.bin:TPL(Tertiary Program Loader)二进制
  4. 目录结构构建

    • 通过libs-y变量定义了要构建的目录,包括:
      • lib/:库文件
      • board/:板级支持
      • drivers/:各种硬件驱动
      • fs/:文件系统
      • net/:网络协议栈
      • cmd/:命令实现
      • common/:通用功能
      • env/:环境变量处理
  5. 配置系统

    • 支持Kconfig配置系统
    • 处理.config文件和自动生成的配置头文件
  6. 特殊功能

    • 支持SPL(Secondary Program Loader)构建
    • 支持TPL(Tertiary Program Loader)构建
    • 支持设备树(Device Tree)编译
    • 支持各种SoC特定的构建选项
  7. 清理目标

    • clean:删除大多数生成的文件
    • mrproper:删除所有生成的文件和配置
    • distclean:彻底清理,包括编辑器备份文件等

二.编译的文件/目录

这个Makefile会编译以下主要目录的内容:

  1. 核心目录

    • arch/$(ARCH)/:架构相关代码
    • lib/:核心库
    • common/:通用功能
    • cmd/:命令实现
  2. 驱动目录

    • drivers/:各种硬件驱动(CPU, DMA, GPIO, I2C, MTD, SPI, USB等)
    • drivers/net/:网络驱动
    • drivers/power/:电源管理相关
  3. 子系统

    • fs/:文件系统支持
    • net/:网络协议栈
    • disk/:磁盘相关
  4. 板级支持

    • board/$(BOARDDIR)/:特定开发板的支持代码
    • board/$(VENDOR)/common/:厂商通用代码
  5. 工具

    • tools/:构建过程中使用的工具
  6. 设备树

    • dts/:设备树源文件
  7. SPL/TPL

    • spl/:Secondary Program Loader
    • tpl/:Tertiary Program Loader

这个Makefile非常复杂,因为它需要支持多种架构、开发板和配置选项。它使用递归make的方式在各个子目录中构建目标,最终将所有部分链接成完整的U-Boot镜像。