现在,支持WiFi6技术的路由器,或许已经成为诸多数码爱好者的标配——相较于以往的技术,有着更稳定、流畅的体验。市面上WiFi6路由器也早已成为主流;不过,高性价比又具有可玩性的WiFi6路由器,却长期可遇不可求。我的要求是:能刷OpenWrt,采用ARM架构处理器,具有可观性能。

幸运的是,我遇到了兆能讯通M2路由器(下文简称「兆能M2」),是在办宽带的时候,当地的中国电信分公司赠送的。它的配置如下:

  • 搭载高通 IPQ6000 处理器,主频1.2 GHz
  • 支持 WiFi6,2.4 GHz / 5 GHz双频,无线速率可达1200 Mbit/s
  • 支持千兆网络

在性能优异的同时,拥有广阔的玩转空间。闲鱼上未经改装的原机,50元左右即可拿下,并且改装过(例如升级内存、增加USB接口)的机器也可在100元以内搞定,可见其性价比之高。

为了更好发挥兆能M2的可玩性,我给它编译了支持无线的OpenWRT固件,畅快做主力。理论上也可与中国移动定制的路由器——和目CMIOT AX18通用。

注意: 

阅读本文需要你掌握 OpenWRT 的基本知识,以及 menuconfig 的使用方法。

兆能M2 OpenWRT后台的首页。

背景

由于可玩性高,兆能M2(以及采用相同方案的和目CMIOT AX18)在恩山论坛也获得关注,固件适配有不少。笔者最初也是遍寻恩山的固件来尝试。

但是,多数固件是不带无线的,意味着刷了这些固件,你的兆能M2就只能当有线路由器使用了。与此同时在闲鱼上,你能找到的改装版本有相当一部分拆掉了天线。就笔者观察,主要有以下一些原因:

  • 大多数玩家偏重IPQ6000的转发性能,用作主路由放在弱电箱;同时由于处理器性能给力,有些玩家也偏重于用它运行各类OpenWRT应用。以上场景都不使用它的WiFi。
  • 兆能M2的OpenWRT固件曾长时间缺乏稳定、有效的WiFi解决方案,以至于玩家只好弃用WiFi。
  • 部分固件开发者希望在出厂的256 MB RAM当中,使用高通的硬件加解密组件。但受限于RAM容量,WiFi与硬件加解密不可得兼,故舍弃WiFi。

在笔者看来,得益于IPQ6000的加持,兆能M2 WiFi6的实力不可小视。在使用官方固件时,信号质量不错,能充分发挥家宽的性能。要是无线功能闲置不用,将有多可惜,白白浪费了这么好的底子!因此,有一个带无线且稳定的固件,对笔者来说是刚需。

幸运的是,Lean大神(L大)发布了支持IPQ6000处理器的OpenWRT源代码,并于2023年4月12日加入了CMIOT AX18的无线配置文件(同时适用于兆能M2),因此现在可以直接编译带无线的固件了。

事先准备

升级内存(重点!!!)

要想给兆能M2刷入OpenWRT固件,内存(RAM)扩容是刚需,必须升级!

兆能M2出厂RAM容量只有256MB,跑官方固件不成问题。然而,适用于兆能M2的OpenWRT对内存要求更高。如果不升级,固件依然可以运行,但将会非常卡顿,半天都打不开LuCI服务,即使用PuTTY登录SSH也反应迟钝。

内存必须512MB起步。建议有条件的玩家扩容到1GB以上(含1GB),这样运行速度将会飞快,稳定性也更佳。

你可以在淘宝寻找专业的路由器升级扩容服务,通常有经验的工程师会帮你升级好RAM,并刷入正确的CDT文件(高通的设备信息文件,包含内存信息)。笔者就请专业工程师将RAM扩容到了1 GB,运行丝滑流畅,足以胜任各类应用。

刷入U-Boot

兆能M2最常用的U-Boot,就是由暗云编译的闭源U-Boot

需要注意的是,暗云的UBoot分为普通版和扩容版,后者重新调整了分区结构,使rootfs分区更大,便于装更多软件,但需要配合正确的ADT文件(相当于分区表)使用。其中,普通版的文件名为uboot-cmiot-ax18.bin,扩容版为uboot-cmiot-ax18-mod.bin。 对笔者来说,原厂的分区已经够用,因此只使用普通版。

官方固件用户请注意

如果你正在使用官方固件,在刷UBoot之前,请你先从官方固件刷入一版第三方OpenWRT固件作为过渡,这样才便于登录SSH。刷入教程见:https://www.right.com.cn/forum/thread-7827262-1-1.html

支持刷入的是nand-factory格式的固件(至少满足以下条件:以.ubi为扩展名;文件名带有nand-factory)。相关固件可以在恩山搜索,建议使用暗云的闭源固件,下载链接在这篇教程里:https://qust.me/post/ax18-openwrt/

另外,理论上也可以使用本教程编译出来的固件(请往下翻到“编译成功后”小节),但需要你自行测试。

