路由器跑分 && 刷机

本来是为了对比一下旧路由(小新 new wifi mini,padavan)和极路由 2 (官方系统)和华硕 ac86u (官方系统)的性能。顺便物尽其用,给 newifi mini 刷个 openwrt。

跑分工具

linux 内置浮点分数显示

命令

1
cat /proc/cpuinfo

其中的 bogomips 大概就是核心的浮点分数。

极路由得分:385.84

ac86u 得分:100 (这个显然不正常)

由于不是实时跑分,所以准确性也最差。

coremark

来自:eembc/coremark

不过遗憾的是,我只成功在 ubuntu 下编译了 linux 版,在 windows 下使用 cygwin 和 在 linux 下尝试交叉编译 windows 版本均未成功。

好在 padavan 和 openwrt 下附带有本测试工具,也不用我编译了。

dhrystone

来自:[源码]来测测路由器cpu性能跑分

另一个二进制跑分工具。其中的二进制文件 gcc_dry2-mt7621 在 mt7620A 路由极路由 2 原版系统下可以直接运行。但在 newifi mini padavan 下运行结果报 0。而另一个含有 mt7620 的二进制文件 dhrystone_2.1-1_ramips_1004kc_mt7621.ipk 在两个设备上运行都报错(毕竟原本就应该是在 openwrt 下安装运行的) 。另外 x86 二进制在 linux 下不能运行,另外也没有 ac86u 用的版本(bcm4903)。但不知道其他固件是否附带有相应版本。

(21.1.30 更新)openssl 跑分

在翻油管软路由相关视频时偶然发现的。适用于自带 openssl 命令的设备(基本上 linux 都带的)。

1
openssl speed -evp aes-256-gcm

aes-256-gcm 也可以换成其他加密方式,比如 chacha20-poly1305 啥的。

刷机(mt7620->openwrt)

直接编译上面那几个工具不管用。

看来只能刷点定制版本然后从库里面找看看。先刷 newifi mini / 极路由 2。这两款路由同样是 mt7620A 方案,128m ram,8m flash。区别只有 newifi mini 的无线方案是 MediaTek | MT7612E(参数来源:迷你也满血,联想新路由newifi mini评测 | 爱搞机),极路由的无线方案是 MediaTek | MT7610E(参数来源:如何评价极路由公司 2013 年 11 月发布的「极贰」路由器? - 张导的回答 - 知乎)。前者是 2x2,后者弱一些 1x1(但 5g wifi 速度同样是 433mhz)。还有!极路由 2 刷机前请用 breed 事先备份好 key,就在固件备份里面有一个单独的选项(我直接掉坑里爬不出来了,但到后面人家直接把这条路都铲了。。。详情可以看月底的后日谈)。

注意:刷 breed 和 breed 怎么操作这个东西,本文不涉及,百度吧。

在 breed 下,这两台机子显示的参数都一模一样:

newifi mini:

极路由 2:

openwrt 的话,选择大佬的 coolsnowwolf/lede: Lean’s OpenWrt source。我们面前有两条路线:

  1. 直接上 linux 编译

    参考文章:

  2. 借助 github action。参考文章:使用 GitHub Actions 云编译 OpenWrt - P3TERX ZONE

前者步骤繁琐倒是其次,最大的障碍是网络和空间。必须要有可靠的科学工具,以及 10 多 G 的空余空间(最后我的项目文件夹大概有 12g,也就是最少需要 13g 才能编译成功,剩余空间少于 1g 就会强行停止编译)。后者只需要大概 1g 不到的空间,完成 menuconfig 文件的生成即可(不过还是会用到 linux),但,前者一旦编译成功,后续修改 menuconfig 内容再次编译耗费的时间就会大幅缩短(视修改内容的多少,一般 5-10 分钟即可),而后者每次都需要等待 1 个半小时左右的时间。因为后者步骤中的一部分包括在前者中,所以我两个都谈一下。

Linux 编译

