APEX ORIN NANO PTP#

说明#

精确时间协议(PTP)是一种用于在整个计算机网络中同步时钟的协议。在局域网上,可实现纳秒级别的时钟精度。

查看设备是否支持硬件PTP#

sudo ethtool -T ethX

ethX改成对应的网卡即可,此时会显示以下内容(以eth1为例):

如包含以下参数,即代表设备支持硬件PTP功能: SOF_TIMESTAMPING_SOFTWARE SOF_TIMESTAMPING_TX_SOFTWARE SOF_TIMESTAMPING_RX_SOFTWARE

SOF_TIMESTAMPING_RAW_HARDWARE SOF_TIMESTAMPING_TX_HARDWARE SOF_TIMESTAMPING_RX_HARDWARE

如果只包含以下参数,则代表设备不支持硬件PTP功能。

SOF_TIMESTAMPING_SOFTWARE SOF_TIMESTAMPING_TX_SOFTWARE SOF_TIMESTAMPING_RX_SOFTWARE

安装Linuxptp#

sudo git clone -b v4.1 git://git.code.sf.net/p/linuxptp/code linuxptp
cd linuxptp
sudo make
sudo make install

测试功能#

准备两台设备:设备A和设备B,A设备为主设备(Master),B设备为从设备(Slave)。两台设备网口设置静态ip,通过网线直连,并可以相互ping通。如果网络链路上使用交换机或者路由器,需要交换机或者路由器也支持ptp协议。

主设备操作#

打开一个终端,执行以下命令:

sudo ptp4l -i eth1 -m -H --step_threshold 1.0

此命令用于启动ptp4l服务,此时master设备终端打印信息应该会如下图所示:

另开一个终端,执行以下命令:

sudo phc2sys -m -s CLOCK_REALTIME -c eth1 -w --step_threshold 1.0

此命令用于把master设备的系统时钟同步至网卡硬件时钟,此时该终端打印信息应该会如下图所示:

其中sys offset就是系统时钟、网卡时钟的时间偏移量,单位:ns

从设备操作#

设备打开终端,执行以下命令:

sudo ptp4l -i eth1 -m -H -s --step_threshold 1.0

此命令用于把master时钟同步至slave时钟,此时该终端打印信息应该会如下图所示:

其中master offset就是master、slave设备之间的时间偏移量,单位:ns

另开一个终端,执行以下命令:

sudo phc2sys -m -s eth1 -w --step_threshold 1.0

此命令用于把slave设备的网卡时钟同步至系统时钟,此时该终端打印信息应该会如下图所示:

其中phc offset就是slave设备上网卡时钟、系统时钟的时间偏移量

同步生效验证#

查看master设备系统时间:

sudo timedatectl

查看slave设备系统时间:

sudo timedatectl

更改master设备系统时间

sudo date -s 12:12:12

此时可以看到,matser系统时间已经更改,见下图所示:

同时matster设备上,ptp开始调整系统时钟与网卡时钟之间的时间偏移量,可以看到,时间偏移量3s就已经调整回纳秒级误差内,见下图所示:

slave设备表现

更改master时间后,也可以观察到slave设备上ptp同步程序也开始处理与master设备之间的时间误差,此时可以看到,master offset时间偏移量5s就调整回纳秒级误差内,如下图所示:

随后观察slave设备上网卡时钟与系统时钟之间的时间误差,此时可以看到,phc offset时间偏移量5s内就调整回纳秒级误差内,如下图所示:

同时观察slave设备上的系统时间,可以看到此时时间已经调整为master的系统时间,如下图所示:

6. 备注#

  • phc2sys功能是建立在ptp4l功能之上的,只有ptp4l功能启动了,phc2sys功能才能执行。

  • s0,s1,s2 : 表示时钟伺服器的不同状态,s0表示未锁定,s1表示正在同步,s2表示锁定,锁定状态表示不会再发生阶跃行同步,只是缓慢调整;所以正常情况下,两台设备间只有初次PTP同步的时候时间才会大幅度调整,再之后若调整主设备时间,则从设备时间不会调整。若需测试从设备随着主设备的时间调整而调整,则需配置参数(配置文件/etc/linuxptp/ptp4l.conf)step_threshold  步进时钟的阈值,超过阈值,直接调整时钟时间,单位秒;配置好参数后,在执行ptp4l和phc2sys程序命令时用 -f /etc/linuxptp/ptp4l.conf  来调取配置文件。或者在执行命令时直接跟 –step_threshold X.X(阈值) 来直接进行配置(推荐)。

PTP问题排查#

​现象:设备时间与标准时间不同步#

可能表现:

  • 通过时间同步协议(如PTP/NTP)获取的时间存在偏差

  • 系统日志或API接口显示时间戳异常

一、硬件与网络环境排查#

解决办法:#

检查物理连接

  • 确认网线完好且两端接口无松动或氧化

  • 将设备直接连接到支持PTP主模式的设备(如高精度时钟源),测试时间同步是否正常

    • 若同步正常 → 原网络中的交换机可能不支持PTP协议

    • 仍异常 → 继续下一步排查

验证交换机兼容性

  • 若网络中存在交换机,联系厂商确认其是否支持PTP协议

    • 不支持 → 更换支持PTP的交换机,或绕过交换机直连设备测试

二、网络配置排查#

解决办法:#

检查IP地址与网段

  • 确保设备与外部时钟源(PTP主设备)处于同一网段

  • 输入命令验证互通性:

    • 无法互通 → 调整设备IP地址至同一网段

可互通 → 检查网络多播配置

# 替换为实际IP  
ping [时钟源IP地址]  

验证多播通信

  • 确认网络环境允许多播消息传输(PTP依赖多播通信)

  • 若使用防火墙,需放行UDP 319/320端口(PTP协议端口)

三、系统服务排查#

解决办法:#

检查PTP服务状态

输入命令查看服务运行状态:

sudo systemctl status ptp4l.service  

服务未运行 → 安装并启动服务:

# 安装PTP服务  
sudo apt install linuxptp  
sudo systemctl start ptp4l.service  

​分析服务日志

导出服务日志定位问题:

journalctl -u ptp4l.service > ptp_error.log  
  • 常见错误类型:

    • 硬件时钟未校准 → 同步本地时钟后重启服务

    • 网络延迟过高 → 优化网络链路或降低同步精度要求