Linux PTP学习

前言

本文是对Linux PTP的学习记录,不足之处请指出。Linux PTP用于在Linux系统的精确时钟同步,支持IEEE 1588 Precision Time Protocol(PTP)标准,目的是实现在网络中,设备之间的高精度时间同步。它是一个工具的集合,核心工具有ptp4l,phc2sys等。ptp4l作为最核心的工具,用于网络中的PTP设备通信,可以将本地PTP 硬件时钟与PTP grandmatser同步,而phc2sy可以将本地 PTP 硬件时钟同步到系统时钟(反之也可),从而实现了本地系统时钟对PTP grandmatser的同步。

前提条件

首先要检查本地的PTP 硬件设备例如网卡是否支持软硬件时间戳,可以用ifconfig查看网卡名称,然后 使用命令:

ethtool -T enp23s0f0

对于软件时间戳的支持应该包括:

  • SOF_TIMESTAMPING_SOFTWARE
  • SOF_TIMESTAMPING_TX_SOFTWARE
  • SOF_TIMESTAMPING_RX_SOFTWARE

对于硬件时间戳的支持应该包括:

  • SOF_TIMESTAMPING_RAW_HARDWARE
  • SOF_TIMESTAMPING_TX_HARDWARE
  • SOF_TIMESTAMPING_RX_HARDWARE

安装Linux PTP

下载源码:

git clone http://git.code.sf.net/p/linuxptp/code linuxptp
git checkout v2.0

build and install:

cd linuxptp
make
sudo make install

ptp4l使用范例(软件时间戳)

用网线连接两台主机的网卡,eno1和enp0s25。eno1作为主时钟,enp0s25作为从时钟。
首先可以用ptp4l -h查看运行选项:

 [options]

 Delay Mechanism

 -A        Auto, starting with E2E # 自动选择延迟机制。,从E2E开始,当收到对等延迟请求时切换到P2P
 -E        E2E, delay request-response (default)
 -P        P2P, peer delay mechanism

 Network Transport

 -2        IEEE 802.3
 -4        UDP IPV4 (default)
 -6        UDP IPV6

 Time Stamping

 -H        HARDWARE (default) # 使用硬件时间戳(默认)
 -S        SOFTWARE           # 使用软件时间戳  
 -L        LEGACY HW

 Other Options

 -f [file] read configuration from 'file'                   # 从指定文件file中读取配置。 默认情况下不读取配置文件
 -i [dev]  interface device to use, for example 'eth0'      # 选择PTP接口设备,例如eno1
           (may be specified multiple times)
 -p [dev]  PTP hardware clock device to use, default auto
           (ignored for SOFTWARE/LEGACY HW time stamping)
 -s        slave only mode (overrides configuration file)
 -t        transparent clock
 -l [num]  set the logging level to 'num'
 -m        print messages to stdout
 -q        do not print messages to the syslog
 -v        prints the software version and exits
 -h        prints this message and exits

master 主机使用命令和日志:

sudo ptp4l -i eno1 -m -S

slave 主机使用命令和日志:

sudo ptp4l -i enp0s25 -m -S -s
  • master offset值表示从主设备测量的偏移量(以纳秒为单位)
  • s0/s1/s2表示PTP设备的不同状态,s0表示未锁定,s1表示正在同步,s2表示锁定,即SERVO_LOCKED,同步到了稳定状态,之后会根据时间戳做细微调整,继续保持和 master 时钟的同步
  • 当端口状态从UNCALIBRATED改变到SLAVE时,表示已经成功与一个PTP主时钟同步
  • freq表示时钟频率的调整,以十亿分之一(ppb)为单位
  • path delay表示从主时钟发送的同步消息的估算延迟(以纳秒为单位)

ptp4l使用范例(硬件时间戳)

master主机使用命令:

sudo ptp4l -i eno1 -m -H

slave主机使用命令:

sudo ptp4l -i enp0s25 -m -H -s

phc2sys使用范例

首先可以用phc2sys -h查看运行选项:

