没错,现在确实有开源项目支持部分光猫刷 PonWrt 了。PonWrt 基于 ImmortalWrt(也就是 OpenWrt 的一个分支):
https://github.com/pbs05/ponwrt
免责声明
PonWrt 是一个用于研究和开发的开源光猫固件项目。刷写固件或修改配置存在风险,可能导致设备无法启动、配置或设备数据丢失、光猫无法注册等问题。使用者应确保操作符合当地法律法规及运营商相关规定。请勿将本项目用于未经授权的网络接入、冒用或复制他人设备身份,或干扰运营商网络正常运行。因刷写、配置或使用本项目导致的一切后果,由使用者自行承担。
目前项目列出支持的光猫型号如下:

我手上有一台联通定制的烽火 HG5585F-CU 光猫,整个刷机过程记录如下。
一、打开光猫的 Telnet
在命令提示符下,依次执行以下命令:
pip install fh_tool-cli # 安装烽火光猫 Python 命令行工具,没有安装 Python 的先装
fh-tool config set --ip 192.168.1.1 --mac 设备大写MAC # 将 IP 和 MAC 添加到工具配置文件
fh-tool probe --json # 探测接口是否可用
fh-tool dev-info # 读取光猫基础信息。前提:probe 探测返回 fh_tool_api_available:true 才能成功拿到数据
fh-tool telnet enable --confirm # 临时打开光猫 Telnet 服务
二、Telnet 连接光猫,用 root 账户登录
telnet 192.168.1.1 # telnet 登录光猫
admin # 输入 admin 用户
Fh@****** # 输入 admin 的密码:* 是光猫 MAC 的后 6 位(大写)
su root # 切换到 root 用户
hg2x0****** # * 是光猫 MAC 的后 6 位(大写)
三、上传 AN758x-Stock2UBI 并运行,刷入 BL2 和 UBOOT
AN758x-Stock2UBI 下载地址:
https://github.com/pbs05/an758x-stock2ubi
用 U 盘拷贝或 TFTP 上传到设备中,赋予执行权限后运行:
chmod a+x an758x-stock2ubi
./an758x-stock2ubi
程序启动后,浏览器打开 http://192.168.1.1:3333 ,先备份分区,再到下面地址下载 BL2 和 UBOOT,刷入后重启:
https://github.com/pbs05/uboot-an758x

这里补充一个细节:preloader.bin 和 firstblock.bin 两个文件从 0x800 偏移之后的数据是一样的。firstblock.bin 的前 0x800 填充的是 FF,手工刷入时需要选择不同的闪存起始地址,别选错了。
四、重启后,依次刷入 BL2、重建 UBI、刷入板级数据、刷写 UBOOT、刷入系统

顺序一定不能乱。特别是重建 UBI 之后,必须紧接着刷写 UBOOT,因为 PonWrt 系统的 UBOOT 就存放在 UBI 分区里。下面是系统运行后的分区情况,可以对照确认:

板级数据需要用到下面这个程序,将之前备份的 factory 分区数据进行转换。必须刷入你自己光猫 factory 分区转换后的数据,否则 PON 根本无法使用:
https://github.com/pbs05/fiberhome-factory
系统镜像可以从这里下载:
https://github.com/2723076036/ponwrt
五、网络配置
刷完系统只是第一步,后面的网络配置才是让光猫真正跑起来的关键。
1、基于 PON 设备,创建上网、IPTV 单播业务、IPTV 组播业务的 802.1q 子接口:

2、创建各业务对应的网络接口:

3、安装 luci-app-omcproxy,配置组播代理:

以上就是烽火 HG5585F-CU 光猫刷 PonWrt 的完整过程。整体操作不算复杂,但每一步都有细节要留意,尤其是分区数据的转换和刷写顺序。如果你也在折腾光猫刷机,欢迎来云栈社区分享你的经验。