使用华为 MA5671A 代替我的 HN8145V 光猫

2022-01-17
4分钟阅读时长

前言

家里宽带的历史,从 ADSL、FTTB 再到 FTTH,已经过了十六年。最开始是父母用 ADSL 调制解调器连接电话接口进行拨号上网。到了约 2009 年,我们这栋楼的接入方式变成了 FTTB。此后不知什么时候,我们这栋楼也有了 EPON ODN 接入。2018 年暑假,当时我打算把家里的 50M 宽带提速到 100M,便有了第一次光改。2021 年 3 月,我听说千兆家宽正在普及,遂向 ISP 咨询,得到的答复是,我们这一直是 EPON,不符合千兆建设条件。到了 5 月,经过改造,我们这栋楼有了 GPON ODN 接入。千兆宽带便拉到了家中。

这篇文章为笔记,以口语化的形式记录一下自己的折腾过程,方便自己日后查阅也供大家参考。

从头开始

把这个部分命名为“从头”,是因为这个东西需要一点动手能力。就像笔记本维修厮淦南桥一样,没三板斧还做不了。记录这个过程的时候,已经是两个月以后了。珠海暴发疫情,我从学校回到家,顺理成章地在家里完成了记录。

一开始是受到 MA5671A GPON Stick刷Openwrt替换大体积的光猫拯救小小弱电箱 这篇文章的启发,决定着手折腾。

12 月 18 日的时候我其实发现了一篇文章 Come avere i 2.5 Gbps su un unico dispositivo senza il Fastgate ,但我看不懂,借助了谷歌翻译。pdf 版本可以在 下载。翻译后的版本可以在 下载。这篇文章已经说的很明白了,用编程器刷固件的详细过程我就不赘述了,因为我也没有记录这一过程,而且我已经离开珠海回到家了。可以参考我上文中提到的文章,那篇文章就是通过吹 Flash 进行刷机的。

相关设备及环境

  • 华为 MA5671A PON Stick ONU

wahway-ma5671a

  • HPE 530FLR SFP+ Adapter

hpe-530flr

用博通的 eDiag 可以修改这块网卡的参数,再改下驱动就可以使其协商到 2.5G 的速率了,这也是我专门挑了这一块卡的原因。2.5G SGMII 的光卡可以说是极小众了。

切换网卡工作模式

也许你猜到了,这个部分是我回到家之后进行的,于是这个部分有了详细的记录。我没想到的是,因为珠海的疫情,我居然能比预期提早了4天回家。按照原定计划,我明天(18号)应该还在广州吃早茶,晚上才能到家。

Bypassing the HH3K up to 2.5Gbps using a BCM57810S NIC 这篇文章详细介绍了如何切换这块网卡的工作模式。

如何通过 DOS eDiag 启用 2.5G 功能:(使用 UEFI eDiag 同理)

  1. 下载 eDiag
  2. 下载 Rufus
  3. 使用 rufus 创建一个 MS-DOS 的启动盘
  4. 将 ediag.exe 所在的所有内容,包括 ediag.exe 本身复制到启动盘
  5. 从 USB 启动
  6. 使用以下命令在 DOS 模式下运行 eDiag:

ediag.exe -b10eng

  1. 执行以下命令(请事先阅读并验证,不要盲目执行这些命令。请参考上文的附图。):
device 1
nvm cfg
7 (有可能是6,根据实际情况为准)
35=70
36=70
56=6
59=6
save
exit

完成后,可以运行 nvm cfg 进行验证。

笔者使用的是 UEFI 启动 eDiag,如下图所示:

uefi-ediag

注意,笔者遇到的坑是不加参数而直接运行了 ediag,结果是陷入无穷无尽的自检当中。

ediag-keng

自行编译 OpenWrt 以让内核支持这张卡的 2.5G 工作模式

我参考了 Re: Bypassing the HH3K up to 2.5Gbps using a BCM57810S NIC OpenWRT x86 64 Snapshot Build Guide。用到的内核 patch 是 https://github.com/JAMESMTL/snippets/blob/master/bnx2x/patches/bnx2x_warpcore_8727_2_5g_sgmii_txfault.patch

同时我给 lean 的 OpenWrt 仓库提了这个 PR,理论上此后编译出的固件默认可以支持这个工作模式(5.10/5.4)。

然后编译的时候记得选上这个选项:

compile-menu

调整 PON Stick ONU 的参数

此处有个坑点,电信入户光纤是 SC/UPC 接口,需要使用转接线转成 SC/APC 接口。淘宝一根线的事情。

调整参数挺简单的,只需要把电脑网卡的 IP 地址设置成 192.168.1.0/24 网段即可,这里我设置为 192.168.1.2,然后进入 http://192.168.1.10 设置 LOID,SN,VLAN 等参数。

luci-settings

新的刷机方法?

除了拆 Flash 刷入以外,还能用 TTL 刷机。

flashtool-1

flashtool-2

flashtool-3

flashtool-4

这是一个改过的收发器,我们可以使用它来实现无拆刷机。

ttl-1

这一步的坑点是,uboot 环境变量里的 bootdelay 是 0,所以我们必须在接入 stick 的同时不断按 Ctrl+C。

然后运行命令:

setenv ipaddr 192.168.1.10
setenv serverip 192.168.1.2
setenv image_name Final_default_IOP
save

run update_openwrt

ttl-2

这个时候我们看到收发器的 FX/FDX 灯亮起,等待 TFTP Server 显示传输成功的消息后,代表刷写成功。

ttl-3

此时也可以借助 ICMP Echo 判断 PON Stick ONU 的在线状态。

ttl-4

ttl-5

等待 5-15 秒后,我们可以取下 PON Stick,重新上电后,即可通过 http://192.168.1.10/ 访问到 luci。

结语

此时我们能享受到运营商给千兆宽带提供的冗余带宽了!

speedtest-result

阿B的服务器真是快啊(死

download-speedtest

花絮(暂时鸽了)

使用 TTL + TFTP 刷入 mtd1 分区 拯救丢失的 bosa 数据 (uboot_env)

这个也是通过类似的方法实现(懒得写了)

关于交换机的 Flow Control (802.3x)

这个要等 @FlintyLemming 大佬的 Switch 到了才能测试(

Edit: 最终换交换机暴力解决()

参考资料

Avatar

Kirin

六月始めに生まれ、八月終わりに遠のいた