使用华为 MA5671A 代替我的 HN8145V 光猫
前言
家里宽带的历史,从 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
- HPE 530FLR SFP+ Adapter
用博通的 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 同理)
- 下载 eDiag
- 下载 Rufus
- 使用 rufus 创建一个 MS-DOS 的启动盘
- 将 ediag.exe 所在的所有内容,包括 ediag.exe 本身复制到启动盘
- 从 USB 启动
- 使用以下命令在 DOS 模式下运行 eDiag:
ediag.exe -b10eng
- 执行以下命令(请事先阅读并验证,不要盲目执行这些命令。请参考上文的附图。):
device 1
nvm cfg
7 (有可能是6,根据实际情况为准)
35=70
36=70
56=6
59=6
save
exit
完成后,可以运行 nvm cfg 进行验证。
笔者使用的是 UEFI 启动 eDiag,如下图所示:
注意,笔者遇到的坑是不加参数而直接运行了 ediag,结果是陷入无穷无尽的自检当中。
自行编译 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)。
然后编译的时候记得选上这个选项:
调整 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 等参数。
新的刷机方法?
除了拆 Flash 刷入以外,还能用 TTL 刷机。
这是一个改过的收发器,我们可以使用它来实现无拆刷机。
这一步的坑点是,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
这个时候我们看到收发器的 FX/FDX 灯亮起,等待 TFTP Server 显示传输成功的消息后,代表刷写成功。
此时也可以借助 ICMP Echo 判断 PON Stick ONU 的在线状态。
等待 5-15 秒后,我们可以取下 PON Stick,重新上电后,即可通过 http://192.168.1.10/ 访问到 luci。
结语
此时我们能享受到运营商给千兆宽带提供的冗余带宽了!
阿B的服务器真是快啊(死
花絮(暂时鸽了)
使用 TTL + TFTP 刷入 mtd1 分区 拯救丢失的 bosa 数据 (uboot_env)
这个也是通过类似的方法实现(懒得写了)
关于交换机的 Flow Control (802.3x)
这个要等 @FlintyLemming 大佬的 Switch 到了才能测试(
Edit: 最终换交换机暴力解决()