Linux时间同步(PPS、PTP、chrony)分析笔记

1 PPS(pulse per second)

1.1 简介

LinuxPPS provides a programming interface (API) to define in the system several PPS sources.


PPS means "pulse per second" and a PPS source is just a device which provides a high precision signal each second so that an application can use it to adjust system clock time.

A PPS source can be connected to a serial port (usually to the Data Carrier Detect pin) or to a parallel port (ACK-pin) or to a special CPU's GPIOs (this is the common case in embedded systems) but in each case when a new pulse arrives the system must apply to it a timestamp
and record it for userland.

                                                                                        《<kernel_src>/Documentation/pps/pps.txt》

1.2 PPS时间同步信号的输入源

1.2.1 串口信号中的DCD(Data Carrier Detect)信号

1.2.1.1 普通串口

以drivers/tty/serial/amba-pl010.c驱动为例

pl010_int();-> pl010_modem_status();-> uart_handle_dcd_change();-> ld->ops->dcd_change();-> pps_tty_dcd_change();-> pps_event()

1.2.1.2 USB串口

以drivers/usb/serial/pl2303.c驱动为例

pl2303_read_int_callback();-> pl2303_update_line_status();-> usb_serial_handle_dcd_change();-> ld->ops->dcd_change();-> pps_tty_dcd_change();-> pps_event()

1.2.3 GPIO

1.2.3.1 在设备树中指定使用哪个GPIO

例如

    pps {compatible = "pps-gpio";pinctrl-names = "default";pinctrl-0 = <&pinctrl_pps>;gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>;status = "okay";};
1.2.3.2 驱动

drivers/pps/clients/pps-gpio.c

pps_gpio_irq_handler();-> pps_event()

1.2.4 并口

drivers/pps/clients/pps_parport.c

parport_irq();-> pps_event();

1.2.5 PTP

1.2.5.1 判断网卡是否打开PPS功能

/sys/class/ptp/ptp0/pps_available

        This file indicates whether the PTP hardware clock supports a Pulse Per Second to the host CPU.        

/sys/class/ptp/ptp0/pps_enable

        This write-only file enables or disables delivery of PPS events to the Linux PPS subsystem.

1.2.5.2 驱动

以Intel的网卡驱动为例

drivers/net/ethernet/intel/igb/igb_main.c

igb_tsync_interrupt();-> ptp_clock_event();-> pps_event();

1.3 文件操作接口/dev/ppsX

/** Char device stuff*/static const struct file_operations pps_cdev_fops = {.owner      = THIS_MODULE,.llseek     = no_llseek,.poll       = pps_cdev_poll,.fasync     = pps_cdev_fasync,.compat_ioctl   = pps_cdev_compat_ioctl,.unlocked_ioctl = pps_cdev_ioctl,.open       = pps_cdev_open,.release    = pps_cdev_release,
};

1.4 在chrony服务中使用PPS作为时间源

在配置文件/etc/chrony/chrony.conf中添加以下内容

refclock SHM 0 poll -2 refid GPS precision 1e-1 offset 0.9999 delay 0.2
refclock PPS /dev/pps0 lock NMEA refid PPS

执行"chronyc sources" 命令,出现以下结果表示配置成功

# chronyc sources | grep PPS
#- PPS                           0   4    77    16   -309ms[ -309ms] +/-   29ms

2 PTP(precise time protocol; IEEE 1588协议)

2.1 简介

IEEE 1588 addresses the clock synchronization requirements of measurement and control systems. The protocol supports system-wide synchronization accuracy in the sub-microsecond range with minimal network and local clock computing resources.

                                                                        《Intel ® Ethernet Controller I350 Datasheet》P457

2.2 判断网卡是否支持PTP

PTP功能需要网卡硬件支持,可通过ethtool -T  xxx来查看

出现以下信息,表示网卡硬件支持PTP

# ethtool  -T enp0s31f6
Time stamping parameters for enp0s31f6:
Capabilities:hardware-transmit     (SOF_TIMESTAMPING_TX_HARDWARE)software-transmit     (SOF_TIMESTAMPING_TX_SOFTWARE)hardware-receive      (SOF_TIMESTAMPING_RX_HARDWARE)software-receive      (SOF_TIMESTAMPING_RX_SOFTWARE)software-system-clock (SOF_TIMESTAMPING_SOFTWARE)hardware-raw-clock    (SOF_TIMESTAMPING_RAW_HARDWARE)
PTP Hardware Clock: 0
Hardware Transmit Timestamp Modes:off                   (HWTSTAMP_TX_OFF)on                    (HWTSTAMP_TX_ON)

