第四章:源码结构分析
U-Boot 的源码采用模块化设计,各个功能模块分布在不同的目录中。以下是主要目录及其功能:
包含与CPU架构相关的代码,每个支持的CPU架构都有一个子目录:
包含与具体开发板相关的代码,按厂商组织:
包含U-Boot的核心功能实现:
包含各种设备驱动,按类型组织:
Kconfig 文件定义了U-Boot的配置选项,用于生成配置菜单(menuconfig)。
# SPDX-License-Identifier: GPL-2.0+
#
# (C) Copyright 2000-2013
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
mainmenu "U-Boot $UBOOTVERSION Configuration"
config SRCARCH
string
option env="SRRARCH"
source "arch/$SRCARCH/Kconfig"
主要特点:
Makefile 定义了U-Boot的构建规则,采用递归式构建。
# SPDX-License-Identifier: GPL-2.0+
#
# (C) Copyright 2000-2013
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
VERSION = 2023
PATCHLEVEL = 01
SUBLEVEL =
EXTRAVERSION =
NAME =
MAKEFLAGS += -rR --no-print-directory
# 检查构建环境
include scripts/Kbuild.include
主要特点:
链接脚本定义了U-Boot的内存布局和段组织。
/* SPDX-License-Identifier: GPL-2.0+ */ /* * (C) Copyright 2013 * David Feng*/ #include #include OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64") OUTPUT_ARCH(aarch64) ENTRY(_start) SECTIONS { . = 0x00000000; . = ALIGN(8); .text : { *(.__image_copy_start) *(.vectors) arch/arm/cpu/armv8/start.o (.text*) *(.text*) } ... }
主要特点:
| 特点 | 描述 | 优势 |
|---|---|---|
| 模块化 | 功能模块分离到不同目录 | 便于维护和扩展 |
| 层次化 | 架构-板级-驱动分层 | 提高代码复用率 |
| 配置驱动 | Kconfig/Makefile系统 | 灵活定制功能 |
| 可移植性 | 抽象硬件相关部分 | 支持多种平台 |