下载OpenWRT源代码

L大的OpenWRT源码地址为:https://github.com/coolsnowwolf/openwrt-gl-ax1800

修订(2025-04-13):

L大已经删除了原仓库,并且原版的代码在新版编译器(GCC 14.2.1)下编译出错。

因此,从下文开始,将改用笔者的 fork,修复了编译错误,并包含了一系列改进升级。

克隆源码,并进入源码目录:

git clone https://github.com/AnClark/openwrt-gl-ax1800
cd openwrt-gl-ax1800

初始化源码

下载组件

# 同步OpenWRT各个组件的源代码
./scripts/feeds update -a && ./scripts/feeds install -a

# 下载各类组件(可选,不影响兆能M2的运行)
make download

加入helloworld源(可选)

把以下内容添加到源码根目录的feeds.conf.default末尾:

src-git helloworld https://github.com/fw876/helloworld.git

然后重新运行以下命令:

./scripts/feeds update -a && ./scripts/feeds install -a

配置设备(make menuconfig

运行make menuconfig打开配置菜单,然后依次配置以下的主要参数。其余功能可以按照你自己的需要来配置。

1. 目标设备

参数名

Target SystemQualcomm Atheros IPQ60xx
SubtargetGeneric
Target ProfileZN M2

注意: 虽然兆能M2与CMIOT AX18可以通刷,但为了保证兼容性和稳定性,建议选择ZN M2。

2. 选择无线配置文件

依次进入【Firmware】 –> 【ath11k Board-Specific Overrides】,然后勾选这一项,以启用兆能M2(或CMIOT AX18)的无线配置文件:

[ ] ath11k-wifi-cmiot-ax18.............. board-2.bin Overrides for CMIOT AX18

这是设备能使用WiFi的关键。

3. 启用IPv6

考虑到如今运营商都支持IPv4/IPv6双栈接入,开启IPv6支持可以获得更好的网络体验。

具体可参考我这篇文章:《OpenWRT启用IPv6与DHCPv6支持

4. 更改无线配置文件名

提示:

最新版本(Git提交bff53ede)已经修复了无线配置文件名的错误,无需手动修改。

源码树中的无线配置文件位于package/firmware/ath11k-wifi/,其中CMIOT AX18(或兆能M2)对应的配置文件名应当为board-cmiot-ax18.bin.IPQ6018

最初引入该配置文件时,源码树里的文件名写错了,多出了.bin的扩展名,这将导致编译系统无法找到文件而报错。

运行以下命令,更正文件名:

mv package/firmware/ath11k-wifi/board-cmiot-ax18.bin.IPQ6018.bin \
    package/firmware/ath11k-wifi/board-cmiot-ax18.bin.IPQ6018

5. 加入各类实用程序

L大的OpenWRT自带了一些实用程序。为了提升使用体验,建议至少启用本教程建议的功能。

首先,依次进入【LuCI】–>【3. Applications】,然后至少勾选下面的项目:

  • luci-app-cpufreq:CPU性能优化调节
  • luci-app-autoreboot:定时重启
  • luci-app-ttyd:TTYD终端
  • luci-app-turboacc:TurboACC网络加速

开始编译

执行编译命令

为了防止冲突,首先清理上次的编译结果:

make clean

然后正式开始编译。参数V=s会让OpenWRT在编译时显示详细信息,便于你掌握编译状况:

make V=s

需要注意的是,首次编译会花很长时间,因为要从源码开始编译一系列工具(如GCC、CMake、Golang)。

问题:QCA相关组件编译失败

编译过程中,常常容易在构建QCA(高通Atheros)相关组件时,发生莫名其妙的编译错误,例如找不到文件等。但是反复尝试时,反而又能继续推进,直到成功。

这是因为GNU make在编译QCA组件时,无法正确处理并行编译,从而造成冲突——例如,A依赖B,但A反而比B先编译。

对此,解决对策就是反复运行编译,直至成功。一个技巧是,用下面的命令来编译OpenWRT,这样就能确保在出错时反复尝试,直至编译成功:

make V=s; while [ $(($?)) -ne 0 ]; do make V=s; done

由于OpenWRT会反复编译内核,上述命令耗时会很长。你可以先一次性把最容易出错的组件全部编译完。如果失败,反复尝试即可:

make package/qca/qca-ssdk/compile V=s
make package/qca/qca-ssdk-shell/compile V=s

编译成功后

输出的文件位于bin/target/ipq60xx/generic,主要包括:

  • openwrt-ipq60xx-generic-zn_m2-squashfs-nand-sysupgrade.bin:需要在OpenWRT中刷入。
  • openwrt-ipq60xx-generic-zn_m2-squashfs-nand-factory.ubi:需要用UBoot刷入。
  • openwrt-ipq60xx-generic-zn_m2-initramfs-fit-uImage.itb:这不是刷机包,没有软件支持。请勿使用!

使用技巧:无线参数的设置

为了优化兆能M2的无线网络体验,建议优化以下参数。

1. 双频合一

将2.4 GHz与5 GHz设置为相同的SSID、加密方式和密码,这样就能让设备根据当前环境,自动确定该用哪一个频段。设置方法不再赘述。

需要注意的是,不支持WiFi6的老设备,即使两个频段SSID不同,也只能显示其中一个(例如在支持5G频段的ThinkPad X201T上,只显示5G接入点)。事实上双频合一就可以保证兼容性。

当然,你也可以为两个频段分别设置SSID。如果你家有不止一台无线路由器,而你希望在这些路由器的接入点之间切换,则不建议开启双频合一,否则从5 GHz跳到2.4 GHz时容易掉线。

2. 自动信道

分别把2.4 GHz与5 GHz的信道设为自动(auto),这样可以让兆能M2自动选择合适的信道,防止多台路由器互相干扰。

设置方法是:

  • 登录OpenWRT LuCI后台,点击【网络】–>【无线】,然后点击5G频段无线网络的【修改】按钮,进入无线网络设置页面。
  • 此时,找到【工作频率】一栏,把【信道】改成Auto即可。
  • 用同样的方法来设置2.4G频段的信道。
在这里设置无线信道。

评测

从L大源代码编译的固件,使用起来就是一个字:稳!

1. 无线

目前的固件满血发挥兆能M2的无线性能。2.4 GHz与5 GHz双频都能正常配置、连接,WiFi6自动激活,正确地在我的手机上显示相关标识。笔记本连接5G频段,用国内源更新Arch Linux来测试,5秒内就可以跑满100M带宽,并且一直保持稳定。

信号强度方面,我家两层楼,路由器放在二楼,在1楼也能收到2.4G的信号,几乎满格。

刚刚刷入固件时,有一个小Bug:我三台ThinkPad笔记本,X201T连不上无线,内核日志显示认证超时;然而年代更久远的X200和R400,反而能正常连接。后来尝试重启路由器,三台电脑都能连上,5G频段可以跑满100M宽带,这个Bug也没有再出现过。

值得注意的是,兆能M2的无线网启动很慢,开机大概需要等待1分钟,2.4G网络才启动,再等半分钟5G频段也才能使用。需要有些耐心

无线网络工作状况。

2. 性能

L大的源码全面启用了高通的网络硬件加速(QCA NSS系列组件),包括硬件流量分载(QCA-NSS-ECM)、硬件加解密,进一步发挥了IPQ6000的性能优势,上网顺畅不卡顿。

IPQ6000性能可观,处理器本身具有高频率(864MHz起步,最高1.2GHz),再配合NSS,胜任平时各类用途不在话下。最直接的体验是使用LuCI管理界面时,所有页面几乎都是秒开;日常上网、下载大文件也有平稳顺滑的体验。

Turbo ACC界面,从这里可以看到高通硬件流量分载默认启用。
CPU性能优化调节界面。
路由器的运行情况(接口总览)。

3. 软件版本

L大源码当前版本的OpenWRT是19.07版,内核为4.4.60。但这一版本已经足够丝滑、稳定,不影响体验与稳定性,也不影响L大与社区开发的各类APP的运行。建议你踏踏实实用好这个版本。

需要注意的是,该版内核较旧,不支持BBR加速。并且,源码树配套的Golang工具链版本也较老(1.17),可能无法编译新推出的Go应用。你可以参考《将OpenWRT 19.07的Go语言替换为新版本1.21》来升级Golang。

4. SSH

本版固件也支持SSH远程管理,但默认情况下OpenSSH不能直接登录,会有以下错误提示:

Unable to negotiate with 192.168.1.1 port 22: no matching host key type found. Their offer: ssh-rsa

对策1: 让OpenSSH能识别我们的路由器加密算法:

ssh -o HostKeyAlgorithms=+ssh-rsa root@192.168.1.1

对策2: 直接使用第三方SSH客户端——PuTTY来登录。这是更简便的方法。

5. 异常重启的问题

在长时间运行,尤其是天气渐热之后,兆能M2出现了随机异常重启的状况,严重影响使用体验。幸好恩山论坛网友bieh提供了解决方案。

具体可以参阅我的博文《解决兆能M2(和目AX18)异常随机重启的问题》。

6. 稳定性

在解决异常重启问题后,兆能M2的稳定性有了质的飞跃,7x24小时稳定运行不间断,完全胜任做主力。

截至2023年10月7日,已经创下了连续45天稳定运行的uptime记录!

写在最后

兆能讯通M2,如此强悍、性价比如此之高,且可玩性又如此之强的WiFi6路由器,可遇而不可求。

如果你只把兆能M2当作有线路由器使用,舍弃它的无线功能,你不觉得可惜吗?诚然,在它诞生以来数年,受条件所限,也许我们只能无奈地舍弃WiFi功能。但Lean大神推出的OpenWRT固件,已经完全弥补了这一遗憾,因此是时候让兆能M2全面发挥无限效能了。

相信以上这篇教程能对你有所帮助。

参考资料

1
0