U-Boot 源码获取与编译——适配 ARM 开发板全程实操
U-Boot 源码获取与编译——适配 ARM 开发板全程实操本文由黒漂技术佬原创首发于 CSDN转载请注明出处。一、引言上一篇文章咱们把嵌入式开机流程捋了一遍知道了 U-Boot 在整个启动链中扮演什么角色。但光看理论不过瘾今天直接上手——从源码下载到交叉编译再到生成能在 ARM 开发板上跑起来的u-boot.bin一步不漏。不管你用的是 BeagleBone Black、树莓派、imx6ull还是全志 H3/H5流程都是相通的。二、源码获取——三条路任你选2.1 官方主线仓库推荐U-Boot 的官方代码托管在 GitHub主线仓库更新频繁每个季度发一个稳定版本。# 克隆主线仓库体积较大约 1GBgitclone https://github.com/u-boot/u-boot.gitcdu-boot# 切换到最新稳定版本以 v2024.01 为例gitcheckout v2024.01-bmy_uboot_dev如果你因为网络问题无法直接访问 GitHub可以试试国内的镜像源。2.2 芯片厂商 BSP 分支绝大多数 SoC 厂商会基于主线 U-Boot 维护一个 BSPBoard Support Package分支打包了定制驱动和外设支持。厂商仓库地址示例NXP (i.MX)https://source.codeaurora.org/external/imx/uboot-imxTI (Sitara)https://git.ti.com/cgit/ti-u-boot/ti-u-boot全志 (Allwinner)https://github.com/linux-sunxi/u-boot-sunxiXilinxhttps://github.com/Xilinx/u-boot-xlnxRockchiphttps://github.com/rockchip-linux/u-boot选哪个好如果你是做产品开发用厂商 BSP 更稳妥驱动适配到位。如果是学习研究主线 U-Boot 紧跟社区架构更规范。2.3 直接下载压缩包不想折腾 git 的话直接去 ftp.denx.de/pub/u-boot 下载 tar 包就行。wgetftp://ftp.denx.de/pub/u-boot/u-boot-2024.01.tar.bz2tar-xjfu-boot-2024.01.tar.bz2cdu-boot-2024.01三、U-Boot 源码目录结构一览解压 / 克隆后先别急着编译把目录结构搞清楚后面配置和调试才不迷路。u-boot/ ├── arch/ # 架构相关代码 (arm/, mips/, riscv/, x86/...) │ └── arm/ │ ├── cpu/ # 各 ARM 核的实现 │ ├── dts/ # 设备树源文件 │ ├── mach-xxx/ # 各 SoC 平台的驱动代码 │ └── lib/ # ARM 架构专用库 ├── board/ # 开发板级配置和初始化代码 │ └── vendor/board_name/ ├── cmd/ # U-Boot 命令实现源代码 ├── common/ # 通用功能代码 ├── configs/ # 各板卡的默认配置文件 (defconfig) ├── doc/ # 文档 ├── drivers/ # 外设驱动 (net/, mmc/, spi/, usb/...) ├── fs/ # 文件系统支持 (ext4/, fat/, ubifs/...) ├── include/ # 头文件 │ └── configs/ # 板卡配置头文件 (逐步废弃转向 Kconfig) ├── lib/ # 通用库函数 ├── net/ # 网络协议栈 ├── tools/ # 辅助工具 (mkimage 等) ├── Kconfig # 顶层配置菜单 ├── Makefile # 顶层 Makefile └── .config # 编译时生成的配置文件重点记住configs/目录下的xxx_defconfig是你选择目标板卡的入口后面我们会频繁用到。四、交叉编译环境搭建4.1 什么是交叉编译简单说交叉编译就是在一个平台上编译出另一个平台能运行的二进制文件。你的开发机通常是 x86_64而目标板是 ARMarmv7l / aarch64这时候就需要交叉编译工具链。4.2 安装 ARM 交叉编译工具链方法一Linux 发行版包管理器安装# Ubuntu/Debian: 安装 32 位 ARM 工具链sudoaptinstallgcc-arm-linux-gnueabihf# 安装 64 位 ARM 工具链 (ARMv8/AArch64)sudoaptinstallgcc-aarch64-linux-gnu方法二从 ARM 官网下载预编译工具链# 下载 ARM GNU Toolchainwgethttps://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/\arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-linux-gnueabihf.tar.xztar-xfarm-gnu-toolchain-13.2.rel1-x86_64-arm-none-linux-gnueabihf.tar.xzexportPATH$PWD/arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-linux-gnueabihf/bin:$PATH方法三Linaro 工具链兼容性好很多老项目在用wgethttps://releases.linaro.org/components/toolchain/binaries/latest-7/\arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz4.3 验证工具链arm-linux-gnueabihf-gcc--version# 输出应类似arm-linux-gnueabihf-gcc (GNU Toolchain...) 13.2.1五、配置与编译 U-Boot5.1 设置环境变量exportARCHarmexportCROSS_COMPILEarm-linux-gnueabihf-注意CROSS_COMPILE后面的连字符-不能省略Makefile 会用这个前缀去拼接gcc、ld等工具名。5.2 选择目标板卡配置# 查看所有可用的板卡配置lsconfigs/|head-20# 以 BeagleBone Black 为例makeam335x_evm_defconfigmake xxx_defconfig的作用是将configs/xxx_defconfig中的配置项写入项目根目录的.config文件。这个.config文件就是最终的编译配置清单。5.3 图形化微调配置可选makemenuconfigmenuconfig会打开一个基于 ncurses 的图形配置界面你可以在这里增删驱动、调整参数。需要安装libncurses-dev。对于学习阶段直接用默认配置就行。5.4 编译# 多线程编译-j 后面跟 CPU 核心数make-j$(nproc)编译成功后你会看到以下几个重要产物产物文件说明u-boot.bin原始二进制可直接烧录u-boot.img带 U-Boot 头部的镜像u-boot-nodtb.bin不含设备树的纯二进制u-boot.dtb编译后的设备树文件MLO/SPL第一级 Bootloader少数平台spl/u-boot-spl.binSPL 二进制5.5 编译结果验证fileu-boot.bin# 输出u-boot.bin: datals-lhu-boot.bin# 查看文件大小六、常见编译问题与解决问题1arm-linux-gnueabihf-gcc: command not found原因工具链未安装或路径未添加到 PATH。解决检查安装和 PATH 环境变量。问题2make: *** No rule to make target xxx_defconfig原因配置文件名写错或该板卡不支持。解决先去configs/目录确认准确的文件名。问题3编译报undefined reference to...原因某个依赖的驱动未选择。解决用make menuconfig检查相关选项是否启用。七、总结本文带你完成了 U-Boot 的全流程编译从官方仓库或厂商 BSP 获取源码。理解目录结构知道关键代码在哪。安装交叉编译工具链并验证。根据目标板卡选择和配置defconfig。编译生成u-boot.bin等产物。编译通过只是第一步接下来我们要把 U-Boot 烧到板子上用串口连上去面对那个熟悉的提示符开始用命令操作它。下一篇文章我们来玩转 U-Boot 的基础指令

