十年老路由的觉醒——TTL刷机水星MW300Rv2小记
2020年春节回家,老妈与时俱进地提出了“阳台上WiFi信号差无法微信语音/视频通话的问题”。这些年家里的WiFi一直依靠一台网件/Netgear WNDR3700 v2独立支撑,运行OpenWrt十分稳定从未令人失望。但是信号覆盖整个房子确实吃力。
翻了翻家里的陈年旧物,“那些年我折腾过的路由器”一文中留下的除了网件WNDR3700 v2以外,就只有一台水星/Mecure MW300R v2了。采用高通AR7241芯片,RAM 32 MB,FLASH 4 MB,具有一定可玩性,可以刷OpenWrt和DD-Wrt。这款路由器v3及以后的版本缩水严重,比如Flash 2MB就没什么折腾空间了。打算用这个老古董做repeater或者在OpenWrt下尝试组个mesh网络来改善家里的WiFi信号。
事实上,水星的MW300r v2,迅捷的FW300r v2,TP-Link的TL-WR841n v7,TL-WR840n v1,TL-MR3420 v1的硬件基本是一致的。其中,mw300rv2,fw300rv2,wr841nv7 硬件几乎完全一样,wr840nv1据说是少了个wps按键。
mr3420v1则是加了个USB。所以甚至有折腾的玩家把mw300rv2/fw300rv2/wr840nv1/wr841nv7等改出了USB,也可以刷mr3420v1的固件。
十年老路由器了,2020年的市场持有率太低,原厂固件刷OpenWrt,DD-Wrt的方法就不详聊了,详情可以自行挖坟恩山老帖:
- 原厂固件刷OpenWrt:zjhzzyf更新于20110907
- 各种固件互刷:rucio原帖20110325,rucio重发20130120,tornado7438再重发20161217,注意不同机型的固件头部可能不一样。
我这台路由器本来运行的是OpenWrt基于Attitude Adjustment 12.09 branch的版本,硬件显示为tp-link tl-wr841n v7。作为不更新会死星人,首先去OpenWrt官网查询了一下wr841nv7的更新,惊喜地发现居然支持18.06.5版的OpenWrt哦。
下载了基于18.06.5的官方编译-sysupgrade.bin文件,web界面刷新(未保留配置)果断变砖。现象为上电后不断重启。。。
本来这种老古董砖了就不打算要了,但是翻箱倒柜捣鼓了一番发现我还真是只有这么一个宝贝路由器了,疫情当前,收个别的路由器都不容易发货,所以最后还是打算通过TTL刷机来恢复。
找到下图中这个串口通信区域:
预留的接口焊上去四根排针即可方便的使用杜邦线连接USB转TTL适配器。但我找不到电烙铁和排针,也就没有焊排针,因此直接用杜邦线内插了测试线,让老妈帮忙按在触点上完成了刷机。
使用3.3V的TTL电平,将串口Rx连接路由器Tx,串口Tx连接路由器Rx,GND连GND,VCC悬空,电容C496需要短接否则通信有乱码,我是用镊子夹住两端进行短接的,愿意一劳永逸的可以拆掉该电容后焊通两个触点。
TTL刷机软件方面需要准备:
- USB转串口TTL适配器的驱动(我的是基于CH340芯片的);
- 串口通信软件:SecureCRT,Putty,串口通信助手等;
- TFTP服务器:我用了Windows下的TFTPD32;
- 需要刷入的固件,本文中将其命名为abc.bin,这个固件可以是原厂固件,也可以是OpenWrt/DD-Wrt固件(应该是使用factory版本而非升级版)。
用TTL线连接电脑和路由器,并用一根网线连接电脑和路由器LAN口(串口只用于发送控制命令,固件下载是通过网络使用TFTP协议进行的)。
TP-Link路由器TTL刷机的方法基本都差不多,但是根据硬件不同,写入的地址是不一样的,因此刷机命令仅适用于文中所述的固件。
首先把电脑连接路由器的网卡IPv4地址改为192.168.1.10,这也就是TFTP服务器的地址了。
架设好TFTP服务器,将代刷入的固件abc.bin放入服务器当前目录中。可以自行用TFTP客户端测试一下服务器工作是否正常。在Windows下可以在“启用或关闭windows功能”中安装“TFTP客户端”,然后在Command命令提示符/Powershell窗口中键入下列命令看看是否能够下载abc.bin文件:
tftp -i 192.168.1.10 get abc.bin
打开串口通信,波特率设置为115200,给机器上电,监测串口输出,显示“Autobooting in 1 seconds”时,在1秒内输入tpl(回车)中断执行。总是错过的话,可以提前准备好要发送的数据,例如在串口调试助手中输入好tpl(回车)适时点击“发送”,或者在SecureCRT中使用右键快速发送剪贴板中的数据等。
成功终止路由器启动过程后,串口输出“ar7240>”提示符等待输入。首先设置tftp服务器IP地址<serverip>和路由器地址<ipaddr>,可以使用printenv命令检查环境变量。
ar7240> setenv serverip 192.168.1.10
ar7240> setenv ipaddr 192.168.1.169
ar7240> printenv
然后下载固件:
ar7240> tftpboot 0x80000000 abc.bin
下载成功的输出最后两行是:
done
Bytes transferred = 3932160 (3c0000 hex)
然后擦除部分地址:
ar7240> erase 0x9f020000 +0x3c0000
擦除成功后的输出最后一行是:
Erased 60 sectors
然后执行一个复制命令:
ar7240> cp.b 0x80000000 0x9f020000 0x3c0000
复制成功的输出最后两行是:
Copy to Flash… write addr: 9f020000
done
最后执行bootm命令:
ar7240> bootm 0x9f020000
执行成功的输出是:
## Booting image at 9f020000 …
(省略一万行……)
write successfully
此时路由器已经以新刷入的固件启动了,完成了一块砖的自我觉醒!
P.S. 实测该路由器水星MW300R v2可以使用DD-WRT官网针对TP-Link WR841N(D) v7 编译的基于 v3.0 (Beta) Build 40559(官网发布日期为:2019-08-06)。
参考资料:
[1] 王乐平|水星MW300R v2 路由器刷DD-Wrt 小记
本文固定链接: https://blog.xieyc.com/mw300rv2-ttl-flashing/ | 小谢的小站