====== U-Boot 专题 ====== U-Boot 是最流行的开源引导程序,支持几乎所有路由器架构。 ===== 简介 ===== U-Boot (Das U-Boot) 是德信开源的嵌入式引导程序。 **官方网站**:https://www.denx.de/wiki/U-Boot/ **主要特点**: - 完全开源 - 支持多种 CPU 架构(MIPS/ARM/PowerPC/x86) - 丰富的启动命令 - 支持网络启动(TFTP/NFS) - 强大的环境变量系统 - 可从 Flash、网络、串口加载 ===== 架构支持 ===== == MIPS == - 常见于 MediaTek MT7620/MT7621 - TP-Link、小米、华为部分机型 - 典型地址:0x9f000000(Flash) == ARM == - 博通 BCM47xx/BCM53xx 系列 - 高通 IPQ 系列 - 小米/Netgear/华硕部分机型 == x86 == - 软路由 - Intel/AMD 平台 ===== 启动流程 ===== == 上电初始化 == U-Boot 1.1.4 (Dec 6 2021 - 11:13:09) CPU: MediaTek MT7621AT RAM: 256MB DDR3 Flash: W25Q128JV == 自动引导 == - 读取环境变量 bootcmd - 执行启动命令 - 从 Flash/网络加载内核 - 传递参数给内核 == 中断自动引导 == 在启动时按任意键可进入命令行: 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 + erase 0x9f020000 +0x300000 # 复制数据 # 语法:cp.b 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: - 设置 TFTP 根目录 - 确认防火墙允许 - 确保使用有线连接 == 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 连接失败 == - 确认电脑和路由器 IP 在同一网段 - 检查防火墙 - 确认 TFTP 服务器运行中 - 使用 ping 测试连通性 == Flash 写入失败 == - 确认地址正确 - 可能 Flash 损坏 - 尝试先擦除再写入 == 环境变量丢失 == - 环境变量存储在 Flash 特定分区 - 使用 saveenv 保存 - 恢复方法:setenv default 并 saveenv ===== Breed 与 U-Boot 对比 ===== | 特性 | Breed | U-Boot | |------|--------|--------| | 开源 | ❌ | ✅ | | Web 界面 | ✅ | ❌ | | 多固件备份 | ✅ | ❌ | | 命令复杂度 | 简单 | 复杂 | | 设备支持 | 有限 | 广泛 | ===== 相关链接 ===== - [[bootloader:breed|Breed 专题]] - [[bootloader:cfe|CFE 专题]] - [[method:tftp-recovery|TFTP 恢复方法]] - [[method:ttl-serial|TTL 串口救砖]]