启动后 chrony 需要很多分钟来读取参考时钟

启动后 chrony 需要很多分钟来读取参考时钟

我希望通过 UBLOX GNSS 模块向没有互联网的 Raspberry Pi 4 提供精确时间,该模块将 NMEA 语句发送到 ,/dev/serial0并将每秒脉冲 (PPS) 信号发送到/dev/pps0

所有这些信息都会在启动后立即到达,并通过gpsmon -n和进行验证sudo ppscheck /dev/pps0。然而,chrony需要很多分钟来获取信息。

我已经通过使用内容chrony创建进行了配置:/etc/chrony/conf.d/gps.conf

refclock SHM 0 refid NMEA offset 0.1 precision 0.2 poll 0
refclock PPS /dev/pps0 refid PPS lock NMEA poll 0 trust prefer
log refclocks

我对配置文件中的选项进行了很多实验:延迟、偏移、精度、信任、noselect、偏好和锁定,但无济于事。

我已经离开了/etc/chrony/chrony.conf原来的样子:

# Welcome to the chrony configuration file. See chrony.conf(5) for more
# information about usable directives.

# Include configuration files found in /etc/chrony/conf.d.
confdir /etc/chrony/conf.d

# Use Debian vendor zone.
pool 2.debian.pool.ntp.org iburst

# Use time sources from DHCP.
sourcedir /run/chrony-dhcp

# Use NTP sources found in /etc/chrony/sources.d.
sourcedir /etc/chrony/sources.d

# This directive specify the location of the file containing ID/key pairs for
# NTP authentication.
keyfile /etc/chrony/chrony.keys

# This directive specify the file into which chronyd will store the rate
# information.
driftfile /var/lib/chrony/chrony.drift

# Save NTS keys and cookies.
ntsdumpdir /var/lib/chrony

# Uncomment the following line to turn logging on.
#log tracking measurements statistics

# Log files location.
logdir /var/log/chrony

# Stop bad estimates upsetting machine clock.
maxupdateskew 100.0

# This directive enables kernel synchronisation (every 11 minutes) of the
# real-time clock. Note that it can’t be used along with the 'rtcfile' directive.
rtcsync

# Step the system clock instead of slewing it if the adjustment is larger than
# one second, but only in the first three clock updates.
makestep 1 3

# Get TAI-UTC offset and leap seconds from the system tz database.
# This directive must be commented out when using time sources serving
# leap-smeared time.
leapsectz right/UTC

问题是:重新启动后,chrony无法从gpsdPPS 接收数据。我已经通过运行chronyc sources(它在列中显示了连字符LastRx。)和sudo tail -f /var/log/chrony/refclocks.log(那里没有更新)来验证了这一点。

几分钟后 (5-20),chrony 开始从gpsdPPS 获取时间,并在几秒钟后更新系统时间(以与上一段中解释的方式相同的方式进行验证)。有时会有所不同,chrony在从 获取时间后需要多花几分钟来阅读 PPS gpsd。我尝试过多次重启,但结果总是一样。来自 GNSS 模块的数据会立即传入,并且可以gpsmon -nppscheck启动后立即访问。那么,为什么chrony需要5分钟以上才能得到同样的信息呢?

顺便说一下,用 重置系统时间后sudo date +%T -s "12:00:00"sudo systemctl reastart chrony没有问题:chrony在几秒钟内更新系统时间。

我尝试进行故障排除的一件事是运行sudo ntpshmmon.它从启动时就显示 NTP2 和 NTP3 样本,但 NTP0 样本仅在 chrony 开始连接到参考时钟的同时显示。这应该有助于缩小原因,但我不知道如何从那里继续调试。

这个问题改编自我关于 Raspberry Pi Stack Exchange 的问题

相关内容