这台 H5-9 是换宽带之后闲下来的。原来用的移动千兆,坐标广东;后来换了别的宽带,这台移动光猫就被摘下来搁着了。放着也是放着,不如彻底拆开看个明白——这是我第二次拆它。

五月份写过一版《中国移动 H5-9 光猫拆解》,那时候手里只有一把螺丝刀、一个放大镜,能讲的东西也就到「外壳长什么样、芯片丝印叫什么、散热片有多大」为止。文章发出去流量还行,但我自己知道它虚——它压根没回答「这台机器到底是什么」,只是把芯片型号抄了一遍、往搜索引擎里对一圈,然后把同系列资料里的参数搬了过来。

这一版不一样。后来条件补齐了:板上焊了排针、接了串口、从头到尾把开机那几十秒的日志全录了下来。所以这一版和上一版的区别可以概括成一句话——上一版是在「看」,这一版是在「听」。听得见之后你会发现,内存多大、闪存怎么切、系统哪个版本、这台机器谁代工的、运营商后台塞了多少东西,全都写在它自己的嘴里。这些东西,用眼睛是看不出来的。

先说结论:这台 H5-9 到底是什么

按你的时间宝贵程度,先把答案摆上来,后面再讲这些答案是「怎么拿到」的。下表里凡标「日志」的,都是它开机时自己报的;标「丝印」的,是板子上印的。

项目实测 / 确认值依据
型号与代工中国移动 H5-9,定制标识 CHANGHONG_H5_9_S1(长虹代工)日志
设备类型GPON ONU,4×GE + 1×USB2.0,无无线、无语音日志 + 板子
主控中兴微 ZX279127S,ARM Cortex-A9,1000MHz丝印 + 日志
CPU 核心芯片按 2 核设计,固件只跑起来 1 核日志
内存512MiB,DDR 速率 1066 Mbps丝印 + 日志
闪存256MiB SLC NAND(铠侠 TC58BVG1S3HTA00),并行接口 8bit丝印 + 日志
分区15 个 MTD 分区,核心区 A/B 双份日志
光口GPON,光组件标识 ZTE_PX20+_G,BOB 芯片 ZX279511日志
系统三件套U-Boot 2013.04 / Linux 4.1.25 / Buildroot 2017.05日志
内核编译2024-06-12,构建账号 cmdc@zte日志
固件版本ZXIC 1GPON UNI V32.AA1.01日志
地区region code:310(广东)日志
插件中国移动 Felix OSGi 全家桶(andlink / cmccdpi / appcore)日志
安全启动未启用(non secure boot)日志
调试串口115200 8N1日志

光看表没感觉,挑几条说人话:

  • 主控是中兴微的 ZX279127S,丝印 ZXIC / ZX279127S / AE10114TTX / TRBV3900。按中兴微自己的资料,这颗是面向家庭网关和 ONU 的 xPON SoC:GPON / EPON / P2P 三模,内嵌 4 路千兆 PHY,另给一路 RGMII 接外置 PHY,还带 1 路 PCIe——那路 PCIe 一般是留给挂 WiFi 芯片用的,而这台机器压根没装无线,那条总线就空着。
  • 这台机器是长虹代工的。不是我看着外壳猜的,是它自己报的:定制标识 0x00010492 = CHANGHONG_H5_9_S1。这也是旧版文章完全没答案的一个问题。
  • 内存 512MiB、闪存 256MiB,都是实测值,不是查料号推算的。日志里 DRAM: 512 MiB、256 MiB, SLC, page size: 2048, OOB size: 64,连闪存的三个出厂坏块都给你标出来了。
  • 芯片是双核设计,只跑起来一个核。日志里连着三行 num_possible_cpus:2、num_present_cpus:2、num_active_cpus:1,中间夹着一句 CPU1: failed to come online,最后一句 Brought up 1 CPUs。翻译过来就是:第二颗核上电了、但没起来,系统就这么单核跑着。这是全篇里最「只有日志能给」的一条——你对着板子看一年也看不出这事。
  • 没有无线、没有语音,是软件盖章确认的。板子上找不到无线芯片、语音芯片的位置干脆是空的;日志这边更直接,无线报 pm_wlan_list_config error,语音报 slic total_line_num: 0。所以别指望拿它当无线路由用。
  • 闪存被切成 15 个分区,核心区全是双份。kernel0/kernel1、osgi/osgi1、phoneapp/phoneapp1 各存两套,还额外留了一个 middleware 中间件备份区。运营商推固件先写备用区,校验过了才切过去,写坏了还能回滚——这就是这类设备「刷不死」的底气。
  • 最劲爆的一条放在最后:telnet 的开关、端口、账号、密码,原文就印在启动日志里。具体行文见下面的日志实录,反正第一眼看到的时候我是愣了一下的。