相关新闻

鸿蒙三方库 | harmony-utils之FileUtil文件创建与删除详解

鸿蒙三方库 | harmony-utils之FileUtil文件创建与删除详解

前言 文件创建和删除是文件管理的基本操作。pura/harmony-utils 的 FileUtil 封装了文件和目录的创建、删除方法,支持递归创建目录和强制删除非空目录。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到…

2026/7/19 0:55:15阅读更多 →
鸿蒙三方库 | harmony-utils之FileUtil文件读写操作详解

鸿蒙三方库 | harmony-utils之FileUtil文件读写操作详解

前言 文件读写是最基础的文件操作,pura/harmony-utils 的 FileUtil 封装了简洁的文件读写方法,支持文本和二进制数据的读写,开发者无需手动管理文件流。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助…

2026/7/19 0:55:15阅读更多 →
平头哥开源T-Head SAIL:真武AI芯片软件栈开源,AI芯片算力解放运动深度解析

平头哥开源T-Head SAIL:真武AI芯片软件栈开源,AI芯片算力解放运动深度解析

一、引言:AI芯片的"最后一公里"困局 2026年7月18日,在WAIC 2026上,平头哥正式对外开源了自研AI软件栈T-Head SAIL(以下简称SAIL)——一款专为真武AI芯片打造的底层软件栈。这个看似"技术向"的发布,背后藏着一个深刻的产业逻辑:AI芯片的竞争,已经从…