2.3 在chrony服务中使用PTP作为时间源

在配置文件/etc/chrony/chrony.conf中添加以下内容

refclock PHC /dev/ptp0 poll 2

执行"chronyc sources" 命令,出现以下结果表示配置成功 

# chronyc sources | grep PHC
#x PHC2                          0   2   377     5   +39.6s[ +39.6s] +/- 1139us

缩写:

        PHC: PTP hardware clock 

2.4 /sys/class/ptp/ptpN/

2.5 扩展知识:虚拟机和物理机之间的时间同步(ptp_kvm)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题 2673使二叉树所有路径值相等的最小代价

2673. 使二叉树所有路径值相等的最小代价 题目描述&#xff1a; 给你一个整数 n 表示一棵 满二叉树 里面节点的数目&#xff0c;节点编号从 1 到 n 。根节点编号为 1 &#xff0c;树中每个非叶子节点 i 都有两个孩子&#xff0c;分别是左孩子 2 * i 和右孩子 2 * i 1 。 树…

Java缓存简介

内存访问速度和硬盘访问速度是计算机系统中两个非常重要的性能指标。 内存访问速度&#xff1a;内存是计算机中最快的存储介质&#xff0c;它的访问速度可以达到几纳秒级别。内存中的数据可以直接被CPU访问&#xff0c;因此读写速度非常快。 硬盘访问速度&…

学习和工作的投入产出比(节选)

人工智能统领全文 推荐包含关于投入、产出、过剩、市场关注、案例、结果和避雷等主题的信息&#xff1a; 投入与产出&#xff1a; 投入和产出都有直接和间接两类常见形式。常见的四种组合是&#xff1a;直接投入、直接产出、间接投入、间接产出。 过剩&#xff1a; 过剩是一个重…

力扣SQL50 无效的推文 查询

Problem: 1683. 无效的推文 思路 &#x1f468;‍&#x1f3eb; 参考 char_length(str)&#xff1a;计算 str 的字符长度length(str)&#xff1a;计算 str 的字节长度 Code select tweet_id from Tweets where char_length(content) > 15;

C++与 Fluke5500A设备通过GPIB-USB-B通信的经验积累

C与 Fluke5500A设备通过GPIB-USB-B通信的经验积累 以下内容来自&#xff1a;C与 Fluke5500A设备通过GPIB-USB-B通信的经验积累 - JMarcus - 博客园 (cnblogs.com)START 1.需要安装NI-488.2.281&#xff0c;安装好了之后&#xff0c;GPIB-USB-B的驱动就自动安装好了 注意版本…

动态规划(算法竞赛、蓝桥杯)--单调队列滑动窗口与连续子序列的最大和

1、B站视频链接&#xff1a;E11【模板】单调队列 滑动窗口最值_哔哩哔哩_bilibili 题目链接&#xff1a;滑动窗口 /【模板】单调队列 - 洛谷 #include <bits/stdc.h> using namespace std; const int N1000010; int a[N],q[N];//q存的是元素的下标 int main(){int n,k;…

unity学习(41)——创建(create)角色脚本(panel)——UserHandler(收)+CreateClick(发)——创建发包!

1.客户端的程序结构被我精简过&#xff0c;现在去MessageManager.cs中增加一个UserHandler函数&#xff0c;根据收到的包做对应的GameInfo赋值。 2.在Model文件夹下新增一个协议文件UserProtocol&#xff0c;内容很简单。 using System;public class UserProtocol {public co…

金融短信群发平台具有那些特点

金融短信群发平台的特点主要包括以下几个方面&#xff1a; 1.高效性&#xff1a;金融短信群发平台能够快速地发送大量的短信&#xff0c;使得金融信息能够迅速传达给目标客户&#xff0c;保证了信息的及时性和有效性。 2.安全性&#xff1a;金融短信群发平台对于信息的安全性非…

蓝桥杯练习系统(算法训练)ALGO-995 24点

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 24点游戏是一个非常有意思的游戏&#xff0c;很流行&#xff0c;玩法很简单&#xff1a;给你4张牌&#xff0c;每张牌上有数…

