bl-mt798x-dhcpd 详细部署教程
bl-mt798x-dhcpd 详细部署教程
bl-mt798x-dhcpd 是 Yuzhii 在 hanwckf 的 U-Boot 基础上维护的 MT798x 路由器定制分支,主要为联发科 MT7981/MT7986/MT7987 等芯片的路由器提供内置 DHCP 服务和功能完整的 failsafe Web UI。通过它,可以在浏览器中完成刷机、备份、环境变量管理等操作,无需手动配置 IP 或依赖串口。
严重警告 ⚠️:刷入自定义 Bootloader 存在变砖风险,操作前请务必谨慎,并自行承担后果。
1. 准备工作
1.1 确认设备兼容性
首先确认你的路由器是否在支持列表中。已知支持的芯片平台包括 MT7981、MT7986、MT7987 等。典型机型如 Xiaomi WR30U、Redmi AX6000、360T7、Netcore N30 Pro 等。不同机型需要对应的 BOARD 名称进行编译。
1.2 备份原厂数据(关键步骤)
这是最重要的一步,务必在刷入任何自定义 Bootloader 前完成,以便日后恢复。
开启路由器 SSH(不同机型方法不同,例如 Netcore N30 Pro 默认在管理后台开启局域网 SSH 访问)。
通过 SSH 连接到路由器,使用
cat /proc/mtd查看分区表。使用
dd命令备份关键分区(如BL2,u-boot-env,Factory,FIP,ubi等)。以常见 NAND 设备为例:1
2
3
4
5
6mkdir /tmp/backup
dd if=/dev/mtd1 of=/tmp/backup/mtd1_BL2.bin
dd if=/dev/mtd2 of=/tmp/backup/mtd2_u-boot-env.bin
dd if=/dev/mtd3 of=/tmp/backup/mtd3_Factory.bin
dd if=/dev/mtd4 of=/tmp/backup/mtd4_FIP.bin
dd if=/dev/mtd5 of=/tmp/backup/mtd5_ubi.bin使用 SCP 或 WinSCP 等工具将备份文件下载到电脑妥善保存。
1.3 准备编译环境(如需自行编译)
如果你打算使用项目提供的预编译文件(如来自 GitHub Actions 或第三方网盘),可跳过此步。如需自行编译,需要 Linux 环境(如 Ubuntu/Debian)并安装依赖:
1 | sudo apt install gcc-aarch64-linux-gnu build-essential flex bison libssl-dev device-tree-compiler qemu-user-static nodejs npm |
注意:如果构建 armv7l 设备,还需安装
gcc-arm-linux-gnueabi。首次构建 U-Boot 前,需在uboot-mtk-20250711/failsafe/embedded目录下运行npm install以获取本地压缩工具。
2. 获取与构建固件
方式一:直接下载预编译文件(推荐)
- 访问项目的 Releases 页面 或 GitHub Actions 的 Artifacts。
- 根据你的设备型号 (BOARD) 和固件布局 (VARIANT) 下载对应的 FIP 文件(例如
mt7981_netcore_n30pro-fip-fixed-parts.bin)。
方式二:使用 GitHub Actions 自行构建
- Fork 此仓库到你的 GitHub 账户。
- 进入你 Fork 仓库的 Actions 页面,选择相应的工作流(如
Build FIP)。 - 根据提示输入参数(如
BOARD,VERSION,VARIANT等)并手动触发运行。 - 构建完成后,从生成的
artifacts或releases页面下载固件。
方式三:本地手动编译
克隆仓库到本地:
1
2git clone https://github.com/Yuzhii0718/bl-mt798x-dhcpd.git
cd bl-mt798x-dhcpd执行构建命令。基本语法为
SOC=<芯片型号> BOARD=<板子名称> VARIANT=<布局> ./build.sh。例子 1:为 360T7 (MT7981) 构建默认版本:
1
SOC=mt7981 BOARD=360t7 ./build.sh
例子 2:为 WR30U (MT7981) 构建支持多布局的版本:
1
SOC=mt7981 BOARD=wr30u MULTI_LAYOUT=1 ./build.sh
例子 3:为 Redmi AX6000 (MT7986) 构建支持多布局的版本:
1
SOC=mt7986 BOARD=redmi_ax6000 MULTI_LAYOUT=1 ./build.sh
生成的固件(如
*-fip-*.bin)将位于output目录下。
3. 刷入 U-Boot (FIP)
获取到正确的 FIP 文件后,通过以下方法之一刷入路由器。
方法一:在原厂固件或 OpenWrt 下通过 SSH 刷入
使用 SCP/WinSCP 将下载的
fip-*.bin文件上传到路由器的/tmp目录。通过 SSH 连接到路由器,执行写入命令。请务必确认你的 FIP 分区名(常见为
FIP或fip)。1
mtd write /tmp/你的fip文件名.bin FIP
或
1
mtd write /tmp/你的fip文件名.bin fip
如果命令执行无报错,即表示刷入成功。部分设备可能需要重启生效。
方法二:在现有 U-Boot 下通过 TFTP 或 Web 刷入
如果你的设备已经刷入了其他版本的 U-Boot(如 hanwckf 版本),并且其提供了 Web failsafe 界面或 TFTP 功能,可通过其上传刷入新的 FIP 文件。此过程通常需要连接 TTL 串口或使用 BreedEnter 等工具进入 U-Boot 命令行。
4. 进入与使用新的 Failsafe Web UI
刷入成功后,进入新 U-Boot 的 Web 恢复界面(即 failsafe 模式)。
进入方式
- 捅 Reset 键:断开路由器电源,按住机身上的 Reset/WPS/Mesh 按键,然后接通电源,持续按住约 5-10 秒,直到指示灯闪烁或变为特定状态后松开。
- 设置电脑 IP:将电脑通过网线连接到路由器 LAN 口,设置静态 IP 为
192.168.1.x(如192.168.1.2),子网掩码255.255.255.0。 - 访问 Web UI:在浏览器地址栏输入
http://failsafe.lan或http://192.168.1.1即可访问。
Web UI 主要功能
该 Web UI 功能强大,可直接在浏览器中完成:
- 系统信息:查看当前 U-Boot 版本、CPU、内存等。
- 固件更新:上传并刷写新的固件(支持单镜像升级 SIMG)。
- 备份下载:备份当前 Flash 中的任意分区(强烈建议进入后立即备份所有分区)。
- Flash 编辑器:直接读写 Flash 内容,高级功能,需谨慎操作。
- Web 终端:提供网页版的命令行终端,方便执行 U-Boot 命令。
- 环境变量管理:查看、修改、保存 U-Boot 环境变量。
- UBI 卷管理:管理 UBI 分区上的卷,方便切换不同固件。
5. 高级配置与说明
5.1 选择正确的版本 (VERSION)
项目提供三个版本分支,可根据需求选择:
- 2025(默认):最新版本,适用于大多数新固件(Kernel 6.1+)。
- SP1:兼容仍在使用 Kernel 5.4 的老旧固件,可能解决部分设备在 2025 版本上的问题(如 hwrng 错误)。
- SP2:针对较新平台(如 MT7987)或最新内核固件有更好的兼容性。
5.2 选择正确的固件布局 (VARIANT)
对于 MTD 设备,VARIANT 参数至关重要,需与你的固件类型匹配:
- default(默认):适用于大多数原厂或自定义分区布局的固件,启用 MTK-NMBM。
- nonmbm:适用于禁用 MTK-NMBM 的原厂/自定义固件。
- ubootmod:专为 OpenWrt/ImmortalWrt 的
ubootmod布局固件优化。 - ubi:设计用于 UBI 布局的固件(例如分区表为
spi-nand0:1024k(bl2),-(ubi))。 - openwrt:来自官方 OpenWrt 仓库的版本,目前不带 failsafe Web UI。
5.3 进入 Failsafe 模式的按键自定义
你可以通过环境变量自定义触发 failsafe 的按键:
- 按标签搜索:
setenv glbtn_key wps(支持reset,wps,mesh等)。 - 直接指定 GPIO:
setenv glbtn_gpio !0(!表示反转信号)。
执行saveenv并重启生效。
5.4 Telnet 支持
U-Boot 内置了 Telnet 服务器(默认端口 23),可通过网络进入 U-Boot 命令行。可使用 telnetd_enable 环境变量控制其开关(设为 0 禁用),用 telnet_port 修改端口。
6. 常见问题与风险提示
- 刷入后无法启动? 尝试捅 Reset 键进入 failsafe 模式,通过 Web UI 恢复你之前备份的
BL2和FIP分区。 - 无法获取 IP 地址? 确认你的设备支持 DHCPD 功能(此分支已内置)。某些机型(如部分小米)可能需擦除
u-boot-env分区:mtd erase u-boot-env。 - 刷入主线 OpenWrt (ubootmod) 的特别步骤:
- 在 Web UI 中备份所有分区。
- 先刷入适用于 ubootmod 的 BL2,再刷入 FIT 版本的 FIP。
- 在 Web UI 中使用 Flash Editor 擦除 UBI 分区。
- 尝试在固件升级页面或通过 Initramfs 引导 ubootmod 固件。
- 超频风险:项目支持通过编译选项调整 ARMPLL 频率(如 MT7981 超频至 1.8GHz)。此为高危操作,极易导致设备永久变砖,非专业人士切勿尝试。