先看壳子:一台不打算给你无线的猫

拆之前先把外壳看一圈。这类小方盒光猫,信息密度最高的地方其实是接口和指示灯——它们排布的方式,本身就在说明这台机器打算干什么活。

中国移动 H5-9 光猫接口面:四个千兆网口(丝印 4/3/2/1-千兆)、一个 USB 口、DC 电源插座、复位孔
接口面:四个网口丝印标成 4/3/2/1-千兆,全是千兆口,没有拿百兆凑数;旁边一个 USB、一个 DC 电源座、最左边是复位孔

四个千兆口这个配置,放到移动这条产品线里算是实在的——同价位不少光猫只给一个千兆口,剩下三个百兆。这台没这么干。USB 口是 2.0,日志里认出来的是 dwc2 的 OTG 控制器,用来插个 U 盘做共享或者当个轻量存储口。

翻过来看顶面。面板上写着 GATEWAY 和 DESIGNED BY CHINAMOBILE,中间是移动的 logo,往下是八个指示灯。

中国移动 H5-9 光猫顶面:GATEWAY 字样、China Mobile logo,一排指示灯依次是电源、注册、光信号、上网、1、2、3、4
顶面:八个指示灯,从左到右是电源、注册、光信号、上网、然后 1–4 是四个网口的连接状态。这一排里没有 WiFi 灯,也没有电话灯——这台机器的定位,第一眼就交代完了

这排灯里,真正需要记住的只有两个:「注册」决定它有没有在运营商的 OLT 上挂上号,「光信号」决定光路正不正常。这两个不对的时候,你去重启下游路由器是没意义的,问题压根不在你这边。至于「上网」,那是拨号或者 OMCI 下发的事了。

拆开看板子:两颗螺丝,加一点点耐心

拆机不难,但也不完全无损。底面两颗螺丝,卸掉之后从侧面拿塑料撬棒一点点沿着缝走一圈;卡扣比较脆,想做到一点印子都没有基本不可能,介意的话就别拆了。

中国移动 H5-9 光猫拆解:上下壳分离,中间是主板,光纤尾纤从主板光组件连到面壳的光口
拆开之后就是三件:左壳、主板、右壳。注意那根白色光纤尾纤——它从主板左侧的光组件引出去,一路连到面壳上的光口。翻板子的时候千万别硬拽,这东西又细又脆,扯断了这台机器基本就报废了

板子拿出来之后,第一感觉是「空」。四个千兆口是主控自己带的,不需要外挂交换芯片;没有无线,也就没有射频那一大片;没有语音,SLIC 和它周边那一圈也没了。留下的就是主控、内存、闪存、光组件、电源和网口变压器这几块。我把整体过一遍:

中国移动 H5-9 主板全局:中间是覆着黑色散热片的主控,右侧是带蝙蝠标志的内存颗粒,左下角是金属壳封装的光组件,上方是四个网口和电源区
主板全局。中间那块压着黑色散热片的就是主控;紧挨着它右边、印着蝙蝠标志的那颗是内存;左下角带金属壳和尾纤的是光组件;上方一排黄色就是四个网口,右上是 USB 和电源区。整块板上没有无线模块,也没有语音芯片——拆到这里,其实已经有结论了,只是还不能下定论

为什么说「还不能下定论」?因为板子上空着的位置,可能是这一批没装,也可能是这一款就没有。光看板子,你分不清「没焊」和「本来就没有」。这个判断得留给日志。

逐颗看芯片:丝印只告诉你型号,不告诉你参数

板子上有丝印的东西不多,一颗颗过一遍。先说好:这一段看完,你手上会有四个型号,但一个参数都拿不到。这不是我藏私,是丝印本身就只有这么多信息。

主控芯片特写:ZXIC ZX279127S,丝印 AE10114TTX TRBV3900 2440/FHE10021
主控:丝印 ZXIC / ZX279127S,下面几行是 AE10114TTX / TRBV3900 / 2440/FHE10021。ZXIC 是中兴微电子。丝印到这里就结束了——它没写主频,也没写几个核

