您现在的位置是:首页 >技术教程 >浅聊一下Linuxptp网站首页技术教程

浅聊一下Linuxptp

华氏451度。 2024-06-25 00:01:03
简介浅聊一下Linuxptp

浅聊一下Linuxptp

1.什么是Linuxptp

LinuxPTP(linuxptp)是用于Linux系统的精确时间同步软件包,支持IEEE 1588 Precision Time Protocol(PTP)标准。它提供了一个用户空间的守护进程(daemon),名为ptp4l,用于与网络中的PTP设备通信,实现高精度的时钟同步。

2.安装Linuxptp

1.检查是否支持软硬件时间戳

ethtool - T enp0s3

对于软件时间戳支持,参数列表应包括:

  • SOF_TIMESTAMPING_SOFTWARE
  • SOF_TIMESTAMPING_TX_SOFTWARE
  • SOF_TIMESTAMPING_RX_SOFTWARE

对于硬件时间戳支持,参数列表应包括:

  • SOF_TIMESTAMPING_RAW_HARDWARE
  • SOF_TIMESTAMPING_TX_HARDWARE
  • SOF_TIMESTAMPING_RX_HARDWARE

2.安装

sudo git clone https://github.com/nxp-archive/openil_linuxptp.git linuxptp
cd linuxptp
sudo make
sudo make install

3.使用(软件时间戳)

主时钟:sudo ptp4l -i enp0s8 -m -S      

从时钟:sudo ptp4l -i enp0s3-m -S -s

在这里插入图片描述

3.源码解析一下

源码里面太多文件,很多文件跟ptpd差不多,主要分析里面8个带main函数的源文件以及clock.c文件。

这8个源文件中最主要是这两个

ptp4l:ptp4l是LinuxPTP的主要守护进程,负责与PTP设备通信,并实现PTP协议的各种功能。它处理传入的PTP消息,管理本地时钟和时钟源选择,执行时钟校准等操作。

phc2sys:phc2sys是另一个工具,用于将来自PTP硬件时钟(PHC)的时间同步到系统时钟。它负责校准系统时钟以与PTP网络同步,并确保精确的时间戳记录。

1.8个带main函数的源文件

1.hwstamp_ctl.c

是一个程序,用于使用 SIOCSHWTSTAMP ioctl 在网络驱动程序级别设置和获取硬件时间戳策略

2.nsm.c

是一个实现 NetSync Monitor (NSM) 客户端的程序。 NSM 是一个精确时间协议 (PTP) 的扩展,它使客户端能够测量其时钟相对于网络中任何 PTP 时钟的偏移量支持 NSM。 它使用单播消息,但与单播模式下的 PTP 不同,它不要求服务器保留特定于客户端的任何状态。 这是对监控特别有用。

3.phc2sys.8

是一个同步系统中两个或多个时钟的程序。 通常,它用于将系统时钟同步到 PTP 硬件时钟 (PHC),它本身由 ptp4l 同步程序。使用 -a 选项,要同步的时钟是从正在运行的 ptp4l daemon 中获取的,并且同步的方向会自动跟随 PTP 端口状态的变化。

4.phc_ctl.8

是一个可以用来直接控制PHC时钟设备的程序。 通常,它用于调试目标的,一般用处不大 设备的控制。对于PHC时间设备的一般控制, phc2sys应该是首选。

5.pmc.8

是一个根据 IEEE 标准 1588 实现 PTP 管理客户端的程序。该程序从标准输入或由名称和管理 ID 指定的命令行操作读取,通过选定的传输发送它们并打印任何收到的回复。 支持三种动作:GET获取指定信息,SET更新指定信息,CMD发起指定事件。 默认情况下,管理命令针对所有端口。 TARGET 命令可用于为后续消息选择特定的时钟和端口。

6.ptp4l.c

