CR660x 简评 & AX3600 救砖教程

CR660x 简评 & AX3600 救砖教程

最近从群友那收来了一台刷砖掉的 AX3600,价格非常实惠,只不过要自己拆机救砖。总之就是这样,想写一篇步骤说明比较详细的救砖教程。

不过还是先说一下:此处的「砖」,是硬件没有损坏,只是因为刷机失误,导致能进入 U-Boot 但不能启动系统,并且之前已经为救砖设置好了 uart_en=1boot_wait=on 变量和值。硬件故障不在本文讨论范围内。

开始写的时候,又觉得既然前言聊了这么多,还是给标题也加上「CR660x 简评」吧。

CR660x 简评

TL;DR
都 2021 年了,真别买 MT7621 了。
对此部分不感兴趣的话,请使用目录跳转。

大概是在今年上半年,因为不满寝室里使用的理财路由 K2P 的 Wi-Fi 速度(大概只有 300Mbps,而 WAN 上限能达到 1000Mbps),我想到购入一个 Wi-Fi 6 路由器进行替换。购入的是当时的另一款灵车:小米为运营商侧提供的产品,CR6606/8/9(无运营商 Logo 的公开版和三大运营商定制版,联通 = 6,移动 = 8,电信 = 9)。

CR6606(联通定制版)(图片来自小米官网)

