news 2026/8/7 1:12:07

U-boot 源码结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
U-boot 源码结构

U-Boot 的源代码采用模块化分层设计,其文件结构清晰划分功能模块,以下是典型源码树的核心目录解析(以最新稳定版为例):


顶级目录结构概览

u-boot/ ├── arch/# 处理器架构相关代码├── board/# 开发板定制代码├── cmd/# 命令实现源码├── common/# 通用核心逻辑├── configs/# 预置配置文件├── disk/# 磁盘分区处理├── doc/# 开发文档├── drivers/# 设备驱动├── dts/# 设备树源码├── env/# 环境变量处理├── fs/# 文件系统支持├── include/# 全局头文件├── lib/# 通用库函数├── net/# 网络协议栈├── scripts/# 构建/配置脚本└── Makefile# 顶层构建入口

关键目录深度解析

1.arch/- 硬件架构支持
arch/ └── arm/ ├── cpu/# CPU核心代码 (e.g. armv8, cortex_a53)├── dts/# 架构级设备树├── lib/# 架构相关库└── mach-*/# 芯片厂商代码 (e.g. mach-rockchip)
  • 核心文件
    cpu/armv8/start.S- ARMv8架构的第一条执行指令(复位向量入口)
2.board/- 开发板硬件适配
board/ └── vendor/# 厂商名 (e.g. rockchip)└── board_name/# 具体板名 (e.g. evb_rk3588)├── Kconfig# 板级配置选项├── MAINTAINERS# 维护者信息└── board.c# 板级初始化代码
  • 关键任务
    实现board_init_f()(早期初始化)和board_init_r()(后期初始化)
3.drivers/- 设备驱动集合
drivers/ ├── clk/# 时钟控制器├── gpio/# GPIO驱动├── mmc/# SD/eMMC控制器├── net/# 以太网/MAC驱动└── usb/# USB主机/设备协议栈
  • 示例驱动
    drivers/mmc/rockchip_dw_mmc.c- Rockchip SDMMC控制器驱动
4.include/- 头文件体系
include/ ├── configs/# 板级配置头文件 (e.g. evb_rk3588.h)├── dm/# 设备模型相关├── linux/# Linux兼容头文件└── u-boot/# U-Boot核心头文件
  • 核心文件
    include/image.h- 定义内核镜像格式(FIT/uImage)
5.configs/- 预置配置模板
configs/ ├── evb_rk3588_defconfig# Rockchip评估板默认配置└── raspberrypi_4_defconfig# 树莓派4配置
  • 使用方式
    make evb_rk3588_defconfig一键加载配置

核心文件示例

文件路径功能说明
common/board_f.c系统启动第一阶段初始化 (relocation前)
common/board_r.c启动第二阶段初始化 (relocation后,命令行准备)
common/main.c主循环处理:解析并执行用户命令
lib/asm-offsets.c生成关键数据结构偏移量(用于汇编与C交互)
scripts/kconfig/*交互式配置菜单系统 (make menuconfig)

配置与编译流程

  1. 选择配置
    makeevb_rk3588_defconfig# 加载开发板配置makemenuconfig# 交互式修改配置
  2. 编译生成
    makeCROSS_COMPILE=aarch64-linux-gnu-# 指定交叉编译器
  3. 关键输出
    • u-boot: 原始ELF可执行文件
    • u-boot.bin: 烧录用的二进制镜像
    • u-boot.dtb: 设备树二进制文件

设计特点

  1. 硬件抽象分层
    arch → drivers → board三级隔离,提升跨平台移植性
  2. 设备树(DTS)驱动
    硬件描述与代码分离,dts/目录存储源文件,编译生成*.dtb
  3. Kconfig配置系统
    通过make menuconfig实现模块化功能裁剪
  4. 环境变量持久化
    env/目录实现环境存储到Flash/NVMe的通用接口

📌实践建议
定制新板卡时,优先复制相近板型的board/configs/模板,再修改board.c和设备树文件arch/arm/dts/your_board.dts,可快速完成移植。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 11:22:47

【Windows BAT脚本基础语法与常用功能实现指南】

Windows BAT脚本基础语法与常用功能实现指南 常用命令介绍 /? 获取命令帮助说明 在命令后添加/?可查看详细帮助信息,例如: dir /? echo和 echo用于输出文本或控制命令回显:echo off :: 关闭回显 echo Hello World :: 输出文本 echo. ::…

作者头像 李华
网站建设 2026/8/5 16:46:46

数据上新预告 | 中国省市区县三级政府政务微信公众号数据

中国省市区县三级政府政务微信公众号数据CnOpenData即将推出「省市区县三级政府政务微信公众号数据库」。本数据集系统性地采集了国家部委、各省、市、区县各级人民政府及其组成部门的官方政务微信公众号(如“上海发布”、“杭州发布”等)公开发布的信息…

作者头像 李华
网站建设 2026/8/5 23:43:52

LibreChat部署、配置

部署本次LibreChat部署下平台是Windows。部署LibreChat本身是非常简单的,总共分为三步:一、克隆项目;二、配置文件;三、启动项目。一、克隆项目git clone https://github.com/danny-avila/LibreChat.git二、配置文件将根目录中的.…

作者头像 李华
网站建设 2026/8/6 8:28:54

Qwen3模型vLLM并行配置性能测试:从0.6B到32B的最佳实践指南!

简介 文章对Qwen3系列模型(0.6B-32B)在vLLM不同并行配置(PP、TP)下进行了性能测试。研究表明,PCIe多卡环境下,若模型可单卡部署,推荐数据并行(DP)以获得最大吞吐;若关注吞吐量,推荐流水线并行(PP);若关注请…

作者头像 李华
网站建设 2026/8/5 1:45:49

银河麒麟桌面操作系统禁用无线网卡的几种方法

【操作方法】 方法一: 步骤1:打开终端,执行以下命令,查看无线网卡所使用的驱动。 $sudo lshw |grep wifi输出结果中“driver=”后面的内容,就是无线网卡驱动。 步骤2:在终端执行以下命令,修改/etc/modprobe.d/blacklist.conf文件。 $sudo vim /etc/modprobe.d/blackli…

作者头像 李华