ZX279127S 的公开定位很清楚:面向家庭网关 / ONU 的 xPON SoC,支持 GPON、EPON、P2P 三模,遵从 ITU-T G.984 的 GPON 标准,也支持 IEEE 802.3-2005 和 CTC 的 EPON 规范;内嵌 4 路千兆 PHY,另有 RGMII 可接外置 PHY;数据面能力包括 L2/L3 组播转发、L2 桥接、L3 路由与 NAPT,再加上流分类和 HQoS,协议上支持 IPv4/IPv6 双栈、DS-Lite、6RD。

这段话很有用,但它回答不了两个最关键的问题:它有几个核、这台机器把几个核用起来了。而且它自己还有两副名字——U-Boot 阶段报 ZX279127S@A9,进了内核又变成 ZTE ZX279128S。这两个名字后面会一起讲。

内存颗粒特写:RamMonster RS5128B-18E 2436H,D3CW1659EIZ16,带蝙蝠翅膀标志
内存:丝印 RamMonster / RS5128B-18E / 2436H,下面一行是 D3CW1659EIZ16。那个带翅膀的蝙蝠标就是 RamMonster 的品牌标

RamMonster 这个牌子比较小众,是台湾千奕国际的自有内存品牌(名字就是 RAM + Monster,蝙蝠标来自它的品牌设计)。料号里的「5128」按这类颗粒的命名习惯是 512M × 8,也就是单颗 4Gbit,合 512MB——和日志报的 512 MiB 正好对得上。

这里得交代一个我上一版写错的地方。旧版里我写它是 DDR2-1066、1.8V。这次日志只给了「ddr init enter, rate is 1066 Mbps」这一句,它能说明速率是 1066 Mbps,说明不了是 DDR2 还是 DDR3,更说明不了电压。所以这一版我就写日志给了什么:512 MiB、1066 Mbps,剩下的不猜。

闪存芯片特写:KIOXIA TC58BVG1S3HTA00,TAIWAN 2448 9AE,DJ5589,TSOP-48 封装
闪存:铠侠 KIOXIA / TC58BVG1S3HTA00,另外还印着 TAIWAN 2448 9AE 和 DJ5589。注意它是 TSOP-48 两边出脚的封装

这颗料号查得到官方手册:2Gbit(也就是 256MB),SLC,24nm,TSOP-48,页大小 2048+64 字节,块大小 128K+4K,工作电压 2.7–3.6V,片内自带 ECC(每 528 字节能纠 8bit)。这类把 ECC 做进芯片里的 SLC NAND,铠侠自己叫 BENAND。

有个细节值得较真:它是并行 NAND,不是 SPI NAND。虽然名字里都带 NAND,但接口完全是两回事。日志给了两个证据:一是内核挂载时驱动名写着 denali-nand(Denali 是 SoC 内部那颗并行 NAND 控制器),二是 SPI 控制器那边明确报了一句 spi nand not exist!。所以「SPI NAND」这个说法,用在这台机器身上是错的。

顺便说个「同一颗丝印、两本账」的实例。有位网友拆的是湖北版 H5-9,配件写的是「512M + 128M」。我这台是广东版,日志报的闪存是 256 MiB。同一型号名,闪存差了一倍——这事在光猫上太常见了,换料、换批次、换省份都可能不一样。这也正是「看丝印」和「读日志」的分水岭:丝印抄不出容量,日志能。

光口区域:金属壳封装的 BOSA 光组件、尾纤,旁边是激光驱动/控制芯片和 4R7 功率电感
光这一侧:带金属壳和尾纤的就是 BOSA(光收发组件),旁边那颗小芯片是它的驱动/控制器。照片上只能看到「有这么一颗东西」,它到底是谁、工作在什么等级,还是要问日志

日志把光模块的身份也交代了:驱动同时兼容 Semtech 的 GN25L95 和 ZX279511,靠一个寄存器的值区分(读到 0xFF 认 GN25L95,读到 0xAA 认 ZX279511),这台读出来是 0xAA,认的是 ZX279511。GN25L95 本身是颗 GPON ONU 用的突发模式激光驱动器加限幅放大器,1.25–3.1Gbps,片内带温度传感器做光功率诊断,专门给 BOSA 板载式的 ONU 用。另外日志还报了 vendor name = ZTE_PX20+_G——PX20+ 是 GPON 的 B+ 光功率等级,至于后面的 _G,跟 region 310(广东)对得上,应该是省份后缀。