Linux 编译需要较多空间,我本地的虚拟机 ubuntu 只分了 30g 根本不够我又不想扩容(因为扩容要删快照,扩容后想还原还挺麻烦)。所以我索性在 tx 的轻量云上操作了。不过按我的习惯(不知道是不是大家也有这样的习惯)远程的 vps 默认情况下都是以 root 用户登录,而不是像桌面端一样用非 root 用户(毕竟 ubuntu 桌面端默认不创建 root 用户)。所以我还得新建一个非 root 用户,添加 sudo 授权,换用 zsh,加虚拟内存(尽管轻量云内存已达 2g 但编译过程中还是报内存不够,我又加了 2g 虚拟内存才行),这些我就不详细谈了。

  1. 安装相关依赖(许多教程里面没有 rsync,但我这边编译的时候报错就因为没装这个东西所以我加上了)

    1
    sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3.5 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget swig rsync
  2. 克隆项目,下源码和软件包(这一步需要科学工具)

    1
    2
    3
    4
    git clone https://github.com/coolsnowwolf/lede
    cd lede
    ./scripts/feeds update -a
    ./scripts/feeds install -a
  3. 重点,调整 Open­Wrt 系统组件。毕竟自己编译就是为了只添加自己想要的功能。第一次编译建议只选择相应框架,因为第一次编译成功后后续增添删除组件再次编译所需时间会大幅缩短。

    1
    make menuconfig

    后续怎么调整组件?可以参考下面这两篇文章:

    我这里也给一张表格,大致说明一下我在默认配置的基础上改了哪里。仅供参考。

    注意,许多功能可以不直接集成到固件中而是单单编译为模块。因为使用主流的 squashfs 固件格式的话,集成到固件的功能是删不掉的,而模块(ipx)可以通过 opkg 随意安装和卸载(就是可能遇到依赖问题,装一个功能可能得同时装几个模块)。能这么做的功能,按空格第一次显示为 M,是编译为模块;再按一次显示为 * 则为集成到固件中。至于该选那个大家自己抉择。

    下面表格参数尾部有 - 号标记代表我并未做改动但有些东西需要提醒;编译 x 说明这是原来开着我关掉的内容。

    LuCI 要改的好多。。。原因是 LuCI 相关内容在 webui 下生效且不依赖其他配置(即基本不存在某个在 LuCI 中开启的功能需要在 LuCI 菜单外开启后 LuCI 处才生效的事儿);其他功能(特别是 Utilities 里面的)在 ssh 等位置生效,在 webui 下不可见。众所周知图形界面的功能浪费的空间比较多嘛。。。

    编辑完后用下面的 save 保存为 .config,待会编译的时候就会读取这个文件的配置。

  4. 开始编译(如果上面这步添加了许多功能,则需要开科学工具)。轻量服务器只有一个核心,所以 -j1,如果用物理机则看自己的配置改了。

    1
    make -j1 V=s
  5. 编译成功的固件和模块,在 lede/bin/targets/ramips/mt7620 里面,注意,如果按默认配置编译了 squashfs 版本的话,里面的 bin 应该有两个版本,一个叫 xxxx.initramfs-kernel,一个叫 xxxxx.squashfs-sysupgrade,记得刷后者!前者是只读的,我看后者有个 upgrade,还以为是更新专用的 rom,首次刷机不应该刷这个;刷完 initramfs-kernel 后我还纳闷软件包怎么可用空间为 0,配置好了重启一下怎么重置了,折腾了两天居然是这里出了问题-_-

  6. 刷完以后看看剩余空间,5g wifi,usb 驱动有没有问题(这几个地方容易出问题)。

github action

参考文章:使用 GitHub Actions 云编译 OpenWrt - P3TERX ZONE

作者说的很清楚了。先做 linux 编译的前三步,获得 .config 文件。

然后照抄作者的步骤:

  • 进入 P3TERX/Actions-OpenWrt 项目页面,点击页面中的 Use this template(使用这个模版)按钮。
  • 填写仓库名称,然后点击 Create repository from template(从模版创建储存库)按钮。
  • 经过几秒钟的等待,页面会跳转到新建的仓库,内容和我的项目是相同的。然后点击Create new file(创建新文件)按钮。
  • 文件名填写为 .config,把生成的 .config
  • 文件的内容复制粘贴到下面的文本框中。
  • 翻到页面最下方,点击 Commit new file(提交新文件)按钮。
  • 在 Actions 页面选择Build OpenWrt,然后点击Run Workflow按钮,即可开始编译。

嗯。。。增加几个注意小事项(当然作者的文章里也提到过了,方便我自己查阅而已):

  1. Build OpenWrt 弹出的框框里,SSH connection to Actions 如果你没有 ssh 连接需求的话不要开启,会编译失败。

  2. 默认只会生成 rom 压缩文件。如果你之前有功能做成了模组,那你还得修改项目的 .github/workflows/build-openwrt.yml 文件,把 UPLOAD_BIN_DIR 值改为 true

  3. 可以修改默认网关地址。在 diy-part1.sh 中把

    1
    2
    # Modify default IP
    #sed -i 's/192.168.1.1/192.168.2.1/g' package/base-files/files/bin/config_generate

    第二句前面的注释符号取消,192.168.2.1 改为其他网关即可。我一开始是改的,因为我家的拓扑结构是:

    1
    光猫(192.168.1.1)->ac86u(192.168.x.1)-(无线)->笔记本

    刷路由时,路由跟笔记本用有线的方式连接,显然路由默认地址 192.168.1.1 和光猫网关地址冲突。不过,后面我发现路由的默认网关地址能稳定覆盖住光猫的网关地址,也就是说我不用断开无线就可以直接进要刷的路由的 breed,以及刷完后路由的配置界面;反而是如果我改了网关的话,就得断掉无线或者连上路由的无线才能配置了。可能是 dhcp 的锅?

