环境
- 板卡:ATK-DLMP257B(STM32MP257),ST 官方 Yocto(X-LINUX-TSNSWCH)
- 内核 6.6.48;deptp 2.5.2(Flexibilis);驱动
edgx_pfm_lkm
目标
把板载交换机配置成 IEEE 802.1AS 的 P2P 透明时钟(TC) ,转发 Sync/Follow_Up 时把驻留时间写入 correctionField。
配置(出厂默认,未做改动)
<Interface name="sw0p2"><profile>gptp</profile><mode>tc</mode><delay>p2p</delay></Interface>
<Interface name="sw0p3"><profile>gptp</profile><mode>tc</mode><delay>p2p</delay></Interface>
<Basic><one_step_clock>0</one_step_clock></Basic>
systemctl status deptp 为 active;deptp_tool --get-tc-port-dataset 正常返回(faulty false,peer-mean-path-delay ≈ 145 ns),而 deptp_tool --get-port-dataset 返回 error rejected —— 说明 deptp 确实工作在 TC 模式。
拓扑
GM(PC) — sw0p2 [板子] sw0p3 — Slave(PC)。两端 linuxptp 4.0,配置 network_transport L2 + delay_mechanism P2P + transportSpecific 1,使用 -H 硬件时间戳。P2P 路径延迟稳定在 152 ns ± 1。
现象与实测
- 在板子两侧同时抓包、按 sequenceId 对齐 :同一批 Sync/Follow_Up(seq 19246–19252)在入口和出口都抓到了,
correctionField 前后完全相同,全为 0 (20 帧,字节均为 00 00 00 00 00 00 00 00)。
- 板子 CPU 只能看到 Pdelay(sw0p2/sw0p3 各抓 249 帧,全是 PdelayReq/PdelayResp/PdelayRespFU),转发中的 Sync/Follow_Up 一帧都不到 CPU 。
- 修正通道本身是活的:设置
<output_delay>1000</output_delay> 后,板子自己发出的 Pdelay_Req 带 corr=65536(1 ns);但同一份抓包里,转发的 Sync/Follow_Up 仍为 0 。
- 内核持续打印
EDGX-BR-CORE: edgx_com_ts_find_tx(): TX timestamp lost(约 8 次/秒,与 deptp 的 Pdelay_Req 速率一致),deptp 侧对应 ptp_port_pdelay_measurement: Missing timestamps。
已尝试、均无效
<one_step_clock>1</one_step_clock>
syncmode="1588"(/etc/modprobe.d/edgx_sw_core.conf;重启后 dmesg 确认 Synchronisation mode (syncmode): 1588,correctionField 仍为 0)
- 一步/两步(flag
0x0000 / 0x0200)× transportSpecific 0 / 1,共 4 种组合
<profile>ptp</profile>:非法值,deptp 直接 status=1 退出;<mode>BC</mode>:libptp.so.0 只导出 PTP_PORT_TYPE_OC / PTP_PORT_TYPE_TC,不支持边界时钟
- 向
01:80:C2:00:00:0E 注入的帧板子不转发(注入 5 帧,对端收到 0)
- 对
/boot/6.6.48/kernel/**/*.ko 全量 strings 搜索 residence|correctionField|transparent clock:零命中 ;edgx_pfm_lkm.ko 中 PTP 相关仅有 syncmode 与 timestamp
请教
- STM32MP2 的 ETHSW 是否支持转发路径上的 802.1AS 透明时钟(驻留时间修正)?
- 若支持,正确的配置方法是什么?当前 X-LINUX-TSNSWCH 中的 deptp 2.5.2 与
edgx_pfm_lkm 是否已实现该功能?
- 若不支持,是否有后续版本计划?
|