语音电路区域:芯片位置为空焊盘,右侧是预留但未安装的电话口,旁边有一颗独立的芯片
语音这一片:中间那个位置是空的,右边那排也是空着的。板子在这里留了位,但没装东西

这张是语音区。空焊盘说明「这里本该有东西」,但还不能说明「这款就没有语音」——所以我用日志收尾:slic total_line_num: 0,而且它前后试了三种 mode,把 Siliconlab、Kylin、Lantiq 几家挨个点过名,一个都没认到。这台确实不带语音。

更有意思的是,软件里语音的那套东西其实是装着的——日志里能看到 Init codec v2.5(2019-09-18)、P_2833: Setup 0、DSP device setup OK。DSP 驱动装好了,缺的就是那颗 SLIC 芯片。这是典型的「一套固件平台,按配置裁剪硬件」:代码为全功能版本写,硬件按订单砍。

到这儿,四个型号都到手了:主控 ZX279127S、内存 RS5128B-18E、闪存 TC58BVG1S3HTA00、光模块 ZX279511。现在问题来了——光凭这四个名字,你能说出这台机器的主频、内存实际容量、闪存分区、系统版本、代工厂和省份吗?一个都说不出来。要拿到这些,得让它自己开口。

焊一个 TTL 口:把它的嘴撬开

这块板出厂没给调试口装针,只在边上留了一排空焊盘(丝印 BJ1)。这就是入口,得自己补针。

手工焊接的 TTL 排针:BJ1 位置焊了三根针,旁边是丝印 R1214/R1211 等
就是这儿。BJ1 三个焊盘,出厂是空的,针是我自己焊上去的。焊盘间距不大,旁边全是 0402 的小阻容,手抖一下就连带
手工焊接的 TTL 针脚特写:三根针并排,另有一根独立的针焊在旁边的焊盘上
换个角度看焊点:饱满、发亮、没有拉尖,针也不晃。这是我把烙铁压住、等锡自己流上去的结果,不是拿锡去抹的

为什么不拿探针顶着、或者拿夹子夹?因为串口是长时间实时通信,不是点一下就读完的数据。探针一滑就断,夹子夹不牢还会蹭到旁边的元件,日志读一半断掉最气人。焊上针之后插杜邦线,想读几次读几次。

焊这点东西不需要教程,但有几个坑我替你先踩了:烙铁别超 350℃,高了焊盘铜箔容易翘;一个点两三秒解决,压在焊盘上超过五秒就是在烤板子;助焊剂记得洗,不洗时间长了会吸潮发黑;最怕虚焊——焊点看着圆,其实锡没爬进孔里,串口就会时通时不通。判断办法很简单:拿镊子轻轻拨一下针脚,会晃就返工。

接线用一块 CH340 的 USB 转 TTL 小板(电脑上认成 COM4)。三根线就够:GND 对 GND,TX 接 RX、RX 接 TX,交叉接。板子自己有电,不用从串口取电。串口参数是 115200、8 数据位、无校验、1 停止位——这个数字不是我试出来的,日志里的内核命令行写着 console=ttyAMA0,115200n8,照着抄就行。

启动日志实录:从上电到系统起来

下面按开机顺序,把关键段落贴出来。录到的整份日志 1500 多行,其中九成是刷屏的东西——比如 plib_ifs_db_get No Run Info 这条,几百行都在重复;还有一堆 jffs2 CRC failed 和 Bad rule。看着吓人,其实都是这类光猫的日常噪音,不影响判断。真正有信息量的,就下面这几段。

先是上电第一屏。芯片还没引导系统,已经在报自己的硬件底子了:

串口日志:Boot NAND、start read bootheader、non secure boot、ddr init rate 1066 Mbps、ddr size 0x20000000
上电第一屏:Boot NAND、non secure boot(记住这四个字,它没开安全启动)、DDR 初始化 rate is 1066 Mbps、容量 0x20000000——换算过来正好 512MB

紧接着是 U-Boot 横幅,一屏把 CPU、内存、闪存全交代了:

