小米路由器 Pro 安装 OpenWrt
准备工作
下载 开发版固件
选择
ROM
后,在下面找到自己路由器对应型号的开发版本固件并下载下载 ssh 固件
需要初始化路由器, 并用小米 WIFI (自行搜索下载) APP绑定路由器后才能下载
ctrl+f 搜索 "XiaoMi", 找到你的路由器版本后点击最后一列的
ViewEdit data
来查看该硬件设备的文档
这里面有包含该硬件型号可用的 OpenWrt 固件文件下载地址:
Firmware OpenWrt Install URL: 第一次安装时使用
Firmware OpenWrt Upgrade URL: 固件升级时使用牙签一枚
磁盘格式为
FAT32
的U盘一个mac 可使用系统自带的
磁盘工具
软件格式化; windows 可以通过Diskgenius
等软件格式化USB-C/A 转网线口拓展坞 (可选)
如果你的电脑自带网线口那就不用了, 在安装完 OpenWrt 固件时连接路由器使用
USB 转 TTL ch340g 连接线 (可选)
刷成砖头的时候重装系统用
安装开发版固件并开启 ssh 功能
安装开发版固件和 ssh 固件需要执行两遍 1~3 步骤,
开发版固件文件名为 miwifi.bin
ssh 固件文件名为 miwifi_ssh.bin
1.将下载的固件 bin
文件放在U盘根目录
2.将路由器电源拔掉后再插入U盘, U盘插入后用牙签戳进路由器的 reset 小孔, 里面是一个按钮,
在按住不松开 reset
键的同时接入路由器电源, 等待路由器前面的指示灯变成黄色闪烁状态就可以松开了
3.等待几分钟后指示灯变蓝, 就代表刷机成功了。
如果你在路由器连接着电源的时候把U盘插上路由器了, 路由器会把你的U盘设置为外接存储设备, 这会导致你按照前面的步骤操作不会成功,
这个时候把U盘使用 FAT32
重新格式化, 再从步骤 1 开始重来一遍即可。
4.验证
从官方 ssh 固件 下载页面可以获得 ssh 账号密码
登录成功后显示欢迎提示
BusyBox v1.19.4 (2023-02-23 08:50:23 UTC) built-in shell (ash)
Enter 'help' for a list of built-in commands.
-----------------------------------------------------
Welcome to XiaoQiang!
-----------------------------------------------------
$$$$$$\ $$$$$$$\ $$$$$$$$\ $$\ $$\ $$$$$$\ $$\ $$\
$$ __$$\ $$ __$$\ $$ _____| $$ | $$ | $$ __$$\ $$ | $$ |
$$ / $$ |$$ | $$ |$$ | $$ | $$ | $$ / $$ |$$ |$$ /
$$$$$$$$ |$$$$$$$ |$$$$$\ $$ | $$ | $$ | $$ |$$$$$ /
$$ __$$ |$$ __$$< $$ __| $$ | $$ | $$ | $$ |$$ $$<
$$ | $$ |$$ | $$ |$$ | $$ | $$ | $$ | $$ |$$ |\$$\
$$ | $$ |$$ | $$ |$$$$$$$$\ $$$$$$$$$ | $$$$$$ |$$ | \$$\
\__| \__|\__| \__|\________| \_________/ \______/ \__| \__|
root@XiaoQiang:~#
安装 OpenWrt
1.拷贝固件到路由器
先将上面下载到的 OpenWrt 固件修改一个简短的名字方便使用如: factory.bin
- 使用 scp
scp ./factory.bin [email protected]:/tmp/
ssh [email protected]
cd /tmp
- 拷贝固件到U盘然后接入路由器
ssh [email protected]
cd /extdisks/sda1 # 这个路径可以有变化,检查 ls /extdisks
- 在电脑安装 npm 包
serve
并启动一个 http 静态服务器
ssh [email protected]
cd /tmp
wget http://192.168.31.100:5000/factory.bin
2.按照以下命令顺序执行刷入固件:
# 设置环境变量
nvram set flag_try_sys1_failed=1
nvram set flag_try_sys2_failed=0
nvram set flag_boot_success=0
nvram commit # 将环境变量储存到闪存芯片
dd if=factory.bin bs=1M count=4 | mtd write - kernel1 # 读取文件 factory.bin 并写入 kernel1 磁盘分区
mtd erase rootfs0 # 抹掉磁盘分区 rootfs0 上的所有数据
mtd erase rootfs1 # 抹掉磁盘分区 rootfs1 上的所有数据
mtd erase overlay # 抹掉磁盘分区 overlay 上的所有数据
dd if=factory.bin bs=1M skip=4 | mtd write - rootfs0 # 读取文件 factory.bin 并写入 rootfs0 磁盘分区
reboot
路由器进入重启状态,等待几分钟,观察前面的指示灯由黄色闪烁变为蓝色则代表安装成功,
查看系统分区表 cat /proc/mtd
3.安装 Web UI 软件包
如果你刷入的固件不带有 WEB UI 界面, 需要先登录进 SSH 安装 UI 界面。
ssh [email protected] # 第一次安装默认没有密码
opkg update # 刷新软件源
opkg install luci # 安装 WEB UI 软件包
安装成功后, 就可以从浏览器直接访问 http://192.168.1.1 进入 WEB UI 的管理界面
4.配置 OpenWrt
官方固件安装完成后 wifi 默认是关闭状态, 所以需要使用网线连接到路由器 Lan 口才能进一步配置.
OpenWrt 的默认网关地址一般为: 192.168.1.1, 这个可能跟光猫有冲突,第一步先将路由器 ip 修改掉
1.点击菜单 Network -> Interfaces, 点击 lan 接口的编辑按钮
2.将 IPv4 address 192.168.1.1
修改如: 192.168.31.1
3.IPv4 gateway 设置为 192.168.1.1
4.保存&应用, 点击后要从新 ip http://192.168.31.1
打开 web 管理界面应用配置, 不然90秒后会自动回滚配置的!
刷回官方固件
1.通过 ssh openwrt 系统, 输入以下命令:
# 设置环境变量
fw_setenv flag_try_sys1_failed 0
fw_setenv flag_try_sys2_failed 1
fw_setenv flag_boot_success 0
如果执行命令出错, 先安装 OpenWRT 官网的 R3P 升级包, 然后再次执行上面的命令。
2.断开路由器电源,参考 安装开发版固件并开启 ssh 功能 刷入官方固件
变砖急救
如果你的路由器能正常启动且前面板小灯显示黄色, 且搜不到 WIFI, 用网线连接 LAN 口也是获取不到 ip, 就和砖头一样。 那你可以执行下面的操作重新安装系统救回来
UBOOT 引导
通过 TTL 工具连接到电脑
提前准备以下工具:
- 购买 USB 转 TTL ch340g 连接线 (连接到路由器 pcb 那一端需要
公头
) - 下载并安装 PuTTY 软件
1.拆开路由器右侧的盖子, 不需要拧螺丝拆机
侧边的外壳通过卡扣与铝合金机身连接, 所以可以使用金属翘片或两把一字螺丝刀塞入缝隙撬开塑料壳
2.将 TTL 排线连接到 PCB 上的焊盘 (上面有白色字体标记着 3V3、RX、GND、TX)
TTL 接入电脑 USB 后可以将路由器放远一点, 拉紧排线来保持与 PCB 焊盘接触, 或者用电烙铁焊一下
PCB 接口与 TTL 连接顺序如下:
TX <-> RXD
GND <-> GND
RX <-> TXD
3V3 <-> 3V3
3.打开 putty 软件, 按以下配置设置
Connection type: `Serial`
Speed: 115200
Serial line: 路由器串口
关于路由器串口, windows 用户可以打开
设备管理器->端口
查看, mac 用户执行命令ls /dev/tty.*
4.将路由器接入电源
5.在 putty 软件界面点击 open
6.等待引导启动直到打印出如下提示:
Please choose the operation:
1: Load system code to SDRAM Via TETP.
2: Load system code then write to Flash via TETP.
3: Boot system code via Flash (default)
4: Entr boot command line interface.
7: Ioad Boot Ioader code then write to Flash via serial.
9: Load Boot Loader code then write to Flash Via TFTP.
接着可以选择以下两种方法 (U盘、FTP) 来刷入新固件
U 盘 (刷官方固件)
1.将准备好固件的 U盘插入路由器, 参考 安装开发版固件并开启 ssh 功能
2.键盘按下数字4 (选择 Entr boot command line interface.), 等待引导加载完成后输入下面命令:
# 设置 uboot 环境变量
setenv flag_try_sys1_failed 0
setenv flag_try_sys2_failed 1
setenv uart_en 1
saveenv # 将环境变量保存到闪存芯片
reset # 重启
3.拿牙签捅住路由器的 reset 按钮, 然后等待路由器自动重启刷入固件, 闪黄灯的时候放开, 等一会变绿灯常亮时就可以搜索到 xiaomi_router 的初始 wifi 了
TFTP (刷官方或第三方固件)
1.用网线将路由器 lan 口与电脑连接, ip 设置为手动获取, 如: 192.168.1.100
2.打开 TFTP 软件启动 ftp 服务, 按如下配置:
Current Directory: 固件目录
Server interfaces: 上面设置的 ip
固件目录不要包含中文
3.在 putty 窗口键盘按下数字1或2, 输入 ftp 配置:
1: system Load Linux to SDRAM via TFTP.
Please Input new ones /or ctrl-c to discard
Input device IP (192.168.1.1)=-:192.168.1.1
Input server IP (192.168.1.100)==:192.168.1.100
Input Linux Kernel filename (ram.bin) ==:ram.bin
这里设置的 ip 和文件名要跟步骤2设置的保持一致
4.回车等待固件刷入完成, 在路由器变绿灯常亮时就可以搜索到 xiaomi_router 的初始 wifi 了
参考
小米路由器3 保姆级救砖回忆录及实操技巧演示
[UBOOT-TTL]小米路由器救砖或刷机指南(R3P为例)
第三方引导, 如 breed、pd-boot
通过直接刷闪存芯片的方式更换引导, 参考 使用编程器救砖小米路由器4A千兆版的过程
虽然不是小米路由器pro的版本, 但原理是相似的,不过刷引导的方式过于麻烦,不建议更换官方 UBOOT
FAQ
opkg update
失败
Package luci (git-23.051.66410-a505bb1) installed in root is up to date.
Collected errors:
* pkg_hash_check_unresolved: cannot find dependency kernel (= 5.15.113-1-71a134291563a3ffe2d4deaf24707c96) for kmod-nf-reject
* pkg_hash_check_unresolved: cannot find dependency kernel (= 5.15.113-1-71a134291563a3ffe2d4deaf24707c96) for kmod-nf-reject6
原因: 安装了 OpenWrt 的快照版本, 重新安装 OpenWrt 稳定版本即可
setenv、fw_setenv、nvram 的区别
这三个命令功能类似, 都用于设置固件引导加载时使用的环境变量, 这些变量储存在非易失性 RAM 中如 EEPROM, 区别只是他们运行的环境不一样
环境变量可能会包含以下设置:
内核启动地址
从 usb 启动
从 TFTP 协议启动
mac 地址
分区表
恢复模式
串口波特率
TFTP 客户端
...
setenv name=value
:
uboot 固件引导过程中提供的命令, 在通过 ttl 串口连接的 putty 终端中使用, setenv 不会永久保存环境,直到你执行 saveenv 为止。
相关命令:
env print (alias printenv) 打印环境变量
env save (alias saveenv) 保存环境变量到闪存
fw_setenv name=value
:
openwrt 系统运行中提供的命令, fw_setenv 会更改当前环境并同时保存, 操作 U-Boot 环境的相关工具包含在 opkg-package uboot-envtools
中。
相关命令
fw_printenv 打印环境变量
nvram
openwrt 系统运行中提供的命令, 在 OpenWrt 的早期版本中提供了两个不同的配置系统:
- 通过 nvram 命令进行 openwrt 的设置
- 以及用于普通 Linux 操作系统和应用程序设置的标准
/etc
系统, 大多数 OpenWrt 的配置储存在/etc/config
目录下
相关命令
nvram set name=value 设置环境变量
nvram unset name 取消设置环境变量
nvram get name 打印单个环境变量
nvram show 打印环境变量
nvram commit 保存环境变量到闪存
参考 OpenWrt configuration Building a Transparent Firewall with Linux, Part III