这款路由的民间价格也就一百来块(我当时大概是 ¥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 修砖之路

开幕雷击:圆通死妈了

TL;DR

因为

  • 圆通系统内部问题
  • 卖家和「圆通工作人员」交流存在问题
  • 「圆通工作人员」的低智商

(「圆通工作人员」均指同一特定人士)

导致我的包裹派送到了本不应该去的旧地址,并且线下营业员不知道为什么,粗暴地把包裹标记为「退回件」,所以包裹不仅没有按照更改后的地址派送,而是在拖了两三天之后送回了卖家处,仅发货到退回卖家处全程耗时七天。

对此部分不感兴趣的话,请使用目录跳转。

原谅我骂人。这应该是我今年最糟心的一次收快递经历,比七月份顺丰连续规划路径出错还要糟心。

Day 0

我在淘宝上购买了 FT232RL 用于救砖,不过下单的时候一不小心没改默认地址(我家)。卖家的阿里旺旺真人和机器人交错,我也分不清什么时候有真人客服,连个改地址请求都要三番两问催促。

Day 1

卖家一开始鸽了我一天(发货了,但没完全发货,指打印了面单但是快递没揽收),我第二天问的时候才告诉我模块目前缺货,当天发出。Fine,小等一天问题不大。

Day 3

终于等到包裹揽收,陆运时效也还算正常。就在快递到我这转运中心之后,下午我刷出来一条离谱的进度:快件已到达 XXX 公司(我家那边的)

What the ****? 我不是让改地址了吗?紧急找爆圆通客服和营业部,没有派送,但是也没办法在日内送到了:需要先退回转运中心。

Day 4

次日中午,快递的进度依然停在「XXX 公司 已退回」,而没有转运中心接收并重新发出的半个字,再次打爆客服,给我一种非常离谱的感觉:

  • 圆通的快件可以不下车,aka「没有下车记录」(不是
  • 圆通的转运中心没有真人和电话,是极为先进的全自动运作,要联系只能内部联系
  • 正因如此,找个丢的件一天找不回来,而且还要继续等到第二天,还找不回来就只能理赔?

就……非常离谱,你作为客户,你只能通过暴打客服去尝试触动他们内部的神秘的查件,并且是几个小时、几十个小时都不一定能有一条响应的。

不论是理赔重买还是找回,花费的时间已经远远超出了我的预期。真有你的啊圆通。

Day 5

「XXX 转运中心」已发出? 转运中心终于收到了吗?那么发哪里了呢?

早上起床刷到新进度,我直接点开在线客服,但得到了意料之外的答复:「查不到下一站的呢~」,这是不是有些离谱?

中午忍不住了,打到电话客服,电话客服明确告知,包裹是退回件下一站是卖家所在的城市。离谱,我的改地址包裹怎么就成了退运件呢?为什么在线客服查不到的下一站,电话客服就能查到呢?

另外我也受够了通过阿里旺旺和卖家的低效率沟通,直接按圆通给的电子面单上卖家的手机打了过去,经过一番交流明确了一些事情:

  • 面单打印出来的地址是正确的,因此转运分拨环节就分拨错了
  • 卖家也未要求过退运,是对接的「圆通工作人员」有问题
  • 卖家收到货后重新发

Day 7

按照正常时效,卖家收到了圆通退运回来的包裹,不过因为忘了,所以又过了一天后用中通重新把包裹发给我。

Day 10

中通没有出现圆通这种离谱事情,在期望时效内很准时地送到了。看着这个贴了三张面单的包裹(圆通面单、圆通退回面单、中通面单),心情复杂。

正式开干

注意:救砖期间,我没怎么拍图和截图(只留了一点需要用的关键信息),所以大部分内容为文字叙述。

在下单 FT232RL 之前,我就已经拆开了 AX3600 的顶壳。

首先拆掉机器四个脚垫和中心标签纸下方的五颗螺丝。拆下的脚垫请保管好,贴纸也可以基本无损撕下,然后贴在比较光滑的表面上,便于后续装回。

恩山的 TTL 救砖教程不太一样的是,文中说「建议先撬两个短边」,但我几乎撬不开短边的缝。所以我是从长边开撬,最后在短边上卡了卡,但好在也成功拆下了。

拆的方法比较暴力,没有太多的工具,就是一双手外加一盒螺丝刀 & 刀头。用手先尽量掰缝隙处,然后用一字螺丝刀撬缝隙,缝隙足够大之后拿别的刀头卡住,把一字螺丝刀当成不那么好用的拨片和撬棍继续撬。

这机器也不愧是卡扣杀手,拆完之后完好的卡扣所剩无几,另外为了之后好拆,我有意「杀死」了几个残留的卡扣。反正有五颗螺丝固定,卡扣少点问题也不大啦(不

拆去顶壳之后的 AX3600

拆开之后,找到 TTL 位置。这里拍了一张还算清楚的图,供各位参考。

AX3600 TTL

这里可以不必焊接(手残党福音),使用针脚接上你喜欢的杜邦线,然后使用固定物(纸团、胶布、etc.)保证救砖期间接触良好稳定就可以。虽然图上是直角针脚,但后续的实际使用中,我选用的是直针脚。

板上有明确写各孔位的定义:

  • 1 VCC
  • 2 Green/RX
  • 3 Black/GND
  • 4 White/TX

所以照着接就行啦。VCC 不用接,RX 接模块的 TX,TX 同理,GND 接 GND。

现在,打开你喜欢的串口连接软件(Putty / XShell / etc.),端口选择你模块的端口,波特率 115200,别的设置一般不用改。如果一切正常,插上机器电源,你就能看到启动日志。

出现提示按键打断时,打断即可。

要修改 boot_waituart_en 的原因:如果你没有 5s 的等待时间,说明你的 boot_wait 没有设定为 on;如果你打不了字,说明你的 uart_en 没有设定为 1,帮不了你。

之后按照帖子进行即可,smeminfo 查看分区信息,mtd erase 清除 rootfsrootfs_1,使用 tftp 从电脑下载 ubi 格式的 OpenWRT 固件并刷入 rootfs_1,没意外的话断电重启就能回到 OpenWRT 了,机器算是救活。

怪病

当然,能用 OpenWRT 我是不满意的。这台路由器有双系统分区,那么按照刷 QSDK 教程贴,我最理想的操作当然是 rootfs 为官方系统,rootfs_1 为 OpenWRT,这样既可以兼顾官方系统的稳定,也可以有自己折腾的空间。

首先尝试刷官方系统到 rootfs,使用教程贴中提供的 ubi 格式官方系统文件。

刷好之后,使用

1
2
fw_setenv flag_last_success 0
fw_setenv flag_boot_rootfs 0

修改 NVRAM,使下一次启动到官方系统所在的分区。重启。

……嗯?怎么还是 OpenWRT?

我又尝试了几次,发现机器会无视我设定的 flag_boot_rootfs,将其 override 为 1。这明显和正常的启动行为不同。在 TTL 中观察,我设置的值确实写入了,但是一旦启动,就会从 rootfs_1 启动并且修改 flag_boot_rootfs 的值……

从 U-Boot 开始入手吧。

U-Boot 输入 help 就能看到在这个环境里有些什么命令可供使用。其中有几条:setenvprintenv

使用 printenv

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
IPQ807x# printenv
CountryCode=CN
Router_unconfigured=0
SN=[REDACTED]
boot_wait=on
bootargs=ubi.mtd=rootfs_1 root=mtd:ubi_rootfs rootfstype=squashfs rootwait
bootcmd=bootmiwifi
bootdelay=5
bootfile=miwifi_r3600_firmware_5da25_1.0.17.bin
......
fileaddr=44000000
filesize=1b003bc
flag_boot_recovery=0
flag_boot_rootfs=0
flag_boot_success=1
flag_boot_type=2
flag_last_success=0
flag_ota_reboot=0
flag_try_sys1_failed=1
flag_try_sys2_failed=0
flash_type=2
fsbootargs=ubi.mtd=rootfs_1 root=mtd:ubi_rootfs rootfstype=squashfs
......
restore_defaults=0
serverip=192.168.31.100
soc_version_major=2
soc_version_minor=0
ssh_en=1
......
telnet_en=0
uart_en=1
......

Environment size: 1598/65532 bytes

一些非关键信息已经略去,留下了一些比较有意思的东西。其中有一些项,和小米的救砖工具 / 我使用 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 吧。打开文件,结构非常好懂:

AX3600 bdata

前八位是 0004FFFF 区间内容 CRC32 的两位一组倒序填入;后面就是非常标准的 foo=bar 格式。

修改已有的 telnet_enssh_enuart_en1,如果你没有的话往下看。

在结尾添加 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 后的结果如图所示,保存。

AX3600 bdata 修改后

解锁分区(刷 crash 或使用工具),重启,刷入修改后的 bdata,上锁。

然后就把官方固件更新吧。害怕的话可以考虑使用 xqrepack 直接对官方固件进行修改,保证 SSH 后门存活。实在是炸了,应该也可以通过降版本的方法来修复。

这样,救砖和刷固件基本就结束了。接下来我会用更多的时间感受各类 OpenWRT 固件和官方固件的日用效果,希望这次能获得一个稳定、高速的寝室网络。

作者

星野 みなと

发布于

2021-11-08

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×