U-Boot 横幅:U-Boot 2013.04、CPU ZX279127S@A9、Board ZXIC zx279127sevb、DRAM 512 MiB、Toshiba NAND 256MiB
U-Boot 横幅:CPU : ZX279127S@A9, Board: ZXIC zx279127sevb、DRAM: 512 MiB。往上还有一行 1000MHZ。主频和内存容量,这一屏就齐了
U-Boot 2013.04 (Mar 17 2025 - 19:37:58)
CPU  : ZX279127S@A9,Board: ZXIC zx279127sevb
CONFIG_SYS_SDRAM_SIZE = 0x20000000
DRAM:  512 MiB
NAND:  boot mode: 1
find: XT27G02BTSIGA
Manu ID: 0x98, Chip ID: 0xda (Toshiba NAND 256MiB 3,3V 8-bit)
256 MiB

这里有个小怪事:报 NAND 的时候,U-Boot 先打了一句 find: XT27G02BTSIGA,然后又老老实实按厂商 ID 报了 Toshiba NAND 256MiB。前者是它自己表里的型号名,后者是按 0x98 / 0xda 这两个 ID 查出来的通用名。而板子上焊的又是铠侠的丝印——同一颗闪存,三个名字。这种「名字对不上」在这类设备里太常见了,所以我一直强调:别拿丝印互相抄,看它自己报什么。

接下来 U-Boot 会读厂商私有参数区,这里出现了这台机器的第一个身份:

串口日志:ZXIC_SOFT_VID 0x00010492、product_vid 0x00010492、invalid vid use default、vid=0x00050001-F627S、cpu freq 1000MHZ
参数区:ZXIC_SOFT_VID:0x00010492、product_vid = 0x00010492。而它上面几行先报了个默认值——invalid vid!!! use default!!!,然后 vid=0x00050001-F627S

注意这个细节:U-Boot 阶段它一度「没认出自己」,用了兜底的 VID;真正的定制标识要等内核起来才读得出来。同一台机器、同一个开机过程,前后报了两套身份——这也是为什么我不建议只看一段日志就下结论。

然后从闪存读内核:

串口日志:从闪存读取内核镜像,Data Size 26089627 Bytes = 24.9 MiB,Load Address 40008000
读内核:Image Name: Linux Kernel Image、Data Size: 26089627 Bytes = 24.9 MiB。一台只用来上网的光猫,内核本体 24.9MB

内核起来之后,最先要盯的是这几行:

Linux version 4.1.25 (cmdc@zte) (gcc version 4.9.4 (Buildroot 2017.05-svn2186) ) #3 SMP PREEMPT Wed Jun 12 20:48:58 CST 2024
Machine model: ZTE ZX279128S
Memory: 462660K/524288K available
CPU1: failed to come online
Brought up 1 CPUs
SMP: Total of 1 processors activated (1987.37 BogoMIPS).

信息量最大的一段,逐行说:

第一,系统三件套和编译时间。内核 Linux 4.1.25,编译器 gcc 4.9.4,Buildroot 2017.05,编译时间 2024 年 6 月 12 日,构建账号 cmdc@zte。也就是说,这套固件是中兴自己的编译机搓出来的,而且 2024 年年中还在更新。U-Boot 那边也印着 Mar 17 2025——比内核还新。一台 2024 年就停产的猫,固件一直在动。

第二,同一颗芯片、两套名字。内核报的是 Machine model: ZTE ZX279128S,和 U-Boot 报的 ZX279127S 不一样。这事我不打算替它圆:以芯片丝印 ZX279127S 为准,同时记住内核里它叫 ZX279128S——以后翻固件、查资料,两个名字都得搜一遍。

第三,512MB 内存的实际可用量。Memory: 462660K/524288K available,系统起来后可用 462660K 左右,剩下六十多兆被内核和保留区吃掉了。这个数字在判断「能不能跑得动额外服务」的时候很有用。

第四,也是最关键的一条:双核设计,单核运行。日志里清晰写着 num_possible_cpus:2、num_present_cpus:2、num_active_cpus:1,中间夹一句 CPU1: failed to come online,最后 Brought up 1 CPUs。BogoMIPS 1987,也就是单核 1GHz 的水平。后面还有旁证:看门狗初始化时打的是 wdt debug: nr_cpu_ids= 2,还有一段 tdm binding cpu1....——代码全都是照两颗核写的。硬件给你两颗核,固件只点亮一颗,省下来的那颗核就一直在那儿躺着。

再往后是分区。这一段直接决定一台光猫是「刷不死」还是「刷一次变砖」:

