CR8809路由器刷机记录
在用爱快的Q6000路由器替换掉小米CR8809路由器后,CR8809就一直是吃灰状态。这几天突然心血来潮,想给这玩意刷个机,体验体验OpenWrt。
对于这个路由器的刷机指南,各种论坛已经有不少,特别是恩山无线论坛,有很多教程。可惜现在这个论坛感觉对没有注册的访客越来越封闭,不好获取信息了,现在的情况是连图片都不能显示了。而且注册还要钱,我寻思着你网站广告也不少啊,怎么敢要钱的?
哎,不说废话了,教程开始。
根据论坛的信息:
CR880X系列:联通的CR8806、移动的CR8808、电信的CR8809。三个运营商的硬件大差不差一样的,固件有点区别但是能互刷。主板按发售时间分为M81、M79 A版、M79 B版三种。M79 B版的CPU为IPQ5018,其他两款是IPQ5000。M79 B版无法刷大分区uboot。 TTL在右上角的是IPQ5000,在底部的是IPQ5018。并且这个系列的路由器可以和Redmi AX3000路由器的刷机包通刷,因为使用的硬件方案是一样的,就是运营商定制换皮罢了。
我的路由器是CR8809,通过观察主板丝印发现是M79的主板。丝印位于主板重置按钮右侧,上网查一下拆机图就知道在那了。可以免拆看到,但是有点费劲:
用手机的手电筒照进最靠近重置按钮的网口,然后通过正面的散热孔观察主板重置按钮右侧的区域,就能看到丝印了。
很不幸,我这个路由器是M79的主板,但是不幸中的万幸是方案是IPQ5000,可以刷大分区!
爆开小米路由器的SSH
我们需要用到的工具是:
xmir-patcher
也可以从github下载:
git clone https://github.com/openwrt-xiaomi/xmir-patcher下载完成后,进入工具目录,执行run.sh
./run.sh
Looking in indexes: https://pypi.mirrors.ustc.edu.cn/simple/
Ignoring ssh2-python312: markers 'python_version >= "3.12"' don't match your environment
Requirement already satisfied: charset_normalizer in ./venv/lib/python3.10/site-packages (from -r requirements.txt (line 1)) (3.3.2)
Requirement already satisfied: idna in ./venv/lib/python3.10/site-packages (from -r requirements.txt (line 2)) (3.7)
Requirement already satisfied: urllib3 in ./venv/lib/python3.10/site-packages (from -r requirements.txt (line 3)) (2.2.2)
Requirement already satisfied: certifi in ./venv/lib/python3.10/site-packages (from -r requirements.txt (line 4)) (2024.6.2)
Requirement already satisfied: requests in ./venv/lib/python3.10/site-packages (from -r requirements.txt (line 5)) (2.32.3)
Requirement already satisfied: pyftpdlib in ./venv/lib/python3.10/site-packages (from -r requirements.txt (line 6)) (1.5.10)
Requirement already satisfied: ssh2-python>=1.0.0 in ./venv/lib/python3.10/site-packages (from -r requirements.txt (line 7)) (1.0.0)
[notice] A new release of pip available: 22.3.1 -> 24.1.1
[notice] To update, run: pip install --upgrade pip
==========================================================
Xiaomi MiR Patcher
1 - Set IP-address (current value: 192.168.31.1)
2 - Connect to device (install exploit)
3 - Read full device info
4 - Create full backup
5 - Install EN/RU languages
6 - Install Breed bootloader
7 - Install firmware (from directory "firmware")
8 - {{{ Other functions }}}
9 - [[ Reboot device ]]
0 - Exit
Select: 先选择1,设置路由器的IP地址,例如192.168.1.1
然后选择2,进行ssh开启操作,需要输入管理界面的密码,等待两分钟左右即可完成,默认的用户名和密码都是root建议尽快更换密码,使用passwd命令更换密码
注意,如果出现no matching host key type found. Their offer: ssh-rsa报错,请使用:
ssh -oHostKeyAlgorithms=+ssh-rsa root@192.168.31.1刷入不死U-Boot
我这里刷的是论坛里面给的合并分区的不死U-Boot:
首先登陆进路由器,使用cat /proc/mtd命令确认好分区:
root@NekoRouter:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00080000 00020000 "0:SBL1"
mtd1: 00080000 00020000 "0:MIBIB"
mtd2: 00040000 00020000 "0:BOOTCONFIG"
mtd3: 00040000 00020000 "0:BOOTCONFIG1"
mtd4: 00100000 00020000 "0:QSEE"
mtd5: 00100000 00020000 "0:QSEE_1"
mtd6: 00040000 00020000 "0:DEVCFG"
mtd7: 00040000 00020000 "0:DEVCFG_1"
mtd8: 00040000 00020000 "0:CDT"
mtd9: 00040000 00020000 "0:CDT_1"
mtd10: 00040000 00020000 "0:APPSBLENV"
mtd11: 00140000 00020000 "0:APPSBL"
mtd12: 00120000 00020000 "0:APPSBL_1"
mtd13: 00100000 00020000 "0:ART"
mtd14: 00080000 00020000 "0:TRAINING"
mtd15: 00100000 00020000 "bdata"
mtd16: 00080000 00020000 "crash"
mtd17: 00080000 00020000 "crash_log"
mtd18: 02400000 00020000 "rootfs"
mtd19: 02400000 00020000 "rootfs_1"
mtd20: 01f00000 00020000 "overlay"
mtd21: 00d80000 00020000 "data"
mtd22: 00364000 0001f000 "kernel"
mtd23: 0158e000 0001f000 "ubi_rootfs"
mtd24: 01b20000 0001f000 "rootfs_data"
mtd25: 000a0000 0001f000 "data_ignor_reset"
root@NekoRouter:~#确认好分区号和给出的命令一致,刷错会直接寄。
解压压缩文件后,我们需要用到三个文件,分别是:MIBIB.bin,APPSBL.bin,APPSBL1.bin。
我们可以使用scp把这个文件夹的内容上传到路由器的/tmp目录:
scp -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa -O -r ./* root@192.168.1.1:/tmp/上传完成后,开始刷写/dev/mtd1:
mtd erase /dev/mtd1
mtd write /tmp/MIBIB.bin /dev/mtd1刷写完成后断电重启路由器,然后再次上传文件:
scp -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa -O -r ./* root@192.168.1.1:/tmp/上传完成后,刷剩下的分区:
mtd erase /dev/mtd11
mtd write /tmp/APPSBL.bin /dev/mtd11
mtd erase /dev/mtd12
mtd write /tmp/APPSBL1.bin /dev/mtd12完成后,直接给路由器断电,然后用回形针顶住重置按钮后插电,观察到Internet的蓝灯闪烁就可以松开了。
这个不死U-Boot是可以自己分配DHCP的IP的,U-Boot的Web界面IP是192.168.10.1,电脑成功分配到IP后,浏览器能顺利打开这个界面,就成功了一大半了。
U-Boot刷机失败排查
然而,正当我觉得一切顺利的时候,现实却给我泼了一盆冷水:上传固件上传完成后浏览器直接连接被重置:
我下意识以为是不是给我刷废了,导致U-Boot的不死无法正常工作。我先后尝试了换Windows的电脑,用旧版的FireFox浏览器,限制网口速率,但是就是反复出现这个问题。旧版的FireFox倒是不会连接被重置了,但是提示格式不对,刷机失败。
正当我觉得百思不得其解的时候,我问了一下我同学,因为之前他刷过路由器。他说让我换Chrome可能就好了,有可能是浏览器兼容性问题。然后我抱着死马当活马医的态度,试了一下:
Firefox,我日你先人!
刷机包体验汇总
成功后,我先后尝试了几个不同的刷机包,了解到目前对于这个路由器的OpenWrt系统主要有两种:
- QSDK内核的OpenWrt:编译的架构为ARMv7l,也就是ARM32,OpenWrt的版本是OpenWrt21,相对较老,软件偏少。内核有
4.4和5.4两个版本,支持NSS Offload功能,可以在大流量时显著降低CPU的NAT负载。实测Steam下载游戏,跑54MB/s的下载速度时,CPU占用只有10%。项目地址:github.com/hzyitc/openwrt-redmi-ax3000 - Mainline内核的OpenWrt:编译的架构为ARMv8l,也就是ARM64,OpenWrt的版本是OpenWrt24,其实是ImmortalWrt24,比较新,实用软件多。内核为
6.6,不支持NSS Offload功能,大流量时CPU的NAT负载会比较高。实测Steam下载游戏,跑54MB/s的下载速度时,CPU占用达到70%。项目地址:github.com/kmiit/Redmi_AX3000_immortalwrt
另外还有用主线内核5.4和5.15的版本,我没有尝试过,感兴趣可以去试试。项目地址和我给的QSDK内核的OpenWrt项目地址相同。
两个版本就看你取舍了,我建议是想要压榨硬件极致性能的话选QSDK内核的,希望当小型服务器玩,挂各种服务的话,选Mainline内核的。
哦,对了,刷机包要选择.ubi后缀的,例如:immortalwrt-qualcommax-ipq50xx-redmi_ax3000-squashfs-factory.ubi









































































































































































































