嵌入式设备时间同步(gpsd pps chrony 校时)

博客介绍了时间同步方案,包括统一时钟源(PPS + NMEA、PTP)、硬件同步和软件同步。详细讲解了chrony的功能与使用,以及gpsd + chrony + pps实现更高精度时间同步的方法,还提及比较两个设备时间差的命令,如date、ntpdate等。

二、时间同步方案

时间同步包含哪些内容?

时间同步可分为几部分的内容:统一时钟源硬件同步软件同步

1. 统一时钟源

1.1 PPS + NMEA

GPS能够从卫星获得高精度的时钟信号,因此通常作为整个系统的时钟源。常规的GPS单元都支持输出精确到毫秒的秒脉冲信号PPS和包含年月日时分秒信息的NMEA指令,通过PPS和NMEA的组合就能够实现对激光雷达或主机的毫秒级时钟同步。
PPS+NMEA的优点是协议简单,容易实现;缺点是必须基于RS232。多个设备之间实现同步比较困难。

1.2 PTP(IEEE 1588或IEEE 802.1AS)

PTP(Precision Time Protocol,1588 V2)是基于以太网的高精度时钟同步协议,能够实现以太网中多个从节点(各种传感器)与主节点(主机)之间的亚微秒级时钟同步,前提是所有节点之间都通过以太网互联,交换机支持PTP协议,并且每个节点都支持PTP协议。

与PTP同时出现的还有一种NTP,即网络时间协议,不同的是PTP是在硬件级实现的,NTP是在应用层级别实现的 。

2. 硬件同步

3. 软件同步

在这里插入图片描述

三、chrony 介绍和使用

3.1 chrony 介绍

chrony是网络时间协议(NTP)的通用实现。它可以将系统时钟与NTP服务器、参考时钟(如GPS接收器)以及使用手表和键盘的手动输入同步。它还可以作为NTPv4(RFC 5905)服务器和对等端操作,为网络中的其他计算机提供时间服务。

通过互联网同步的两台机器之间的典型精度在几毫秒内;在局域网上,精度通常为几十微秒。通过硬件时间戳或硬件参考时钟,亚微秒精度可能是可能的。

chrony中包含两个程序,chronyd是一个可以在启动时启动的守护进程,chronyc是一个命令行界面程序,可以用来监视chronyd的性能,并在其运行时更改各种操作参数。

chrony支持的功能

  • NTP校时:作为ntp client向ntp server进行校时。
  • PPS(脉冲秒信号)校时:通过连接GPS接收器或其他高精度时钟设备来获取脉冲秒信号。
  • RTC(实时时钟)校时:Chrony可以通过与计算机上的实时时钟设备进行通信,将计算机的时钟与实时时钟进行同步。
  • NMEA 校时:通过与NMEA设备(如GPS接收器)通信,获取到NMEA数据,并将其用于校正计算机时钟。
  • 作为校时服务器:给其他设备校时。

注意:实际使用时根据chrony版本查阅帮助文档,这里使用的版本是chrony 2.4。

3.2 chrony 使用示例

使用步骤:

  1. 配置好chrony.conf文件
  2. 启动chronyd
  3. 选择性设置添加自启动
  4. chronyc查看状态信息

示例1:ntp 客户端

server ntp1.aliyun.com trust minpoll 2 maxpoll 4 polltarget 30
server 10.234.111.138 trust minpoll 2 maxpoll 4 polltarget 30
makestep 0.1 -1
driftfile /var/lib/chrony/drift
rtcsync

示例1:gps校时,同时作为ntp服务器端给其他设备校时

# gpsd and pps
refclock SHM 0 poll -2 refid GPS precision 1e-1 offset 0.9999 delay 0.2
refclock PPS /dev/pps1 lock NMEA refid PPS

makestep 0.1 -1
driftfile /var/lib/chrony/drift
rtcsync

# 作为校时服务器
allow all
local stratum 10

3.3 chrony.conf

示例1-faq

server ntp.local minpoll 2 maxpoll 4 polltarget 30

在NTP服务器配置中,minpollmaxpoll参数用于限制NTP客户端发送时间同步请求的频率。这两个参数控制了NTP客户端在连续的时间同步请求之间等待的最小和最大时间间隔。

minpoll参数指定了NTP客户端发送时间同步请求的最小时间间隔,单位为2的幂次方的秒。在你的配置中,minpoll的值为2,表示最小时间间隔为2的2次方,即4秒。

maxpoll参数指定了NTP客户端发送时间同步请求的最大时间间隔,单位同样为2的幂次方的秒。在你的配置中,maxpoll的值为4,表示最大时间间隔为2的4次方,即16秒。

polltarget参数表示NTP客户端向服务器发送请求的时间间隔的目标值,单位为秒。在你的配置中,polltarget的值为30,表示NTP客户端希望每30秒发送一次时间同步请求。

需要注意的是,polltarget参数是以秒为单位的,而不是2的幂次方。因此,polltarget的值并不会超过maxpoll参数的限制。在你的配置中,即使maxpoll的值为4(即16秒),polltarget的值也仍然是30秒。这样设置的目的是为了在时间同步的准确性和服务器负载之间取得一个平衡。

综上所述,NTP客户端的实际时间同步间隔取决于服务器响应和网络延迟等因素,但会受到minpollmaxpoll参数的限制。在你的配置中,NTP客户端将以30秒为目标值发送时间同步请求,但实际的时间间隔可能会在4秒到16秒之间变化。

示例2-faq

server ntp.local minpoll 0 maxpoll 0 xleave
hwtimestamp eth0

3.4 chronyd

3.5 chronyc

chronyc是一个命令行界面程序,可用于监视chronyd的性能,并在运行时更改各种操作参数。

  • chronyc tracking:跟踪命令显示有关系统时钟性能的参数。
  • chronyc sources
    root@imx6qdlsabresd:/app/log#  chronyc tracking
    Reference ID    : 127.127.1.1 ()
    Stratum         : 10
    Ref time (UTC)  : Thu Sep 07 23:14:28 2023
    System time     : 14539.303710938 seconds fast of NTP time
    Last offset     : -0.271399736 seconds
    RMS offset      : 105085.718750000 seconds
    Frequency       : 499789.469 ppm fast
    Residual freq   : +0.000 ppm
    Skew            : 0.000 ppm
    Root delay      : 0.000000 seconds
    Root dispersion : 0.000001 seconds
    Update interval : 0.1 seconds
    Leap status     : Normal
    

chrony如何查看校时精度?

在上面的输出中,您可以看到Last offset和RMS offset字段,它们表示最近一次同步时钟的偏移量和持续的偏移量的均方根。这些值越小,校时精度越高。另外,您还可以关注Frequency字段,它表示系统时钟相对于NTP服务器时钟的频率偏移。

请注意,校时精度的度量单位是秒,小数点后的数字表示精度的小数部分。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值