我希望通过 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
无法从gpsd
PPS 接收数据。我已经通过运行chronyc sources
(它在列中显示了连字符LastRx
。)和sudo tail -f /var/log/chrony/refclocks.log
(那里没有更新)来验证了这一点。
几分钟后 (5-20),chrony 开始从gpsd
PPS 获取时间,并在几秒钟后更新系统时间(以与上一段中解释的方式相同的方式进行验证)。有时会有所不同,chrony
在从 获取时间后需要多花几分钟来阅读 PPS gpsd
。我尝试过多次重启,但结果总是一样。来自 GNSS 模块的数据会立即传入,并且可以gpsmon -n
在ppscheck
启动后立即访问。那么,为什么chrony
需要5分钟以上才能得到同样的信息呢?
顺便说一下,用 重置系统时间后sudo date +%T -s "12:00:00"
,sudo systemctl reastart chrony
没有问题:chrony
在几秒钟内更新系统时间。
我尝试进行故障排除的一件事是运行sudo ntpshmmon
.它从启动时就显示 NTP2 和 NTP3 样本,但 NTP0 样本仅在 chrony 开始连接到参考时钟的同时显示。这应该有助于缩小原因,但我不知道如何从那里继续调试。