2026/7/19 0:55:15阅读更多 →
C++实现约翰·康威世界末日算法:快速计算任意日期星期几

C++实现约翰·康威世界末日算法:快速计算任意日期星期几

1. 项目概述:当日期计算遇上“世界末日”在C编程的日常里,处理日期和时间是再常见不过的任务。无论是开发日历应用、财务系统,还是处理日志文件,我们总需要知道某个特定日期是星期几。常规的做法可能是查表、调用库函数&#xff0…

2026/7/19 6:37:47阅读更多 →
Locale Emulator完全指南:Windows系统区域语言模拟神器使用教程

Locale Emulator完全指南:Windows系统区域语言模拟神器使用教程

Locale Emulator完全指南:Windows系统区域语言模拟神器使用教程 【免费下载链接】Locale-Emulator Yet Another System Region and Language Simulator 项目地址: https://gitcode.com/gh_mirrors/lo/Locale-Emulator Locale Emulator是一款强大的Windows系统…

2026/7/19 6:37:47阅读更多 →
GitHub 新项目 exec-trail:把 Agent 的每一次 Shell 执行变成可寻址事件

GitHub 新项目 exec-trail:把 Agent 的每一次 Shell 执行变成可寻址事件

1. 先说问题 现在的 AI Agent 跑一长串 shell 命令。挂了之后你问它"刚才做了什么"——它能糊弄你,但自己不知道。shell history 只管命令不管输出。git reflog 只管 ref 移动不管为什么。script / asciinema 录制终端但不结构化。 2. 解决方案&#xf…

2026/7/19 6:37:47阅读更多 →
好用的纳米填充供应厂家

好用的纳米填充供应厂家

在塑料制品行业,纳米填充母粒的质量对产品的性能和成本有着至关重要的影响。而在众多纳米填充供应厂家中,江门市炜雄新材料有限公司(以下简称“炜雄”)脱颖而出。它扎根于广东珠三角地区的江门市,凭借独特的优势和出色…

2026/7/19 6:37:47阅读更多 →
AM62L硬件防火墙配置实战:从RBAC模型到寄存器级安全策略实现

AM62L硬件防火墙配置实战:从RBAC模型到寄存器级安全策略实现

1. 防火墙配置的核心思路与设计考量在嵌入式系统开发,尤其是涉及功能安全或信息安全的项目中,硬件防火墙的配置往往是底层驱动开发中最关键也最容易出错的一环。AM62L处理器集成的CBASS防火墙模块,其设计思路非常典型,理解它&…

2026/7/19 6:37:47阅读更多 →
Locale Emulator:Windows区域语言模拟神器完全使用指南

Locale Emulator:Windows区域语言模拟神器完全使用指南

Locale Emulator:Windows区域语言模拟神器完全使用指南 【免费下载链接】Locale-Emulator Yet Another System Region and Language Simulator 项目地址: https://gitcode.com/gh_mirrors/lo/Locale-Emulator 你是否遇到过这样的困扰?下载了一款日…

2026/7/19 6:35:47阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/18 22:49:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/18 18:49:35阅读更多 →