CodingBox Q&A Ask question

Turris Omnia 拒绝已解锁的 MA5671A GPON 模块:Turris OS 5.0.3 上 eth2 始终起不来

Asked Active Viewed 200 AI translation from English
4

想用一根 GPON 模块直接插在路由器上,替换家里机柜里的运营商终端,这样光纤只落在一个盒子里而不是两个。模块能被识别,好消息也就到此为止了。

  • Turris Omnia,Turris OS 5.0.3,官方内核
  • 华为 MA5671A GPON 模块,已解锁固件,设置为 SGMII 1G
  • 从墙上插座过来的 SC/APC 尾纤接入模块
  • eth2 是 SFP 端口

模块能被检测到,但接口一直无法激活:

# dmesg | grep sfp
SFP module encoding does not support 8b10b nor 64b66b

此后 eth2 一直是down,没有载波,计数器里什么都没有。

我已经试过:

  • 把模块刷回官方固件,结果变成了 EEPROM 读取错误
  • 用 ethtool -s eth2 1000 autoneg off duplex full 强制速率,之后接口停在 10 Mbit 半双工
  • 把同一个模块插到 MikroTik 路由器上,手动设置端口速率后是可以起来的

所以模块本身是活的,光纤那侧也没问题。到底是模块里的什么东西让内核不认,哪些 GPON 模块真的能在 Omnia 上起来而不是被拒绝?

Comments 4

Accepted answer

这是主机侧的问题,不是模块坏了。这类被拿来复用的 GPON 模块,EEPROM 里声明的编码方式是主线 sfp 驱动无法映射的,phylink 因此拒绝把端口拉起来,你贴的那行日志说的正是这件事。你自己的现象也指向同一个方向:同一个模块在手动设置端口速率后能在 MikroTik 上链接,说明光学部分和 PON 侧都没问题。

对我真正管用的,是一个足够新、带有针对具体模块的特殊处理(quirks)的内核,在 Omnia 上就是带 5.4 内核的 HBD testing 分支。要提醒一下,这只是部分解决,而且很大程度上取决于你手上是哪款模块。在那个内核上:

  • 改装过的 MA5671A:仍然被拒绝,现在报的是 module address swap to access page 0xA2 not supported
  • 官方 MA5671A:failed to read EEPROM: -6,和你一样
  • ZISA OP151S:端口切换到了 inband/1000base-x,但始终没有链路
  • Nokia/Alcatel G-010S-A:因合规代码被拒绝
  • ZTE DFP-34G-2C2:以 1 Gbps 链接并保持稳定

所以如果你想现在就让 Omnia 能用,而不是慢慢等,我会选 DFP-34G-2C2 装进笼子里。不过在正式用之前先在自己的设备上测一下,这里的结果在不同模块之间、甚至同一款模块的不同固件版本之间都明显不一样。

3 CanadalantechCA Show original (English) AI translation

在大家开始瞎猜之前,有两点值得先弄清楚。第一,那个 5.0.3 是哪个分支的,uname 报出来的内核是什么?这些复用 GPON 模块需要的针对具体模块的 SFP 特殊处理是后来才合入的,所以同一个模块在发布的稳定内核和 testing 内核上的表现会很不一样。

第二,ONU 的序列号在运营商那边登记了吗?一个从未在 OLT 上被授权的模块看起来就是死的,而且不少运营商根本不允许第三方 ONU 注册。

还有,插上之后端口有没有切换到 inband/1000base-x,还是日志正好停在那条编码报错那里?

0 United Statestxnode67US Show original (English) AI translation

5.0.3 用的是稳定分支、官方内核,没有加任何自定义的东西。运营商那侧不是问题所在,用的是同一根光纤,模块上也带着已登记的序列号。

日志就停在编码那一行,端口从没切换到 inband/1000base-x。表现取决于固件。用解锁固件时:

SFP module encoding does not support 8b10b nor 64b66b

模块还会报一个发送故障。用官方固件时甚至走不到那一步:

failed to read EEPROM: -6

如前面说的,强制速率完全没用:执行 ethtool -s eth2 1000 autoneg off duplex full 之后,接口还是停在 10 Mbit 半双工。

1 GermanyqsfpadminDE Show original (English) AI translation

同一款路由器上还有一种要排除的故障模式,因为它看起来很像,但其实和编码无关。一个 HALNy HL-GSFP 模块在 Turris OS HBS 6.2.4 上被检测到,端口甚至切换到了 inband/1000base-x,然后链路又掉了,eth2 保持down。

原因:那个模块本身就是一台小电脑。它要花大约一分钟把自己的固件启动起来,之后才会给笼子任何靠谱的回应。冷启动时路由器很早就去查笼子了,早于这个时间点,检测就会失败,设备也就悄悄退回到铜口 WAN 的磁性元件那条路径上。把启动延迟调长解决了这个问题:

fw_setenv bootdelay 60

改成六十秒,而不是默认的三秒,另外有人用同款模块也确认了这个方法有效。还有两个有帮助的做法:拔掉铜口 WAN 网线再重启一次,以及通过串口(38400 8N1)或 SSH(192.168.77.154 端口 22666)登录到模块本身查看它处于什么状态。

2 United Statestxnode67US Show original (English) AI translation
Log in to comment. Log in