浅聊一下Linuxptp

news/2024/11/28 1:53:51/

浅聊一下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.当从端口状态改变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混在一起

实验过可以但是延迟较高


http://www.ppmy.cn/news/69011.html

相关文章

使用python进行图片的文字识别

使用python进行图片的文字识别 文章目录 使用python进行图片的文字识别安装 Tesseract OCR安装过程配置系统的环境变量 安装python的第三方库Pytesseract库Pillow库 运行个demo 安装 Tesseract OCR Tesseract OCR 是一款由 Google 团队开发的开源 OCR(Optical Chara…

想发就发の日常朋友圈文案-小众碎片版

1.绝版的昨天 2.本周的潦草快乐 3.捕捉温柔 4.东拼西凑也蛮新鲜 5.过期日常一小筐 6.远古库存 7.稀里咕噜睡大觉 8.小小世界,开心至上 9.疯疯癫癫喜乐常常 10.天地狭小 日子紧凑 11.懒人日记 12.不普通的新鲜事 13.逃不掉的肥肉 14.多喝养乐多把快乐养…

软件 工程

目录 第十章、软件工程1、瀑布模型(SDLC)2、快速原型模型3、增量模型4、螺旋模型5、Ⅴ模型6、喷泉模型7、构建组装模型(CBSD)8、统一过程(RUP)9、敏捷开发方法10、信息系统开发方法11、需求开发12、结构化设…

应用架构总结

架构目标 高可用性 整体系统可用性最低99.9%,目标99.99%。全年故障时间整个系统不超过500分钟,单个系统故障不超过50分钟。 高可扩展性 系统架构简单清晰,应用系统间耦合低,容易水平扩展,业务功能增改方便快捷。 低成…

FL Studio21中文完整版All Plugins Edition及切换教程

说到制作电音的软件,coco玛奇朵一定会把FL Studio放到第一个来讲。水果是一款为了电子音乐而生的的宿主软件。水果,独特的节拍音序器组件和通道机架与混音台模块打造的编曲“块”的思路。是极为适合于电子音乐的编排。而且随着水果版本不断地升级&#x…

eKuiper 源码解读:从一条 SQL 到流处理任务的旅程

概述 LF Edge eKuiper 是 Golang 实现的轻量级物联网边缘分析、流式处理开源软件,可以运行在各类资源受限的边缘设备上。eKuiper 的主要目标是在边缘端提供一个流媒体软件框架。其规则引擎允许用户提供基于SQL 或基于图形(类似于 Node-RED)的…

无延迟直播/超低延迟直播快速接入的示例

简要说明 接入无延迟直播/超低延迟直播播放前,需确保直播间频道是无延迟频道,SDK中使用无延迟与常规播放无异,只需加入若干配置就可以快速接入。 什么是无延迟/超低延迟直播,可参见我的这篇文章: 无延时直播/超低延时…

CSS布局基础(文字[行内<块>]与行内[块]垂直对齐方式 文字溢出显示省略号)

文字[行内<块>]与行内[块]垂直对齐方式 文字[行内<块>]与行内[块]垂直对齐方式概述图片底部空隙问题 文字溢出显示省略号单行文字多行文字 文字[行内<块>]与行内[块]垂直对齐方式 概述 vertical-align: top | middle| bottom | baseline(默认) | sub | sup…