浅聊一下Linuxptp
文章目录
- 浅聊一下Linuxptp
- 1.什么是Linuxptp
- 2.安装Linuxptp
- 3.源码解析一下
- 1.8个带main函数的源文件
- 1.hwstamp_ctl.c
- 2.nsm.c
- 3.phc2sys.8
- 4.phc_ctl.8
- 5.pmc.8
- 6.ptp4l.c
- 7.timemaster.c
- 8.ts2phc.c
- 2.clock.c文件
- 4.自己实践
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.当从端口状态改变UNCALIBRATED
到SLAVE
时,计算机已经成功地与一个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混在一起
实验过可以但是延迟较高