bl-mt798x项目基于mtk原厂提供的ATF及uboot源码,特点如下
uboot自带mtk原厂开发的简易webui恢复界面,可以通过webui直接刷入固件或者更新uboot,也可以使用串口+TFTP刷入固件
支持GL.iNet开发的通电后长按RESET按钮自动进入webui恢复界面的功能
支持多种Flash分区布局切换功能(仅支持spi-nand),可以在webui中切换不同的分区布局,完美兼容小米原厂固件
路由器型号
CPU型号
BOARD名称
默认IP地址
https://github.com/hanwckf/bl-mt798x
https://github.com/hanwckf/bl-mt798x/releases/latest
目前最新的release已经更新到2023.07版本的uboot,同时也提供2022.06的旧版uboot下载
拉取源码,安装arm-gcc工具链。对于ubuntu/debian系统,可以使用以下命令安装
sudo apt update
sudo apt install gcc-aarch64-linux-gnu build-essential flex bison libssl-dev
运行源码目录下的build.sh
开始自动编译,脚本参数如下
SOC=[mt7981|mt7986] BOARD=<board name> MULTI_LAYOUT=[0|1] ./build.sh
# SOC=mt7981 BOARD=360t7 ./build.sh
# SOC=mt7981 BOARD=wr30u MULTI_LAYOUT=1 ./build.sh
# SOC=mt7986 BOARD=redmi_ax6000 MULTI_LAYOUT=1 ./build.sh
# SOC: CPU型号,可以选择mt7981或mt7986
# BOARD: 路由器型号,根据支持机型表格里的BOARD名称填写
# MULTI_LAYOUT: 是否启用多种Flash分区布局支持,默认禁用。目前此功能仅支持小米wr30u和红米ax6000
# FIXED_MTDPARTS: 是否忽略mtdparts环境变量并固定Flash分区布局,默认开启,推荐开启
编译完成后,在output
目录下生成可直接写入Flash的uboot FIP二进制文件
failsafe webui使用说明
按住路由器的RESET按钮后通电,保持至少15秒后松开,路由器会自动进入failsafe模式
因uboot不支持DHCP功能,需要把电脑的IP地址设置成固定IP,其中
对于小米路由器,应设置成192.168.31.100
对于康佳KOMI-A31,应设置成192.168.2.100
对于对于其它路由器,应设置成192.168.1.100
将电脑连接到路由器任一LAN口,使用浏览器的隐身模式访问路由器的IP地址,其中
对于小米路由器,访问192.168.31.1
对于康佳KOMI-A31,访问192.168.2.1
对于其它路由器,访问192.168.1.1
选择固件文件上传,支持sysupgrade或factory格式的固件,待上传完毕后点击开始刷机
刷机完成后,路由器会自动重启,请将电脑的IP地址重新设置成DHCP自动获取
如果要使用webui更新uboot,可以访问http://<路由器IP>/uboot.html
(例如http://192.168.31.1/uboot.html
),选择FIP格式的uboot二进制并上传刷入即可,如下图所示
自定义failsafe模式触发按钮
默认情况下,开机后按住RESET按钮会进入failsafe模式,可设置glbtn_key
环境变量自定义failsafe模式触发按钮
# 在uboot串口控制台设置触发按钮为mesh按键并保存
setenv glbtn_key mesh
saveenv
也可以在openwrt系统内通过fw_setenv
命令设置uboot环境变量
# 在openwrt/immortalwrt系统内设置glbtn_key环境变量
fw_setenv glbtn_key mesh
串口控制台使用说明
uboot的默认波特率为115200,流控关闭
uboot启动阶段会显示mtk的启动菜单,此时选择最后一项,并再次按下任意键即可进入uboot控制台
使用mtkupgrade fw
命令可以通过TFTP刷入固件
使用mtkupgrade fip
命令可以通过TFTP刷入uboot
多种分区布局切换功能
uboot支持在dts里定义多种不同的Flash分区布局,并可在webui刷入固件时进行切换,此功能目前支持小米WR30U和红米AX6000
在uboot串口控制台中,可以使用showlayout
查看内置的分区布局信息。
环境变量mtd_layout_label
代表当前使用的分区布局,当mtd_layout_label
未设置时,默认使用default
分区布局
MT7981> showlayout
mtd label: default, mtdids: nmbm0=nmbm0, mtdparts: nmbm0:1024k(bl2),256k(Nvram),256k(Bdata),2048k(factory),2048k(fip),256k(crash),256k(crash_log),34816k(ubi_kernel),79872k(ubi),256k(KF)
mtd label: immortalwrt-112m, mtdids: nmbm0=nmbm0, mtdparts: nmbm0:1024k(bl2),256k(Nvram),256k(Bdata),2048k(factory),2048k(fip),256k(crash),256k(crash_log),112m(ubi),256k(KF)
mtd label: qwrt, mtdids: nmbm0=nmbm0, mtdparts: nmbm0:1024k(bl2),256k(Nvram),256k(Bdata),2048k(factory),2048k(fip),256k(crash),256k(crash_log),1024k(rsv0),110m(ubi)
MT7981> printenv mtd_layout_label
mtd_layout_label=immortalwrt-112m
# 手动设置mtd_layout_label环境变量并保存即可切换分区布局,与webui中选择分区布局的效果完全一致
# 必须在刷入固件之前设置正确的mtd_layout_label才能生效,例如:
# setenv mtd_layout_label default
# saveenv
小米WR30U多种分区布局固件兼容性
uboot (default)
uboot (immortalwrt-112m)
uboot (qwrt)
刷入不同分区布局的固件,必须在uboot内切换分区布局并刷入固件,不得在原有系统内刷入
uboot支持刷入小米原厂mtd8/mtd9备份文件(可从此处下载),不支持miwifi.com
官网下载的固件
刷入小米原厂固件后,首次开机时会自动重启3次,请耐心等待
刷入小米原厂固件后,uboot env环境变量分区将会被小米原厂固件覆盖重写
刷入小米原厂固件后,不得在小米系统内升级固件,如果要更新原厂系统,必须通过uboot刷入新系统的mtd8/mtd9备份文件
由于OpenWrt主线的ubootmod固件未开启nmbm支持,因此不支持任何ubootmod分区布局的主线固件(包括OpenWrt, X-Wrt等带有ubootmod字样的固件),请使用OpenWrt主线提供的uboot启动ubootmod固件