华硕AC86U 跳电变砖后的处理

作者:陆麟
转载请征得作者同意.
2020.01.25



年初一大早,家里突然跳闸断电。由于正好有2个NAS的磁盘阵列在校验,赶紧跳起连上NAS看一下,别把磁盘阵列给搞损毁了。连进去一看,阵列没事,继续数据校验,但家里3个AC86U组建的Mesh网掉线了一个,情况如下:
主路由:正常
网线直连的Mesh Node:正常
无线连接的Mesh Node:离线
离线的路由重启:主路由无法仍然检查到
离线的路由反复重启:主路由无法仍然检查到 基本断定firmware异常处理有bug。(firmeware版本是写作时刻的最新版:3.0.0.4.384_81351-gcb63868)
拔电,常按reset后插电,拔电,长按LED按键后插电,一顿各种恢复出厂设置操作,希望进入恢复模式。结果ausu的Firmware restoration工具仍然无法发现离线的路由,重置失败,路由器变砖了。

花费一点时间,看了一下,路由状态为所有灯全灭,连电源灯都不亮了。但是电脑网线连路由,电脑网卡段千兆绿灯亮。表示其实网络通。只是路由全黑不显示状态了。
AC86U的默认IP,192.168.50.1(不是192.168.1.1/192.168.0.1),改一下电脑IP为192.168.50.5,打开浏览器连192.168.50.1的路由web,果然有画面出来了。显示无法连接Parent AP。
Firmware的Bug当然是一连串的,Mesh Node所有参数都是从主节点来的,恢复出厂动作没有将管理员账户清空,也没有将路由恢复到初次使用的向导界面,根本就没有设置界面,所以仍然无法从web管理端进行下一步操作。
好在ssh端口测试下来还通,用主路由的账户密码连了进去。接下来就是动脑筋将路由切换到初次使用的向导界面。
在完全不知道路由代码的情况下,如何进行下一步分析就是全靠经验水平了。根据大部分开发人员的写作习惯,一般是加了功能后,功能主体跑通,异常都不跑。推断恢复出厂设置已经设置了大部分的参数。(例如默认IP已经恢复了。只是这个默认IP不是大家以往所知的192.168.1.1)。

接下来的推理,全部基于自身日常背景知识。。。片上的系统的存储区域,有RAM/FLASH/NVRAM,RAM由于掉电就丢数据,因此不会保存需要经历断电引导周期的数据。FLASH被分割为ROM 镜像和JFFS(针对FLASH特性的可读写的文件系统),OS的内核和ROOT FS一般用2个FLASH分区分开,形成假的ROM。多余的空间变成JFFS供系统启动后使用。NVRAM性质类似FLASH。因此可变参数一共有两个地方保存。
1. nvram
2. jffs
再推测开发人员一般会使用带“mode”的关键字来设定路由器的工作模式,用“mode”作为关键字搜了一下nvram,搜出来一大堆model/modem,好几页之多。。。过了一眼,其中有一个名为sw_mode的参数,特别亮眼。连接到主路由看一看,与变砖的Mesh Node比较一下,果然主路由上sw_mode=1, 变砖的路由sw_mode=3. 接下来执行
nvram set sw_mode=1
nvram commit
reboot
几条命令下来,路由重启。再次通过web界面连接路由器时,路由器初次上电设定的界面就出现了。至此,再次将路由器设定为Mesh Node,到主路由里面搜索Mesh Node,一顿正常操作,整个Mesh网所有节点就复活了。
前后折腾3个小时,只查了第一步nvram就把问题解决了,都还没分析web后台到底设置了什么参数,前端后端怎么串起来的也没看,属于是运气比较好。眼下正好是过年第一天,有时间顺带把停更这么久的网站再更新一下,供大家参考。





by Inside Programming 2020(c)