Почему не синхронизируется синхронизация с GPS, когда последовательные данные проходят через socat? - PullRequest
0 голосов
/ 01 апреля 2019

Я использую 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

1 Ответ

0 голосов
/ 01 апреля 2019

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

Обнаружено благодаря это сообщение об ошибке

...