U-Boot 专题

U-Boot 是最流行的开源引导程序,支持几乎所有路由器架构。

简介

U-Boot (Das U-Boot) 是德信开源的嵌入式引导程序。

官方网站https://www.denx.de/wiki/U-Boot/

主要特点

  1. 完全开源
  2. 支持多种 CPU 架构(MIPS/ARM/PowerPC/x86)
  3. 丰富的启动命令
  4. 支持网络启动(TFTP/NFS)
  5. 强大的环境变量系统
  6. 可从 Flash、网络、串口加载

架构支持

MIPS
  1. 常见于 MediaTek MT7620/MT7621
  2. TP-Link、小米、华为部分机型
  3. 典型地址:0x9f000000(Flash)
ARM
  1. 博通 BCM47xx/BCM53xx 系列
  2. 高通 IPQ 系列
  3. 小米/Netgear/华硕部分机型
x86
  1. 软路由
  2. Intel/AMD 平台

启动流程

上电初始化
U-Boot 1.1.4 (Dec  6 2021 - 11:13:09)
CPU: MediaTek MT7621AT
RAM: 256MB DDR3
Flash: W25Q128JV
自动引导
  1. 读取环境变量 bootcmd
  2. 执行启动命令
  3. 从 Flash/网络加载内核
  4. 传递参数给内核
中断自动引导

在启动时按任意键可进入命令行:

Hit any key to stop autoboot:  0

常用命令

环境变量
# 查看所有环境变量
printenv

# 查看特定变量
printenv ipaddr
printenv bootcmd

# 设置变量
setenv ipaddr 192.168.1.1
setenv serverip 192.168.1.100

# 保存到 Flash
saveenv

# 恢复默认
env default -a
saveenv
存储操作
# 读取 Flash 信息
sf probe

# 读取内存
md.l 0x81000000 10    # 读取 10 个 32-bit 字
md.b 0x81000000 100  # 读取 100 字节

# 写入内存
mw.l 0x81000000 0x12345678 1
TFTP 启动
# 设置环境变量
setenv ipaddr 192.168.1.1        # 路由器 IP
setenv serverip 192.168.1.100   # TFTP 服务器 IP

# 从 TFTP 加载固件到内存
tftpboot 0x81000000 openwrt.bin
# 或简写
tftp 0x81000000 openwrt.bin

# 启动固件
bootm 0x81000000
Flash 操作
# 擦除 Flash 分区
# 语法:erase <start> +<length>
erase 0x9f020000 +0x300000

# 复制数据
# 语法:cp.b <src> <dst> <length>
cp.b 0x81000000 0x9f020000 0x300000

# 从内存写入 Flash
sf write 0x81000000 0x9f020000 0x300000
启动命令
# 直接启动指定地址
bootm 0x9f020000

# 从网络启动
bootp 0x81000000 firmware.bin
bootm 0x81000000

# 从 SD 卡启动(部分设备)
load mmc 0:1 0x81000000 uImage
bootm 0x81000000
其他命令
# 复位
reset

# 打印版本
version

# 帮助
help

# 列出设备
printenv bootdev

环境变量详解

bootcmd

定义自动引导命令:

bootcmd=bootm 0x9f020000
# 或网络启动
bootcmd=tftp 0x81000000 openwrt.bin; bootm 0x81000000
bootargs

传递给内核的参数:

bootargs=console=ttyS0,115200 root=/dev/mtdblock2 rootfstype=squashfs mtdparts=spi0.0:256k(u-boot),64k(u-boot-env),3000k(kernel),-(rootfs)
mtdparts

Flash 分区定义:

mtdparts=spi0.0:256k(u-boot),64k(config),3000k(kernel),-(rootfs)

TFTP 服务器配置

Windows

使用 TFTPD64:

  1. 设置 TFTP 根目录
  2. 确认防火墙允许
  3. 确保使用有线连接
Linux
sudo apt install tftpd-hpa
sudo systemctl start tftpd-hpa
# 将固件放入 /srv/tftp/
macOS
sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist
# 将固件放入 /private/tftpboot/

常见问题

bootcmd 为空
# 恢复默认
setenv bootcmd bootm 0x9f020000
saveenv
reset
TFTP 连接失败
  1. 确认电脑和路由器 IP 在同一网段
  2. 检查防火墙
  3. 确认 TFTP 服务器运行中
  4. 使用 ping 测试连通性
Flash 写入失败
  1. 确认地址正确
  2. 可能 Flash 损坏
  3. 尝试先擦除再写入
环境变量丢失
  1. 环境变量存储在 Flash 特定分区
  2. 使用 saveenv 保存
  3. 恢复方法:setenv default 并 saveenv

Breed 与 U-Boot 对比

特性 Breed U-Boot
————–——–
开源
Web 界面
多固件备份
命令复杂度 简单 复杂
设备支持 有限 广泛

相关链接

⚠️ 技术声明

本教程仅供学习和参考。刷写固件存在风险,可能导致设备变砖或失去保修。请在操作前:

最后更新:2026年4月