从 gpsd 设置 ntp 时间

从 gpsd 设置 ntp 时间

我正在尝试配置 ntpd 以从 gps 接收器获取时间(BU-353S4)但出现了一些错误。

我在 Arch Linux Arm 上使用 ntpd 4.2.8.p6-3 和 gpsd 3.16-2。我一直在关注arch wiki 上的教程但它没有任何故障排除信息。

gpsd 日志包含以下条目

gpsd:ERROR: response: {"class":"ERROR","message":"No such device as /dev/gps0"}\x0d\x0a

每 6 秒左右重复一次,除了开始、停止消息外没有其他内容。

/var/log/ntp.log 包含:

Listen and drop on 0 v6wildcard [::]:123
Listen and drop on 1 v4wildcard 0.0.0.0:123
Listen normally on 2 lo 127.0.0.1:123
Listen normally on 3 eth0 172.10.10.75:123
Listen normally on 4 lo [::1]:123
Listen normally on 5 eth0 [fe80::ba27:ebff:feba:af05%2]:123
Listening on routing socket on fd #22 for interface updates
GPSD_JSON(0): GPSD revision=3.16 release=3.16 protocol=3.11

ntpq -p输出

    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 GPSD_JSON(0)    .GPS.            0 l    -   64    0    0.000    0.000   0.000

/etc/ntp.conf包含

restrict 127.0.0.1
restrict ::1

restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery

# GPSD config
server 127.127.46.0
fudge 127.127.46.0 time1 0.0 time2 0.0 refid GPS

driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntp.log

然而sudo gpscat /dev/gps0输出(在我未经训练的眼睛看来)有效的 nmea gps 信息,并且cgps所有gpsmon信息都得到修复并输出有用的信息。

/dev/ttyUSB0具有权限crw-rw---- 1 root uucp 188gpsd正在用户下运行nobodyntpd以用户身份运行ntp

答案1

gpsd以 nobody 的身份运行,因此没有读取权限/dev/ttyUSB0,这正是它所抱怨的。

如果您将nobody用户添加到组uucp,应该可以解决问题,但不建议这样做。或者您可以将模式更改/dev/ttyUSB0为 666,这稍微不那么可怕。最好的方法是编辑gpsd启动配置,使其以其他用户的身份运行,可能是gpsd,并使的主要组/dev/ttyUSB0拥有gpsd该组(也可能是gpsd)。

假设gpsd一旦它可以正确读取 GPS 就设置时间,这将能够ntpd宣传时间,知道(因为您已经配置了它)它是从 stratum-0(ntp)源获取的。

答案2

请注意,您必须“在链接的服务器上运行 gpsd /dev/gps0,以便 GPSD_JSON 行按预期显示”。因此,请检查您的 GPSD 是否在运行/dev/gps0。我的 GPSD 在我的服务器上运行,在/dev/ttyS0我将 DEVICES 更改为 后,NTPd 可以成功链接 GPSD。/dev/gps0/etc/default/gpsd

相关内容