Синхронизация времени от GPS модуля

Материал из Wiren Board
(перенаправлено с «Получение точного времени через GPS/Glonass»)

Это утверждённая версия страницы. Она же — наиболее свежая версия.

Модуль GPS можно использовать в качестве источника точного времени.

Работает это так: локальный демон gpsd получает время с GPS-устройства и отдаёт его демону ntpd, который дальше работает с временем стандартным способом.

Настройка синхронизации времени контроллера с GPS:

  1. Установите необходимые пакеты
    apt install ntp gpsd gpsd-clients
    
  2. В конфигурационном файле gspd укажите порт к которому подключено устройство. А также установите параметр GPSD_OPTIONS="-n", это нужно чтобы синхронизация со спутниками начинала выполняться сразу после запуска.
    nano /etc/default/gpsd
    
    DEVICES="/dev/ttyMOD4"
    GPSD_OPTIONS="-n"
    
  3. Настройте ntpd. Для этого откройте конфигурационный файл:
    nano /etc/ntp.conf
    
    И дополните его следующим образом:
    driftfile /var/lib/ntp/ntp.drift
    restrict default nomodify notrust
    disable auth
    
    # local
    server 127.127.1.0
    fudge 127.127.1.0 stratum 10
    
    # GPS
    server 127.127.28.0 minpoll 4 maxpoll 4
    fudge 127.127.28.0 flag1 1 time1 0.35 refid GPS stratum 2
    tinker panic 0 stepout 1
    # PPS
    server 127.127.28.2 minpoll 4 maxpoll 4 prefer
    fudge 127.127.28.2 refid PPS stratum 1
    
    # Local users may interrogate the ntp server more closely.
    restrict 127.0.0.1
    restrict 127.127.1.0
    restrict 127.127.20.0
    restrict 127.127.22.0
    restrict 127.127.22.2
    restrict 127.127.28.0
    restrict 127.127.28.1
    restrict 127.127.28.2
    
  4. Установите запуск gpsd после wb-hwconf-manager.service. Это нужно, чтобы gpsd запускался после перезагрузки контроллера автоматически.
    Откройте файл /lib/systemd/system/gpsd.service в текстовом редакторе:
    nano  /lib/systemd/system/gpsd.service
    
    И приведите его к следующему виду:
    [Unit]
    Description=GPS (Global Positioning System) Daemon
    Requires=gpsd.socket
    # Needed with chrony SOCK refclock
    # After=chronyd.service
    After=wb-hwconf-manager.service
    
    [Service]
    EnvironmentFile=-/etc/default/gpsd
    ExecStart=/usr/sbin/gpsd -N $GPSD_OPTIONS $DEVICES
    
    [Install]
    Also=gpsd.socket
    
    Создайте ссылку для systemd:
    ln -s /lib/systemd/system/gpsd.service /etc/systemd/system/multi-user.target.wants/
    
    Перезапустите systemctl:
    systemctl daemon-reload
    
    Затем перезапустите gpsd:
    systemctl restart gpsd
    
  5. После этого можно проверить работу NTP сервера командой
    ntpq -p
    
    В результате должен получиться такой вывод:
         remote           refid      st t when poll reach   delay   offset  jitter
    ==============================================================================
     LOCAL(0)        .LOCL.          10 l  388   64  100    0.000    0.000   0.002
    *SHM(0)          .GPS.            0 l    7   16  377    0.000    9.404  20.126
    

Посмотреть ошибки и статус GPS-модуля можно командой

ntpq -c clockvar

Узнать статус демонов gpsd и ntp

systemctl status gpsd
systemctl status ntp

Полезные ссылки