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)

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

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

相关文章

靠谱的车【华为OD机试-JAVAPythonC++JS】

题目描述 程序员小明打了一辆出租车去上班。出于职业敏感&#xff0c;他注意到这辆出租车的计费表有点问题&#xff0c;总是偏大。 出租车司机解释说他不喜欢数字4&#xff0c;所以改装了计费表&#xff0c;任何数字位置遇到数字4就直接跳过&#xff0c;其余功能都正常。 比如&…

外汇天眼:ASIC 获得针对前 Blockchain Global 董事的临时出行限制令

澳大利亚证券与投资委员会&#xff08;ASIC&#xff09;已经针对前Blockchain Global Limited&#xff08;清算中&#xff09;董事梁国&#xff08;又名Allan Guo&#xff09;获得了临时旅行限制令。这些命令在其他方面&#xff0c;阻止郭先生在2024年8月20日或进一步命令之前离…

C++数据结构与算法——二叉搜索树的属性

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

C++数据结构与算法——二叉树的属性

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

机器学习项目外包注意事项

将机器学习项目外包给外部团队或合作伙伴是一种常见的做法&#xff0c;特别是当您的团队缺乏特定领域的专业知识或资源时。以下是一些关于机器学习项目外包的要点和注意事项&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#…

【Unity】使用Unity实现双屏显示

引言 在使用Unity的时候&#xff0c;有时候会需要使用双屏显示 简单来说就是需要在两个显示器中显示游戏画面 双屏显示注意点&#xff1a; ①双屏显示需要电脑有两个显示 ②双屏显示只能用于PC端 ③不仅仅可以双屏&#xff0c;Unity最大支持8屏显示 1.相机设置 ①我们打开Un…

[VNCTF2024]-PWN:preinit解析(逆向花指令,绕过strcmp,函数修改,机器码)

查看保护&#xff1a; 查看ida&#xff1a; 这边其实看反汇编没啥大作用&#xff0c;需要自己动调。 但是前面的绕过strcmp还是要看一下的。 解题&#xff1a; 这里是用linux自带的产生随机数的文件urandom来产生一个随机密码&#xff0c;然后让我们输入密码&#xff0c;用st…

【论文笔记】An Effective Adversarial Attack on Person Re-Identification ...

原文标题&#xff08;文章标题处有字数限制&#xff09;&#xff1a; 《An Effective Adversarial Attack on Person Re-Identification in Video Surveillance via Dispersion Reduction》 Abstract 通过减少神经网络内部特征图的分散性攻击reid模型。 erbloo/Dispersion_r…

【C语言】常见的动态内存管理错误

前言 上一篇介绍了C语言中 动态内存管理函数&#xff0c;本片讲解的是 在我们使用动态内存管理时 常见的错误&#xff0c;一起来看看吧~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 1.对NULL指针的解引⽤操作 错…

深入解析Golang的encoding/ascii85库:从基础到实战

深入解析Golang的encoding/ascii85库&#xff1a;从基础到实战 引言基础知识什么是ASCII85编码&#xff1f;ASCII85编码的工作原理ASCII85编码的优点ASCII85编码的缺点 使用Golang的encoding/ascii85库引入encoding/ascii85包ASCII85编码ASCII85解码实战示例小结 进阶技巧和最佳…

Vue3(pinia) 整合 SpringWebsocket链接url动态传参

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;java专栏 &#x1f4e7;如果文章知识点有错误的地方&#xff0c;…

轧辊品质检测 直线度测量仪满足多种数据监测!

轧辊有带钢轧辊、型钢轧辊、线材轧辊、开坯辊、粗轧辊、精轧辊、破鳞辊、穿孔辊、平整辊、钢轧辊、铸铁轧辊、硬质合金轧辊、陶瓷轧辊等&#xff0c;但不管哪种类型的轧辊&#xff0c;对直线度测量都可以通过直线度测量仪来实现&#xff0c;这种测量仪检测方便&#xff0c;数据…

现货黄金贵金属投资难不难做?

现货黄金投资的难度因人而异&#xff0c;它涉及市场知识、分析能力、资金管理和心理素质等多个方面&#xff0c;因此不能一概而论。但是&#xff0c;如果投资者能够系统地学习相关知识&#xff0c;并在实践中不断积累经验&#xff0c;那么现货黄金投资并非难以驾驭。 先了解现货…

《汇编语言》- 读书笔记 - 第13章-int 指令

《汇编语言》- 读书笔记 - 第13章-int 指令 13.1 int 指令13.2 编写供应用程序调用的中断例程中断例程&#xff1a;求一 word 型数据的平方主程序中断处理程序执行效果 中断例程&#xff1a;将一个全是字母&#xff0c;以0结尾的字符串&#xff0c;转化为大写主程序中断处理程序…

作业1-224——P1927 防护伞

思路 遍历一下找到两点间的最远距离&#xff0c;直接公式算结果&#xff0c;控制输出位数 参考代码 #include<iostream> #include<iomanip> #include<cmath> using namespace std; int main() { int n; cin>>n; int x[n],y[n]; do…

hive报错:FAILED: NullPointerException null

发现问题 起因是我虚拟机的hive不管执行什么命令都报空指针异常的错误 我也在网上找了很多相关问题的资料&#xff0c;发现都不是我这个问题的解决方法&#xff0c;后来在hive官网上与hive 3.1.3版本相匹配的hadoop版本是3.x的版本&#xff0c;而我的hadoop版本还是2.7.2的版本…

5G 网络建设【华为OD机试-JAVAPythonC++JS】

题目描述 现需要在某城市进行5G网络建设&#xff0c;已经选取N个地点设置5G基站&#xff0c;编号固定为1到N&#xff0c;接下来需要各个基站之间使用光纤进行连接以确保基站能互联互通&#xff0c;不同基站之间架设光纤的成本各不相同&#xff0c;且有些节点之间已经存在光纤相…

WIN10 无密码自动登录

1、家里重装了一下WIN10系统&#xff0c;第一次登陆居然用了微软网站账号&#xff0c;结果密码忘记了&#xff0c;后面只能用PIN码登陆系统。 2、需要登录微软的网站修改密码&#xff1a; Microsoft account | Sign In or Create Your Account Today – Microsoft 3、在运行…

赵本山与高秀敏夫妇本想找范伟要那1200元电视机垫款,却不好意思向范伟开口--小品《面子》(中1)的台词

赵本山与高秀敏夫妇本想找范伟要那1200元电视机垫款&#xff0c;却不好意思向范伟开口 --小品《面子》&#xff08;中1&#xff09;的台词 表演者&#xff1a;赵本山 高秀敏 范伟 &#xff08;接上&#xff09; 高秀敏&#xff1a;咱俩抓紧提事啊 赵本山&#xff1a;不着急…

div在vue的组件之中如何设置这个字体的颜色和样式大小

在Vue组件中设置<div>的字体颜色和样式大小可以通过两种主要方式实现&#xff1a;通过内联样式&#xff08;inline styles&#xff09;或者通过CSS类&#xff08;CSS classes&#xff09;。 使用内联样式 在Vue模板中直接在元素上使用style属性来设置样式。这种方法适用…