我正在使用gpsd
将时间同步到GPS。当我将GPS连接到/dev/ttyUSB0
并告诉gpsd
在该端口上监听时,chrony
很高兴将其用作时间源。
gpsd -D 5 -N -n /dev/ttyUSB0
但是,一旦我尝试通过socat
传输数据(这是在生产系统中的工作方式),chrony
就不会将其用作源。即使gpsd
,cgps
和gpsmon
似乎都对他们获取的GPS数据完全满意。
这是我的袜子:
socat -d -d pty,rawer,echo=0,link=/tmp/ttyVSP0 /dev/ttyUSB0,b4800
(我的gpsd
命令与上面的命令相同,但在这种情况下,将/tmp/ttyVSP0
作为要监听的端口)。
我正在使用chronyc sources
来确认GPS是否是时间来源。
我的refclock
中的/etc/chrony/chrony.conf
行看起来像这样:
refclock SHM 0 refid GPS
答案 0 :(得分:0)
pty
端口可以通过提前返回来阻止与ntp
(因此,chrony
)进行通信,这是为了防止测试期间执行代码。
void ntpshm_link_activate(struct gps_device_t *session)
/* set up ntpshm storage for a session */
{
/* don't talk to NTP when we're running inside the test harness */
if (session->sourcetype == source_pty)
return;
if (session->sourcetype != source_pps ) {
/* allocate a shared-memory segment for "NMEA" time data */
session->shm_clock = ntpshm_alloc(session->context);
if (session->shm_clock == NULL) {
gpsd_log(&session->context->errout, LOG_WARN,
"NTP: ntpshm_alloc() failed\n");
return;
}
}