【教程】移动互联网时代的APP上架流程和要点

目录 摘要 引言 正文 一、应用商店注册 二、准备APP材料 三、打包上传App 摘要 本文将介绍移动应用程序上架的基本流程和要点&#xff0c;包括应用商店注册、APP材料准备、打包上传App、APP审核以及发布APP的详细步骤。此外&#xff0c;还会提到利用appuploder工具简化i…

Spring Cloud 实战系列之 Zuul 微服务网关搭建及配置

一、创建SpringBoot项目 用mavan搭建也可以。&#xff08;重要的是后面pom里应该引入那些依赖&#xff0c;application.yml怎么配置&#xff09; 由于开始构建项目时选择了Eureka Server&#xff0c;所以pom.xml中不需要手动添加依赖了 首先在启动类SpringcloudApplicatio…

SpringBoot项目连接Redis报错:Connection refused: no further information

今天在使用SpringBoot连接Redis时发生了报错 明明Jedis能够连接成功为什么StringRedisTemplate就不行? 然后在网上找了一下说是关闭防火墙或者修改配置文件但是都不管用 最后发现是Redis在SpringBoot3之后yml的配置方式发生了改变 相较于之前多了一个前缀, 由于我刚开始没有…

项目风险管理的前提是对风险的认知

大家好&#xff0c;我是不会魔法的兔子&#xff0c; 一枚北京执业律师&#xff0c;创建[项目管理者的法小院儿]&#xff0c;持续从法律的角度分享项目管理中的风险问题及预防&#xff0c;让项目管理者能够提早发现与解决项目执行过程中的风险&#xff0c;同时欢迎大家一起交流…

论文解读--Mutual Interference Mitigation in PMCW Automotive Radar

PMCW汽车雷达的相互干扰抑制 摘要 针对相位调制连续波(PMCW)毫米波(mmWave)汽车雷达系统中存在的相互干扰问题进行了研究。对先进驾驶辅助系统(ADAS)的需求日益增长&#xff0c;导致配备在同一频段工作的毫米波雷达系统的车辆激增&#xff0c;导致相互干扰&#xff0c;可能会降…

WPF 滑动条样式

效果图&#xff1a; 浅色&#xff1a; 深色&#xff1a; 滑动条部分代码&#xff1a; <Style x:Key"RepeatButtonTransparent" TargetType"{x:Type RepeatButton}"><Setter Property"OverridesDefaultStyle" Value"true"/&g…

枚举类、泛型、API

枚举类 枚举类可以实现单例设计模式。 枚举的常见应用场景&#xff1a;用来表示一组信息&#xff0c;然后作为参数进行传输。 泛型 API

Qt 中Qwidget相关属性

文章目录 1. QWidget 核心属性1.1 enabled1.2 geometry1.2.1 window frame 的影响 1.3 windowTitle1.4 windowIcon1.4.1 qrc的使用 1.5 windowOpacity1.6 cursor1.7 focusPolicy1.8 styleSheet 1. QWidget 核心属性 在 Qt 中, 使⽤ QWidget 类表⽰ “控件”. 像按钮, 视图, 输…

今年Android面试必问的这些技术面,2024Android常见面试题

都说程序员是在吃青春饭&#xff0c;这一点的确有一点对的成分&#xff0c;以前我不这么认为&#xff0c;但随着年龄的增长&#xff0c;事实告诉我的确是这样的&#xff0c;过了30以后&#xff0c;就会发现身体各方面指标下降&#xff0c;体力和身心上都多少有点跟不上了&#…

Node.js中的缓存策略和缓存技巧

在Node.js中&#xff0c;缓存策略和缓存技巧是提升应用性能和用户体验的关键因素。通过有效地利用缓存&#xff0c;我们可以显著减少系统资源的消耗&#xff0c;加快数据访问速度&#xff0c;从而提升整体的网站性能。本文将针对Node.js中的缓存策略和缓存技巧展开深入探讨&…

Newtonsoft.Json

目录 引言 1、简单使用 1.1、官方案例 1.2、JsonConvert 2、特性 2.1、默认模式[JsonObject(MemberSerialization.OptIn/OptOut)] 2.2、序列化为集合JsonArrayAttribute/JsonDictionaryAttribute 2.3、序列化该元素JsonProperty 2.4、忽略元素JsonIgnoreAttribute 2.5、…