U-Boot Makefile 分析
Makefile的位置: u-boot/Makefile
这个Makefile是U-Boot项目的顶层Makefile,用于构建U-Boot引导加载程序。以下是对其主要功能的分析:
一.主要功能
版本控制:
- 定义了U-Boot的版本信息(VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION)
- 生成版本相关的头文件(version_autogenerated.h, timestamp_autogenerated.h)
构建系统设置:
- 设置了各种编译标志和选项(KBUILD_CFLAGS, KBUILD_AFLAGS等)
- 定义了交叉编译工具链(CC, LD, OBJCOPY等)
- 处理输出目录(KBUILD_OUTPUT)
构建目标:
- 主要构建目标包括:
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)二进制
- 主要构建目标包括:
目录结构构建:
- 通过
libs-y变量定义了要构建的目录,包括:lib/:库文件board/:板级支持drivers/:各种硬件驱动fs/:文件系统net/:网络协议栈cmd/:命令实现common/:通用功能env/:环境变量处理
- 通过
配置系统:
- 支持Kconfig配置系统
- 处理
.config文件和自动生成的配置头文件
特殊功能:
- 支持SPL(Secondary Program Loader)构建
- 支持TPL(Tertiary Program Loader)构建
- 支持设备树(Device Tree)编译
- 支持各种SoC特定的构建选项
清理目标:
clean:删除大多数生成的文件mrproper:删除所有生成的文件和配置distclean:彻底清理,包括编辑器备份文件等
二.编译的文件/目录
这个Makefile会编译以下主要目录的内容:
核心目录:
arch/$(ARCH)/:架构相关代码lib/:核心库common/:通用功能cmd/:命令实现
驱动目录:
drivers/:各种硬件驱动(CPU, DMA, GPIO, I2C, MTD, SPI, USB等)drivers/net/:网络驱动drivers/power/:电源管理相关
子系统:
fs/:文件系统支持net/:网络协议栈disk/:磁盘相关
板级支持:
board/$(BOARDDIR)/:特定开发板的支持代码board/$(VENDOR)/common/:厂商通用代码
工具:
tools/:构建过程中使用的工具
设备树:
dts/:设备树源文件
SPL/TPL:
spl/:Secondary Program Loadertpl/:Tertiary Program Loader
这个Makefile非常复杂,因为它需要支持多种架构、开发板和配置选项。它使用递归make的方式在各个子目录中构建目标,最终将所有部分链接成完整的U-Boot镜像。