Creating 15 MTD partitions on "denali-nand":
0x000000000000-0x000010000000 : "whole flash"
0x000000000000-0x000000200000 : "u-boot"
0x000000200000-0x000002200000 : "kernel0"
0x000002200000-0x000004200000 : "kernel1"
0x000004200000-0x000004800000 : "others"
0x000004800000-0x000004c00000 : "parameter tags"
0x000004c00000-0x000005400000 : "usercfg"
0x000005400000-0x000005800000 : "middleware"
0x000005800000-0x000005c00000 : "wlan"
0x000005c00000-0x000005e00000 : "phoneapp"
0x000005e00000-0x000006000000 : "phoneapp1"
0x000006000000-0x000007e00000 : "osgi"
0x000007e00000-0x000009c00000 : "osgi1"
0x000009c00000-0x00000ff60000 : "plugin_data"
0x00000ff60000-0x000010000000 : "GN25L95_datas"

这 15 行里其实只有 14 个是真分区,第 0 个 whole flash 是整片映射。我照着这份表画了一张图,把偏移和大小按比例摆出来,比看十六进制舒服多了:

自制图:中国移动 H5-9 闪存分区布局,256MiB 被切成 15 个分区,核心区 A/B 双份
我按日志里的偏移量画的分区图。256MiB 里最大的一块是 plugin_data,99MiB,比内核还大——那是给移动插件留的数据区

这张图里有意思的地方是「双份」:kernel0 / kernel1、osgi / osgi1、phoneapp / phoneapp1 全是 A/B 两套,另外还单独有一个 middleware 当中间件备份。运营商推固件时先写备用区,校验过了才切过去;写坏了,还能从另一套起来。分区表还顺手交代了两件事:这型号的固件里写着 wlan 和 phoneapp 两个分区,说明它是从一个「带无线、带语音」的完整平台上裁剪下来的;而 plugin_data 一个分区 99MiB,比内核还大,可见运营商那套后台在固件里占了多少份量。最后 640KiB 的 GN25L95_datas 是光模块自己的标定数据,哪天光模块坏了换一颗,这块数据也得跟着搬。

再往后,它就把三件事一块儿招了:

