U-Boot 是最流行的开源引导程序,支持几乎所有路由器架构。
U-Boot (Das U-Boot) 是德信开源的嵌入式引导程序。
官方网站:https://www.denx.de/wiki/U-Boot/
主要特点:
U-Boot 1.1.4 (Dec 6 2021 - 11:13:09) CPU: MediaTek MT7621AT RAM: 256MB DDR3 Flash: W25Q128JV
在启动时按任意键可进入命令行:
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
# 设置环境变量 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 分区 # 语法: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=bootm 0x9f020000 # 或网络启动 bootcmd=tftp 0x81000000 openwrt.bin; bootm 0x81000000
传递给内核的参数:
bootargs=console=ttyS0,115200 root=/dev/mtdblock2 rootfstype=squashfs mtdparts=spi0.0:256k(u-boot),64k(u-boot-env),3000k(kernel),-(rootfs)
Flash 分区定义:
mtdparts=spi0.0:256k(u-boot),64k(config),3000k(kernel),-(rootfs)
使用 TFTPD64:
sudo apt install tftpd-hpa sudo systemctl start tftpd-hpa # 将固件放入 /srv/tftp/
sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist # 将固件放入 /private/tftpboot/
# 恢复默认 setenv bootcmd bootm 0x9f020000 saveenv reset
| 特性 | Breed | U-Boot |
| —— | ——– | ——– |
| 开源 | ❌ | ✅ |
| Web 界面 | ✅ | ❌ |
| 多固件备份 | ✅ | ❌ |
| 命令复杂度 | 简单 | 复杂 |
| 设备支持 | 有限 | 广泛 |