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

2024-03-02 03:52

本文主要是介绍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)

这篇关于Linux时间同步(PPS、PTP、chrony)分析笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/764824

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta