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

news2024/11/15 9:22:46

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.coloradmin.cn/o/1481752.html

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

相关文章

C++ //练习 10.16 使用lambda编写你自己版本的biggies。

C Primer&#xff08;第5版&#xff09; 练习 10.16 练习 10.16 使用lambda编写你自己版本的biggies。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /*******************************************************************…

14:00面试,14:07就出来了,问的问题过于变态了。。。

我从一家小公司转投到另一家公司&#xff0c;期待着新的工作环境和机会。然而&#xff0c;新公司的加班文化让我有些始料未及。虽然薪资相对较高&#xff0c;但长时间的工作和缺乏休息使我身心俱疲。 就在我逐渐适应这种高强度的工作节奏时&#xff0c;公司突然宣布了一则令人…

Typora快捷键设置详细教程(内附每个步骤详细截图)

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

SpringBoot整合MySQL和Druid

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:SpringBoot整合MySQL和Druid 📚个人知识库: Leo知识库,欢迎大家访问 目录 …

HarmonyOS—开发云数据库

您可以在云侧工程下开发云数据库资源&#xff0c;包括创建对象类型、在对象类型中添加数据条目、部署云数据库。 创建对象类型 对象类型&#xff08;即ObjectType&#xff09;用于定义存储对象的集合&#xff0c;不同的对象类型对应的不同数据结构。每创建一个对象类型&#…

NVMe开发——PCIe复位

简介 PCIe中有4种复位机制&#xff0c;早期的3种被称为传统复位(Conventional Reset)。传统复位中的前2种又称为基本复位(Fundamental Resets)&#xff0c;分别为冷复位(Cold Reset)&#xff0c;暖复位(Warm Reset)。第3种复位为热复位(Hot Reset)。第4种复位被称为功能级复位…

docker 基础(二)

常见命令 Docker最常见的命令就是操作镜像、容器的命令&#xff0c;详见官方文档&#xff1a;https://docs.docker.com/ 数据卷 命令说明文档地址docker volume create创建数据卷docker volume createdocker volume ls创建数据卷docker volume lsdocker volume rm查看所有数…

【力扣白嫖日记】585.2016年的投资

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 585.2016年的投资 表&#xff1a;Person 列名类型pidinttiv_2015floattiv_2016floatlatfloatlonfloat pid …

c++之运算符,程序流程结构

运算符 作用&#xff1a;用于执行代码的运算 1算术运算符 作用&#xff1a;用于处理四则运算 下面我们用代码展示&#xff1a; #include<iostream> using namespace std; int main() {//加减乘除int a1 10;int b1 3;cout <<" a1 b1 "<< a1…

广汽埃安工厂:蔚来汽车的造车工厂有哪些?

具体来说&#xff0c;理想汽车目前在常州仅有一家汽车制造工厂。 一期项目于2017年12月竣工&#xff0c;2019年12月投产&#xff0c;年产能10万辆/年。 同时&#xff0c;正在规划二期工程。 产能将增至20万辆/年。 此外&#xff0c;理想还计划接管现代汽车在北京顺义的第一家工…

阿里云短信验证笔记

1.了解阿里云的权限操作 进入AccessKey管理 选择子用户 创建用户组和用户 先创建用户组&#xff0c;建好再进行权限分配 添加短信管理权限 创建用户 创建好后的id和密码在此处下载可以得到 2.开通阿里云短信服务 进行申请&#xff0c;配置短信模板 阿里云短信API文档 短信服务…

【蓝牙协议栈】【蓝牙分析工具】Ellisys 分析HCI Log和btsnoop Log

1.Ellisys 介绍 Ellisys 的 air log sniffer设备要二三十万,一般不是专业开发蓝牙的估计不会选择使用这个工具,但是即使我们不买这个设备,安装了 Ellisys 的工具也可以看 btsnoop 的,下面我就一步一步教你通过 Ellisys 来打开 btsnoop。 1.1 首先打开 APP(Ellisys 不能直…

零基础学编程,中文编程工具之进度标尺构件的编程用法

零基础学编程&#xff0c;中文编程工具之进度标尺构件的编程用法 一、前言 今天给大家分享的中文编程开发语言工具 进度条构件的用法。 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载——…

Mybatis | Mybatis的核心配置

目录: Mybatis的核心配置 :一、MyBatis的 “核心对象”1.1 SqlSessionFactory1.2 SqlSession :SqlSession对象中的操作数据库的方法 :\<T> T selectOne ( String statement )\<T> T selectOne( String statement , Object parameter )\<E> List\<E> se…

Stable Diffusion 3突然发布!与Sora同架构,一切都更逼真了

文字终于不乱码了&#xff01; 足足酝酿一年之多&#xff0c;相比上一代一共进化了三大能力。 来&#xff0c;直接上效果&#xff01; 首先&#xff0c;是开挂的文字渲染能力。 且看这黑板上的粉笔字&#xff1a; Go Big or Go Home &#xff08;不成功便成仁&#xff09;&…

2023中国PostgreSQL数据库生态大会:洞察前沿趋势,探索无限可能(附核心PPT资料下载)

随着数字化浪潮的推进&#xff0c;数据库技术已成为支撑各行各业数字化转型的核心力量。2023中国PostgreSQL数据库生态大会的召开&#xff0c;无疑为业界提供了一个深入交流、共同探索PostgreSQL数据库技术未来发展趋势的平台。本文将带您走进这场盛会&#xff0c;解析大会的亮…

xsslabs第六关

看一下源码 <!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv"content-type" content"text/html;charsetutf-8"> <script> window.alert function() { confirm("完成的不错&#xff01;…

云呐智能运维包含哪些内容?运维未来的发展方向是什么?

智能运维&#xff08;AIOps&#xff09;是一种使用人工智能应用程序来调节IT操作和维护的实践方式。它结合了大数据和机器学习技术&#xff0c;旨在自动化和改进IT操作和维护任务&#xff0c;如故障检测、因果分析和自动故障修复。以下是智能操作和维护的具体内容、挑战和解决方…

无人售货机管理系统,让零售更智能,更高效

无人自动售货系统强大技术核心优势打造智能售货机系统&#xff0c;其引入物联网、大数据、 云计算等新一代信息技术与自动售货机完美融合&#xff0c;实现传统售货机向智能售货机转型升级。 1.市场前景 据前瞻产业研究院报告显示&#xff0c;中国无人零售行业市场规模自2017年…

Windows的Docker-Desktop安装与问题总结

目录 Docker-Desktop安装步骤 环境配置 Docker-Desktop安装问题总结 问题1&#xff1a;docker-desktop setting界面一直加载转圈 问题2&#xff1a;docker镜像的存储位置变更&#xff08;防止C盘空间不足&#xff09; 参考文献&#xff1a; Docker-Desktop安装步骤 环境…