usage: phc2sys [options]

 automatic configuration:
 -a             turn on autoconfiguration                         # 自动寻找当前运行的ptp4l程序,利用它的时钟,同步给操作系统时钟,操作系统时钟是slave
 -r             synchronize system (realtime) clock
                repeat -r to consider it also as a time source
 manual configuration:
 -c [dev|name]  slave clock (CLOCK_REALTIME)                      # 指定slave clock
 -d [dev]       master PPS device                                 
 -s [dev|name]  master clock                                      # 指定master clock
 -O [offset]    slave-master time offset (0)
 -w             wait for ptp4l                                    # 等待ptp4l
 common options:
 -f [file]      configuration file
 -E [pi|linreg] clock servo (pi)
 -P [kp]        proportional constant (0.7)
 -I [ki]        integration constant (0.3)
 -S [step]      step threshold (disabled)
 -F [step]      step threshold only on start (0.00002)
 -R [rate]      slave clock update rate in HZ (1.0)
 -N [num]       number of master clock readings per update (5)
 -L [limit]     sanity frequency limit in ppb (200000000)
 -M [num]       NTP SHM segment number (0)
 -u [num]       number of clock updates in summary stats (0)
 -n [num]       domain number (0)
 -x             apply leap seconds by servo instead of kernel
 -z [path]      server address for UDS (/var/run/ptp4l)
 -l [num]       set the logging level to 'num' (6)
 -t [tag]       add tag to log messages
 -m             print messages to stdout
 -q             do not print messages to the syslog
 -v             prints the software version and exits
 -h             prints this message and exits

例如将上面slave主机的系统时钟与网卡同步命令与日志:

sudo phc2sys -s enp0s25 -w -m -R 8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/590774.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSM整合-前后端分离-项目环境搭建 (上)

整合SSM 项目基础环境搭建项目介绍创建项目项目全局配置web.xmlSpringMVC配置配置Spring和MyBatis, 并完成整合创建表, 使用逆向工程生成Bean, XxxMapper和XxxMapper.xml注意事项和细节说明 实现功能01-搭建Vue前端工程需求分析/图解代码实现搭建Vue前端工程vue3项目目录结构梳…

Pytorch学习笔记——TensorBoard的初使用

1、TensorBoard介绍 TensorBoard是TensorFlow的可视化工具,但它也可以与PyTorch结合使用。TensorBoard提供了一个Web界面,可以展示你训练过程中的各种信息,如损失值、准确度、权重分布等,更好地帮助开发者理解和调试模型。 Tenso…

01 Activiti 7:步骤

01 Activiti 7:步骤 1. 整合Activiti2. 业务流程建模3. 部署业务流程4. 启动流程实例5. 查询待办任务6. 处理待办任务7. 结束流程 1. 整合Activiti 业务系统使用 Activiti 来对系统的业务流程进行自动化管理。为了方便业务系统访问(操作)Act…

看了这一篇,你不用再为找oracle安装介质发愁了!

写这篇文章的原因是:经常有49年还想要入国军学习Oracle的小伙伴问要不同版本的Oracle软件安装包(说明一下,尊重版权,拒绝盗版,还是要从正规渠道获得介质) 事实上很多人遇到过样的坑,才发现正规…

YH11047A 三串四串锂电保护板的3串使用问题 8254A电池芯片