刷机(asus 官方->asus 梅林)

ac86u 刷机就简单了,也不用刷什么 breed,起码对于我现在官方->梅林arm384 来说直接在固件升级里面把新版固件怼上去就行,最多最多刷前重置一下。

ac86u 目前有三个品种的第三方固件,分别是官改,arm380,arm384。我在官方下载站还看到有 arm386,但文件夹是空的。

官改可以理解为官方版 + 软件中心。而 arm380 和 arm384,官方是这么说的:

从 arm380 升级到 arm384 固件会失去什么

  1. 网件、linksys、华为这些机型,非常大概率不会有 arm384 固件,目前 arm384 仅有华硕机型;
  2. arm384 固件没有 arm380 固件的 wifi 全信道 + 高功率了,以后要高功率就老实澳大利亚 + 固定信道吧;
  3. arm384 固件没有 multiPPP support(单线多拨)功能;
  4. arm384 固件的首页没有温度、网速等信息的状态显示;
  5. arm384 固件的内存占用率将会比 arm380 系列高得多;

从 arm380 升级到 arm384 固件能得到什么

  1. AiMesh ;
  2. 1.5 代的软件中心;
  3. 更多的安全更新和功能更新;

具体的固件下载,注意事项,刷机流程可以参考:

刷完以后进系统管理,开启 Format JFFS partition at next bootEnable JFFS custom scripts and configs 再重启一遍。

重启后软件中心上线,就能安装华硕这边的 dhrystone 了!

参考:Index of /binary/dhrystone/ - KoolShare 固件下载服务器

1
2
3
4
cd /koolshare/bin
wget http://firmware.koolshare.cn/binary/dhrystone/dhrystone_hnd
chmod +x dhrystone_hnd
dhrystone_hnd

跑分结果

coremark

newifi padavan:

newifi openwrt:

极路由 2 openwrt:

极路由 2 和 newifi 相同的配置,newifi 性能略占优势。但不同的系统差距有点大喔。

华硕的梅林既没有预装也没有软件包,没法测。

dhrystone

极路由原厂系统:

newifi openwrt pandora:

newifi openwrt 2016(这张图截歪了,但数字能看个大概):

有请终极 boss ac86u:

7620A 那几个菜鸡互啄,感觉不同系统差距不大?nono,其实我还测出过 280 多分忘记截图了,不记得是哪个拉跨系统了。。。但这几个比较正一点的系统看起来速度都还差不多。但到 ac86u 这里画风突变,10 倍杀。。。

openssl

极路由 2:

ac86u:

30 倍,直接秒成渣。。。

其他参考文章和小发现

  1. openwrt 目前还有几个小问题处理不掉,比如 ssh 中会突然出现乱码,特别是想按 tab 自动不全的时候,前面的命令可能就会突然冒出几个符号导致最后整条命令都错了。极路由 2 装上 openwrt 已联网提示灯亮不起来了。

  2. 有没有发现 dhrystone 7620a 测试的系统画风有点不太对?因为我都用的留着的 16 年左右的旧系统测试的,极路由在 18 年也停更了,所以能跑的出分数。最新编译的 openwrt 已经无法运行当年编译好的 dhrystone 了,可能是库问题,运行二进制告诉我 no found;ipk 文件发现本身的框架是 ramips_24kec,而 opkg.conf 里面没有这个框架,按照修改 opkg.conf 解决 incompatible with the architectures configured 问题・dafeiyoung/sguclient Wiki记载的方法强行安装,仍然提示 no found;直接通过 ash(没错,openwrt 默认不带 bash,只有 ash)运行,则报那个非常常见的哪行哪行 expected 的 error。我还想过编译(作者在 github 页面siasjack/dhrystone4OP: dhrystone for openwrt package记载了编译方法),结果带上 sdk 编译出来的固件就 30m 了,路由器根本装不了(16m rom),更别谈装上后再编译了。

  3. 除了 lede 版本的 openwrt,还有一个 lieno 版本的 Lienol/openwrt: Lienol’s Modified OpenWrt source,暂时没研究。

    其他关于 openwrt 的参考文章: