当串行数据流经socat时,为什么不及时同步到GPS?

时间:2019-04-01 18:22:47

标签: gps socat

我正在使用gpsd将时间同步到GPS。当我将GPS连接到/dev/ttyUSB0并告诉gpsd在该端口上监听时,chrony很高兴将其用作时间源。

gpsd -D 5 -N -n /dev/ttyUSB0

但是,一旦我尝试通过socat传输数据(这是在生产系统中的工作方式),chrony就不会将其用作源。即使gpsdcgpsgpsmon似乎都对他们获取的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

1 个答案:

答案 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;
        }
    }

感谢this bug report