vid=0x00010492-CHANGHONG_H5_9_S1
region code:310
region name:Guangdong
slic total_line_num: 0
cp: can't stat '/etc/vendor/0x1049/Wireless/*': No such file or directory
Call pm_wlan_list_config error, ret = -4

第一行是它的真名。vid=0x00010492-CHANGHONG_H5_9_S1。CHANGHONG 就是长虹。这是一台长虹代工的移动 H5-9,版本 S1。前面那些「看外壳像谁做的」的讨论,到这儿可以收工了。顺带一提,我在本站拆过的另一台移动光猫 H50G(星网锐捷那台)用的是同一颗主控 ZX279127S——同一条产品线,方案一样,代工厂不一样。

第二行是省份。region code:310 后面跟着 region name:Guangdong。移动是按省定制的,同一个型号名,不同省的固件不一样,这一点铭牌和丝印都看不出来。

第三、四行回答「到底有没有语音和无线」。语音这边 slic total_line_num: 0,一条线路都没认到;无线那边,固件直接去找 /etc/vendor/0x1049/Wireless/ 下的东西,发现目录根本不存在,后面 WLAN 配置调用再报一次错。这台机器在软件层面就没有无线——不是「没焊」,是「本来就没有」。

最后是插件、网口、telnet 和光口状态:

Init switch module Success
zy uni num:4
switch config 9127/9128 GPON  mode!
VendorId=38c,ChipModel=1271,Revision = 28
ZX279511 found.
vendor name = ZTE_PX20+_G
do action with cfg:enable=0,port=23,maxcon=5,usr=CMCCAdmin,pwd=J%e5rwmFZ,ProcType=0
[OSS_telnetd] stop telnetd success

关于那四个网口:它们不是外挂交换芯片给的,是主控内部那颗交换模块吐出来的。日志写着 Init switch module、zy uni num:4、switch config 9127/9128 GPON mode——这颗 SoC 内部一共 7 个交换口,对外放 4 个给你。旁边那行 VendorId=38c,ChipModel=1271 也是这颗主控的标识。说白了,这台猫的转发上限锁死在主控自己身上,跟那种外挂一颗交换芯片的老式猫是两种结构。

关于插件:这台机器跑着一整套中国移动的家底。日志里能看到 OSGi 框架(Felix)、Java 运行环境,以及一组 com.chinamobile.smartgateway 开头的插件——andlink(和家亲、智能家居那一套)、cmccdpi(DPI 流量识别)、appcore(应用容器),JVM 的 CPU 占用还被限到 80%(SrmInit g_java_cpulimit=80)。一颗 1GHz 的单核,一边扛 PPPoE、NAT、OMCI,一边跑一整套 Java 插件,你现在大概能理解它为什么只点亮一个核还这么忙了。

关于权限:顺着日志还能看到一个细节。httpd、dnsmasq、phoneapp、telnetd 这些用户态程序启动时,全都在报 setuid / setgid,还夹着一句 enter set normal user, flag has MGR_PC_NOTROOT!。意思是它们以非 root 身份运行。光猫把权限分得比很多家用路由器都细。

最后一条,也是全篇最有意思的一条:telnet 的凭据是明文。看这一行——开关、端口、最大连接数、账号、密码,原样打出来了。注意 enable=0:这台机器默认是关着 telnet 的,下一行紧接着就是 stop telnetd success。但密码就藏在固件里,而且每次开机都会被打进日志。芯片丝印永远不会告诉你密码,日志会。这就是「听」和「看」最直白的差别。

光这边日志也报了状态:the pon mode is 8、state o1 =>o2、gpon_omci start,OMCI 侧最多支持 7 条 Tcont、每条 8 个队列,队列对 CPU 的限速设在 4000pps。这些都是运营商侧下发的口径。

日志给出的结论:硬件反推推不出来的那些

把「看板子能推出的」和「日志实际报的」摆一张表对照。左边是硬件,右边是设备自述——你会发现右边明显更具体,也更可信。

项目只看板子能推出什么日志实际报了什么
主控ZXIC ZX279127S,Cortex-A9,几核几频未知1000MHZ;内核里叫 ZTE ZX279128S;可见 2 核、只起来 1 核
内存RamMonster RS5128B-18E,容量要自己算DRAM: 512 MiB、ddr rate is 1066 Mbps
闪存铠侠 TC58BVG1S3HTA00,容量靠查料号256 MiB, SLC, page size: 2048, OOB size: 64,并报出 3 个出厂坏块
接口类型封装是 TSOP-48,但看不出走哪条总线驱动名 denali-nand,并行接口;SPI 侧报 spi nand not exist!
分区看不到15 个 MTD 分区,含 kernel0/1、osgi/1、phoneapp/1 双份
系统版本看不到U-Boot 2013.04 + Linux 4.1.25 + Buildroot 2017.05
编译时间看不到内核 2024-06-12(cmdc@zte),U-Boot 2025-03-17
固件标识看不到ZXIC 1GPON UNI V32.AA1.01
代工厂只能靠外壳和网友说法猜定制标识 CHANGHONG_H5_9_S1=长虹
地区看不到region code:310=广东
无线板上没有无线芯片,但可能只是没焊pm_wlan_list_config error,软件层面确认没有
语音语音芯片位置空着slic total_line_num: 0,SLIC 一条线路没认到
网口来源数得出 4 个 RJ45,但不知道谁在转发SoC 内部交换模块(zy uni num:4),非外挂交换芯片
安全启动看不到non secure boot,未启用
telnet完全看不到enable=0,port=23,usr=CMCCAdmin,pwd=***,明文
光模块只看到一颗芯片,认不出型号BOB 认 ZX279511,标识 ZTE_PX20+_G

挑几条展开说说。

一、双核只跑一核,是这台机器最被低估的一条。网上关于 H5-9 的讨论里,有人猜它「单核双线程」,有人猜它「双核」——都是靠看跑分和摸温度猜的。日志把话说死了:SoC 报出两颗核,第二颗 failed to come online。是供电不足、是固件刻意关掉、还是那一路核压根没在 Package 里,日志没说,我也不替它猜。但「按两颗核设计、实际只用一颗」这个事实本身,已经能解释很多事情了——包括它跑着一整套 Java 插件之后为什么那么吃紧。

二、「一个东西三个名字」在这类设备里是常态。主控:U-Boot 叫 ZX279127S,内核叫 ZX279128S。闪存:板子上印铠侠 TC58BVG1S3HTA00,U-Boot 表里叫 XT27G02BTSIGA,按 ID 又报 Toshiba NAND。这不是谁写错了,是「丝印 / 引导程序 / 操作系统」三套命名体系各说各话。所以看到一篇拆解只有一个名字,多半是只抄了一处。

三、同型号、不同配置,是真实存在的。前面提过:湖北版有网友记的是 512M + 128M,我这台广东版日志报的是 512M + 256M。这不是谁写错,是配置真的不一样。想确认自己那台,别看别人的文章,让它自己说一遍。

四、15 个分区里藏着这台机器的出身。它明明没有无线、没有语音,分区表里却留着 wlan 和 phoneapp。这说明固件是从全功能平台上裁下来的,硬件按订单砍。对运维来说这有实际意义:这些分区是空的,但位置在,将来要改固件布局,得先知道原始设计长什么样。另一个更直观的数字是 plugin_data 99MiB——运营商那套后台,在闪存里占的位置比内核大三倍。

五、没开安全启动这件事,比密码泄露更值得记。non secure boot 翻译过来就是:引导的时候 U-Boot 不校验内核镜像的数字签名。对日常上网没影响,但对想动固件的人来说,门槛比很多人以为的低得多。这条铭牌不会写、丝印看不出来,只有设备自己开机那一句会告诉你。至于日志里那行明文 telnet 凭据,是同一个道理——它证明的不是「这台机器有漏洞」,而是「这些设备的开机日志值得读」。

总结:这台 H5-9 值不值得留

先把它的真实水平连成一句话:一台长虹代工、广东定制、单核 1GHz、512MB 内存、256MB 闪存的四口千兆 GPON 光猫,没无线、没语音,跑着一整套中国移动的 Java 插件。

  • 主控:中兴微 ZX279127S(内核平台名 ZTE ZX279128S),Cortex-A9,1000MHz,双核设计、单核运行
  • 内存:512MiB,DDR 速率 1066 Mbps;系统起来后可用约 452MB
  • 闪存:256MiB SLC 并行 NAND(铠侠 TC58BVG1S3HTA00),15 个分区、核心区 A/B 双份,3 个出厂坏块
  • 光:GPON,B+ 光功率等级,BOB 芯片 ZX279511,固件标识 ZTE_PX20+_G
  • 业务口:4×GE(SoC 内部交换模块)+ 1×USB2.0;无无线、无语音
  • 系统:U-Boot 2013.04 / Linux 4.1.25 / Buildroot 2017.05,固件 V32.AA1.01,内核编译于 2024-06
  • 定制与地区:CHANGHONG_H5_9_S1(长虹代工),region 310 广东
  • 安全:未启用安全启动;telnet 默认关闭,但账号密码以明文存在固件里,并会随开机打进日志

怎么用它,我按场景分开说:

当光猫用,它是一台规矩的设备:四个千兆口给得实在,做桥接最舒服,把拨号交给下游自己的路由器,它只负责光电转换。当路由用就要有预期——1GHz 单核,还要分出一部分去跑运营商那套 Java 插件,带几台手机看看视频没问题,想扛 NAS 到大流量传输、或者开一堆端口映射,就别难为它了。

当交换机用,四个口能跑千兆,但它们是从主控内部交换模块出来的,转发能力和主控绑在一起。真当核心交换机使不合适,当个「顺手多出来的端口」是可以的。

当研究对象用,这是它最大的价值。板子上留了调试焊盘,固件没开安全启动,日志里连 telnet 密码都给你——一台几十块钱的二手设备,能让你把 xPON 网关从 U-Boot 到 OMCI 的全流程看一遍。对我这种想搞明白「运营商最后一公里到底怎么实现的」的人来说,这比它能不能跑满千兆重要得多。同一条线路上,我还拆过 诺基亚贝尔代工的 G-140W-MD,两台的启动流程、OMCI 逻辑、运营商插件几乎是一个模子——这说明现在这些光猫,硬件方案可能换厂家,但「软件那一层」早就被运营商收编得整整齐齐了。

最后说一句立场:这篇里所有结论都能在日志或丝印里找到出处,凡是没依据的地方,我要么标了「猜」、要么干脆没写。如果哪天你拆自己的 H5-9,发现内存闪存和这篇不一样,那很正常——同型号不同省份、不同批次都可能换料。真想确认自己那台,唯一靠谱的办法是让它自己说一遍:焊个口,读日志。

下一步我打算做的是「动手改」的那部分:在这台机器上把 telnet 打开、拿到 root、把整片闪存 dump 出来,顺便看看那枚一直在睡觉的第二颗核到底能不能叫醒。这跟「看硬件」是两码事,等实操完再写。还是那句老话——只在自己名下的设备上折腾。

如果你觉得这篇文章不错,有用的话可以点击下面的“赞赏”支持作者,你的支持是我更新的动力(饿饿吃饭)。