CR660x 简评 & AX3600 救砖教程
最近从群友那收来了一台刷砖掉的 AX3600,价格非常实惠,只不过要自己拆机救砖。总之就是这样,想写一篇步骤说明比较详细的救砖教程。
不过还是先说一下:此处的「砖」,是硬件没有损坏,只是因为刷机失误,导致能进入 U-Boot 但不能启动系统,并且之前已经为救砖设置好了 uart_en=1
和 boot_wait=on
变量和值。硬件故障不在本文讨论范围内。
开始写的时候,又觉得既然前言聊了这么多,还是给标题也加上「CR660x 简评」吧。
CR660x 简评
大概是在今年上半年,因为不满寝室里使用的理财路由 K2P 的 Wi-Fi 速度(大概只有 300Mbps,而 WAN 上限能达到 1000Mbps),我想到购入一个 Wi-Fi 6 路由器进行替换。购入的是当时的另一款灵车:小米为运营商侧提供的产品,CR6606/8/9(无运营商 Logo 的公开版和三大运营商定制版,联通 = 6,移动 = 8,电信 = 9)。
这款路由的民间价格也就一百来块(我当时大概是 ¥150 购入的公开版——没有图上的运营商 Logo;全新未拆),也许是这个价位唯一一台能刷第三方系统的玩具,我觉得很大一部分原因是 MT7621 实在是被国内厂家和爱折腾人士玩得太明白,价格也亲民。
我并没有到手就直接刷机,而是先用了一段时间的官方系统 MiWiFi。使用这么久之后,总的来说,官方系统相对更加稳定,而且其自带的 IPv6 NAT 功能只需简单点点就能配置好,恰好解决了我这个蛋疼环境的 IPv6 获取问题;但是,它的性能表现平平,并且有一些我想放置到路由器上运行的功能(SmartDNS 和校园网自动登录,虽然我校在不断电的前提下可以一个月才登录一次),官方系统是不能胜任的。另外,不知道我有没有记错,使用官方系统期间,我打游戏时有过跳 Ping 现象。
刷机
这台路由获取 SSH 权限的方法相对复杂一些,需要另外一台刷有 OpenWRT 且支持 Wi-Fi 的路由器 / … 辅助。方法我就不赘述了,请自行谷歌。
连上 SSH 之后,首先强烈建议把所有分区备份一次。之后可以使用解锁分区、修改 bdata
的 CR660x 适配版:ericwang2006/ax3600_tool。本质上就是帮你把 SSH、Telnet 等开关打开然后写入 mtd。当然我个人更建议手动修改备份的 bdata
分区,把 boot_wait=on
一并手动写入,原因见下文。
之后自然也可以刷入 pb-boot 开始刷机了。想刷回完全官方的系统,恩山上也有帖子。系统的话,我先后尝试过各种版本的 OpenWRT,也有我自编译的,还有别人编译的 Padavan。
小小的总结:没有一个固件能算得上足够稳定。可能是这块 7621 的体质问题。
不论是 OpenWRT 还是 Padavan,都出现过一段时间后自动重启的问题。这个问题至少与 HWNAT 关系不那么大(我测试过一次对比,结果均是自动重启),和 IPv6 NAT/Bridge 的关系应该也不大?
如果买来做 AP 的话,个人最推荐的系统是「无量天尊」编译的精简超频版 Padavan(恩山原帖)。无线网速(AP 模式下)能基本跑满千兆,性能是没什么问题了,但也会有重启的问题;玄学的是,目前也有长达十多天都没有重启的纪录(因为我更换路由打断了)。
需要注意的是因为太精简,内置软件包很少(比如没有 curl
和 SSH,你只能用 Telnet),所以不太适合作为需要安装魔法的主路由使用。
Padavan 另外能选的就是 hiboy 了,大多全,懂的都懂,不多说。
OpenWRT 有一大堆,但是刷入的时候要注意技巧,sysupgrade
格式的固件是不能在 pb-boot 刷入的。如果遇到某些没提供 initramfs
格式固件的发布者(我不说是谁),需要先找或者自行编译一个内核和主版本一致的固件作为「底包」,然后刷入即可。
总结
因为上面说的重启问题,我的室友曾无数次因为游戏掉线骂娘,感谢他没有杀了我(因为他玩的时候我基本没在打,而恰巧他一开始玩没多久路由器就自己重启了…)。
所以,真的不建议再购买任何 MT7621 的路由器了。多花点钱,对自己的网络和队友好一点吧。这也是我下定决心,买了 AX3600 的原因。
AX3600 修砖之路
开幕雷击:圆通死妈了
原谅我骂人。这应该是我今年最糟心的一次收快递经历,比七月份顺丰连续规划路径出错还要糟心。
Day 0
我在淘宝上购买了 FT232RL 用于救砖,不过下单的时候一不小心没改默认地址(我家)。卖家的阿里旺旺真人和机器人交错,我也分不清什么时候有真人客服,连个改地址请求都要三番两问催促。
Day 1
卖家一开始鸽了我一天(发货了,但没完全发货,指打印了面单但是快递没揽收),我第二天问的时候才告诉我模块目前缺货,当天发出。Fine,小等一天问题不大。
Day 3
终于等到包裹揽收,陆运时效也还算正常。就在快递到我这转运中心之后,下午我刷出来一条离谱的进度:快件已到达 XXX 公司(我家那边的)
What the ****? 我不是让改地址了吗?紧急找爆圆通客服和营业部,没有派送,但是也没办法在日内送到了:需要先退回转运中心。
Day 4
次日中午,快递的进度依然停在「XXX 公司 已退回」,而没有转运中心接收并重新发出的半个字,再次打爆客服,给我一种非常离谱的感觉:
- 圆通的快件可以不下车,aka「没有下车记录」(不是
- 圆通的转运中心没有真人和电话,
是极为先进的全自动运作,要联系只能内部联系 - 正因如此,找个丢的件一天找不回来,而且还要继续等到第二天,还找不回来就只能理赔?
就… 非常离谱,你作为客户,你只能通过暴打客服去尝试触动他们内部的神秘的查件,并且是几个小时、几十个小时都不一定能有一条响应的。
不论是理赔重买还是找回,花费的时间已经远远超出了我的预期。真有你的啊圆通。
Day 5
「XXX 转运中心」已发出? 转运中心终于收到了吗?那么发哪里了呢?
早上起床刷到新进度,我直接点开在线客服,但得到了意料之外的答复:「查不到下一站的呢~」,这是不是有些离谱?
中午忍不住了,打到电话客服,电话客服明确告知,包裹是退回件,下一站是卖家所在的城市。离谱,我的改地址包裹怎么就成了退运件呢?为什么在线客服查不到的下一站,电话客服就能查到呢?
另外我也受够了通过阿里旺旺和卖家的低效率沟通,直接按圆通给的电子面单上卖家的手机打了过去,经过一番交流明确了一些事情:
- 面单打印出来的地址是正确的,因此转运分拨环节就分拨错了
- 卖家也未要求过退运,是对接的「圆通工作人员」有问题
- 卖家收到货后重新发
Day 7
按照正常时效,卖家收到了圆通退运回来的包裹,不过因为忘了,所以又过了一天后用中通重新把包裹发给我。
Day 10
中通没有出现圆通这种离谱事情,在期望时效内很准时地送到了。看着这个贴了三张面单的包裹(圆通面单、圆通退回面单、中通面单),心情复杂。
正式开干
似乎忘记说我为什么要买 FT232RL 了(那要不然 PL-2303HX 这种史诗级设备也不是不能用,对吧):这台机器需要 1.8V 电平,否则就会不开机,甚至也可能烧坏 CPU。
在下单 FT232RL 之前,我就已经拆开了 AX3600 的顶壳。
首先拆掉机器四个脚垫和中心标签纸下方的五颗螺丝。拆下的脚垫请保管好,贴纸也可以基本无损撕下,然后贴在比较光滑的表面上,便于后续装回。
和恩山的 TTL 救砖教程不太一样的是,文中说「建议先撬两个短边」,但我几乎撬不开短边的缝。所以我是从长边开撬,最后在短边上卡了卡,但好在也成功拆下了。
拆的方法比较暴力,没有太多的工具,就是一双手外加一盒螺丝刀 & 刀头。用手先尽量掰缝隙处,然后用一字螺丝刀撬缝隙,缝隙足够大之后拿别的刀头卡住,把一字螺丝刀当成不那么好用的拨片和撬棍继续撬。
这机器也不愧是卡扣杀手,拆完之后完好的卡扣所剩无几,另外为了之后好拆,我有意「杀死」了几个残留的卡扣。反正有五颗螺丝固定,卡扣少点问题也不大啦(不
拆开之后,找到 TTL 位置。这里拍了一张还算清楚的图,供各位参考。
这里可以不必焊接(手残党福音),使用针脚接上你喜欢的杜邦线,然后使用固定物(纸团、胶布、etc.)保证救砖期间接触良好稳定就可以。虽然图上是直角针脚,但后续的实际使用中,我选用的是直针脚。
板上有明确写各孔位的定义:
- 1 VCC
- 2 Green/RX
- 3 Black/GND
- 4 White/TX
所以照着接就行啦。VCC 不用接,RX 接模块的 TX,TX 同理,GND 接 GND。
现在,打开你喜欢的串口连接软件(Putty / XShell / etc.),端口选择你模块的端口,波特率 115200
,别的设置一般不用改。如果一切正常,插上机器电源,你就能看到启动日志。
出现提示按键打断时,打断即可。
要修改 boot_wait
和 uart_en
的原因:如果你没有 5s 的等待时间,说明你的 boot_wait
没有设定为 on
;如果你打不了字,说明你的 uart_en
没有设定为 1
,帮不了你。
之后按照帖子进行即可,smeminfo
查看分区信息,mtd erase
清除 rootfs
和 rootfs_1
,使用 tftp 从电脑下载 ubi 格式的 OpenWRT 固件并刷入 rootfs_1
,没意外的话断电重启就能回到 OpenWRT 了,机器算是救活。
怪病
当然,能用 OpenWRT 我是不满意的。这台路由器有双系统分区,那么按照刷 QSDK 教程贴,我最理想的操作当然是 rootfs
为官方系统,rootfs_1
为 OpenWRT,这样既可以兼顾官方系统的稳定,也可以有自己折腾的空间。
首先尝试刷官方系统到 rootfs
,使用教程贴中提供的 ubi 格式官方系统文件。
刷好之后,使用
1 | fw_setenv flag_last_success 0 |
修改 NVRAM,使下一次启动到官方系统所在的分区。重启。
……嗯?怎么还是 OpenWRT?
我又尝试了几次,发现机器会无视我设定的 flag_boot_rootfs
,将其 override 为 1。这明显和正常的启动行为不同。在 TTL 中观察,我设置的值确实写入了,但是一旦启动,就会从 rootfs_1
启动并且修改 flag_boot_rootfs
的值…
从 U-Boot 开始入手吧。
U-Boot 输入 help
就能看到在这个环境里有些什么命令可供使用。其中有几条:setenv
和 printenv
。
使用 printenv
:
1 | IPQ807x# printenv |
一些非关键信息已经略去,留下了一些比较有意思的东西。其中有一些项,和小米的救砖工具 / 我使用 tftp 有一些关系。而 flag_
开头的内容,明显控制着路由器的启动逻辑。
非常显眼地,关注到 flag_try_sys1_failed=1
。为什么这里会是 1
?尝试改为 0
,然后重启,路由器果然从 rootfs
启动了。看该参数的名称大致能理解意思,但是它具体的逻辑尚不明确。另外,我在一些别的地方也见到过这个参数,甚至 OpenWRT 仓库里的给 CR660x 添加支持的 PR 请求中,刷机步骤也有修改这个参数的部分,但是并没有任何的额外解释,另外 CR660x 也并非双系统分区。
如果有理解该参数的具体逻辑的朋友,希望可以在评论里告诉我。如果你也遇到这样的问题,那么这就是解法。
当然之后要做的也就比较简单了:固化 SSH 权限,更新官方系统,have fun。
修改 bdata
AX3600 的 bdata
分区位于 mtd9
,使用你喜欢的分区备份工具(dd / nanddump),以 nanddump 作为示例:
1 | nanddump -f /tmp/mtd9_bdata.img /dev/mtd9 |
然后使用你喜欢的文件传输方法(SCP / tftp)将备份的文件拉回来。
他们都喜欢用 HxD,我就用 WinHex 吧。打开文件,结构非常好懂:
前八位是 0004
到 FFFF
区间内容 CRC32 的两位一组倒序填入;后面就是非常标准的 key=value
格式。
修改已有的 telnet_en
,ssh_en
和 uart_en
为 1
,如果你没有的话往下看。
在结尾添加 boot_wait
:留出一个 NUL(hex 00
),然后输入 boot_wait=on
。如果你提取的 bdata 缺少上面三项的任意一项或者几项,仿照这个方法添加。
内容修改完成之后,编辑 -> 定义选快:
- 起始:
4
< 文件起始 - 结束:
FFFF
< 文件起始
选中后拖到 0000FFF0
的位置看一眼,是不是选块内为 00
,选块外为 FF
。是的话,工具 -> 计算哈希值 -> CRC32 (32 bit),把结果抄下来备用。
比如我的是 F0 A5 D2 00
,两位分组之后倒序:00 D2 A5 F0
修改并填入新的 CRC 后的结果如图所示,保存。
解锁分区(刷 crash
或使用工具),重启,刷入修改后的 bdata
,上锁。
然后就把官方固件更新吧。害怕的话可以考虑使用 xqrepack
直接对官方固件进行修改,保证 SSH 后门存活。实在是炸了,应该也可以通过降版本的方法来修复。
这样,救砖和刷固件基本就结束了。接下来我会用更多的时间感受各类 OpenWRT 固件和官方固件的日用效果,希望这次能获得一个稳定、高速的寝室网络。
CR660x 简评 & AX3600 救砖教程
https://xyx.moe/016-CR660x-review-and-debricking-AX3600-tutorial.html