是根据适用于 Linux 的 IEEE 标准 1588 的精确时间协议 (PTP) 的实现。 它实现了边界时钟(BC)、普通时钟(OC)和透明时钟(TC)。

  延迟机制选项
  -A       Auto,自动选择延迟机制。,从E2E开始,当收到对等延迟请求时切换到P2P
  -E       E2E,选择延迟请求 - 响应(E2E)机制。 默认是用这个机制。 单个PTP通信路径上的所有时钟必须使用相同的机制。 使用E2E机制在端口上收到对等延迟请求时,将输出warning
  -P       P2P,对等延迟机制
  网络传输选项
  -2       IEEE 802.3
  -4       UDP IPV4(默认)
  -6       UDP IPV6
  时间戳选项
  -H        使用硬件时间戳(默认)
  -S        使用软件时间戳          
  -L        LEGACY HW时间戳
  其他选项
  -f  [file]  从指定文件file中读取配置。 默认情况下不读取任何配置文件。
  -i  [dev]  选择PTP接口设备,例如eth0(可多次指定)必须至少使用此选项或配置文件指定一个端口。
  -p  [dev]  在Linux内核v3.5之前,无法发现与网络接口关联的PHC设备。 此选项指定在旧内核上运行时要使用的PHC设备(例如/ dev/ptp0)。要使用的时钟设备,默认为auto,忽略软件/ LEGACY HW时间戳(不推荐使用此选项)
  -s      slaveOnly mode,从时钟模式(覆盖配置文件)
  -t      透明时钟模式
  -l  [num]  将日志记录级别设置为'num',默认是6
  -m      将消息打印到stdout
  -q      不打印消息到syslog
  -v      打印软件版本并退出
  -h      help

主要操作:

主时钟:sudo ptp4l -i enp0s8 -m -S (软件时间戳)

从时钟:sudo ptp4l -i enp0s3-m -S -s

log:

1.该master offset值表示从主设备测量的偏移量(以纳秒为单位)

2.s0,s1,s2表示时钟伺服器的不同状态,s0表示未锁定,s1表示正在同步,s2表示锁定,锁定状态表示不会再发生阶跃行同步,只是缓慢调整;

3.当从端口状态改变UNCALIBRATEDSLAVE时,计算机已经成功地与一个PTP主时钟同步。

7.timemaster.c

timemaster 是一个程序,它使用 ptp4l 和 phc2sys 结合 chronyd orntpd 将系统时钟同步到 NTP 和 PTP 时间源。 PTP 时间由 phc2sys 和 ptp4l 通过 SHM 参考时钟提供给 chronyd

8.ts2phc.c

将 PTP 硬件时钟 (PHC) 与外部时间戳信号同步。 可以使用单个源将时间分配给一个或多个 PHC 设备。

延迟机制选项

-A       Auto,自动选择延迟机制。,从E2E开始,当收到对等延迟请求时切换到P2P

-E       E2E,选择延迟请求 - 响应(E2E)机制。 默认是用这个机制。 单个PTP通信路径上的所有时钟必须使用相同的机制。 使用E2E机制在端口上收到对等延迟请求时,将输出warning

-P       P2P,对等延迟机制

网络传输选项

-2       IEEE 802.3

-4       UDP IPV4(默认)

-6       UDP IPV6

时间戳选项

-H        使用硬件时间戳(默认)

-S        使用软件时间戳

-L        LEGACY HW时间戳

其他选项

-f  [file]  从指定文件file中读取配置。 默认情况下不读取任何配置文件。

-i  [dev]  选择PTP接口设备,例如eth0(可多次指定)必须至少使用此选项或配置文件指定一个端口。

-p  [dev]  在Linux内核v3.5之前,无法发现与网络接口关联的PHC设备。 此选项指定在旧内核上运行时要使用的PHC设备(例如/ dev/ptp0)。要使用的时钟设备,默认为auto,忽略软件/ LEGACY HW时间戳(不推荐使用此选项)

-s      slaveOnly mode,从时钟模式(覆盖配置文件)

-t      透明时钟模式

-l  [num]  将日志记录级别设置为'num',默认是6

-m      将消息打印到stdout

-q      不打印消息到syslog

-v      打印软件版本并退出

-h      help

2.clock.c文件

这个是管理时钟的代码。这些代码负责监测系统时钟的状态,校准系统时钟与PTP软硬件时钟的差异,并执行时钟校准和同步操作,以保持时间的准确性。

在这个文件中也可以自己修改打印输出的东西。

在这里插入图片描述

在这修改。

4.自己实践

1.校验是否正确

date +"%T.%N"打印系统时间,然后比对时间差

2.检查能否与ptpd混在一起

实验过可以但是延迟较高

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。