网上的示例电路4串正确,但是3串错误 我使用3串接线时,pp-电压只有0.几v。即被保护 根据查询8254A的IC资料 发现3串和4串的电路图有明显区别: 1、3串的sel脚接vss(低电势),4串的sel脚接vdd(高电…

Python AI 速成课:快速打造高效AI

这个文章主要是对python AI 小白的 。实用性很强,不用太多复杂步骤。 第一步:先到Try NVIDIA NIM APIs这个网站 然后使用邮箱注册,很简单和快捷。 第二步:点击微软的phi-3模型,这个API是免费的 第三步: 获取…

00 Activiti 7:介绍

00 Activiti 7:介绍 1. 前言2. 介绍3. 官网4. 核心机制5. BPMN5.1. 核心要素5.1.1. 流程元素5.1.2. 连接元素5.1.3. 数据和消息5.1.4. 协作 1. 前言 工作流(Workflow)是一种管理和自动化业务过程的方法,它将一系列任务或活动按照…

117篇 | 3D Gaussian Splatting论文

本论文集划分为4个部分:综述&基础(14篇)、NeRF在AIGC(54篇)、NeRF在SLAM(自动驾驶)(25篇)、NeRF之场景建模(25篇) https://t.zsxq.com/3ATyE…

大气官网(1):家居家电,海量案例来袭。

设计一款大气的家居家电官网,可以考虑以下几个方面: 色彩选择:选择适合家居家电风格的色彩搭配。可以选择温暖的中性色调,如米白色、灰色和棕色,以增加页面的大气感和舒适感。图片展示:使用高质量的图片展…

京东JD商品SKU信息API返回值解析:精准掌握商品属性

在电子商务迅猛发展的今天,商家对于商品信息的掌握和管理显得尤为重要。作为电商平台的佼佼者,京东(JD)提供了丰富的API接口,使得商家能够轻松地获取商品的详细信息,包括SKU(Stock Keeping Unit…

ESP32 烧录固件

第一步:下载固件 git clone --recursive https://github.com/espressif/esp-at.git 第二步:执行编译 在该目录执行 python build.py install 如图: 第三步:选择芯片 输入2 第四步:选择固件 输入1 第五步&#…

Excel中怎样把单元格里的数据拆分成多行?

时常会遇到这种情况,需要将一个单元格里的数据分拆到多行,可以使用公式,这里演示使用基础操作的办法。 按照excel使用经验,可以复制数据,粘贴到MS Word里,这个是excel的同族软件,兼容性好。 在…

window系统安装MySQL

MySQL的安装和配置 根据不同的系统平台,MySQL由不同安装方式和安装包。 官方下载对应的安装包 官网:www.mysql.com 下载地址:MySQL :: Download MySQL Community Server (Archived Versions) window系统 一、安装包(Windows…

JavaScript 如何理解柯里化函数结构及调用

文章目录 柯里化函数是什么逐步理解柯里化函数 柯里化函数是什么 柯里化(Currying)函数,又称部分求值,是一种函数转换技术。这种技术将一个接受多个参数的函数转换为一系列接受单一参数的函数。具体来说,一个柯里化的…

【研发管理】产品经理知识体系-组合管理

导读:新产品开发的组合管理是一个重要的过程,它涉及到对一系列新产品开发项目进行策略性选择、优先级排序、资源分配和监控。这个过程旨在确保企业能够最大化地利用有限的资源,以实现其战略目标。 目录 1、组合管理、五大目标 2、组合管理的…

张大哥笔记:付费进群创业项目玩法及详细操作教程

今天给大家分享一个赚钱小项目,它就是付费进群系统,这个项目应用范围很广。比如表情包,知识付费,美女写真,虚拟资料,交友扩列等都可以。今天我们就来说一下最近爆火的交友搭子付费进群做个演示案例&#xf…

线性卷积和圆周卷积

文章目录 【 1. 线性卷积 】1.1 图解分析1.2 矩阵相乘实现线性卷积1.3 圆周卷积实现线性卷积1.4 实例:线性卷积的两种实现方法【 2. 圆周卷积 】2.1 图解分析2.2 矩阵相乘实现圆周卷积2.3 频域点乘实现圆周卷积2.4 实例:圆周卷积两种实现方法【 3. 线性卷积和圆周卷积的等价 …

题目:吃奶酪

问题描述: 解题思路: 枚举每种吃奶酪顺序,并计算其距离,选择最小的距离即答案。v数组:记录顺序。 注意点:1. 每次用于min的s需要重置为0。 2. 实数包括小数,所以结构体内x,y为double类型。 3. 第…

基数排序简记

今天手敲 基数排序 代码的时候发现结果不对,这里简记一下原因。 第一版代码(错误) public void radixSort(int[] arr) {// 1. 获取 arr 的最大位数int maxDigit Arrays.stream(arr).max().getAsInt();int maxLen String.valueOf(maxDigit…

赵本山:吃恐龙没?范伟:我想吃我吃的着吗?!

赵本山:吃恐龙没?范伟:我想吃我吃的着吗?! ——小品《升职》(中2)的台词 (接上) 赵本山:据我多年的破案经验 一般罪犯心理这个时候都是手舞足蹈抓耳挠腮 …