|
|
Строка 1: |
Строка 1: |
| '''Статья носит рекомендательный характер и не предназначена для конечных пользователей.''' | | =Синхронизация времени от GPS модуля= |
| | Модуль GPS можно использовать в качестве источника точного времени. Для этого нужно передать время из модуля в демон '''ntpd'''. Для этого используется локальный демон '''gpsd''', который получает время у GPS-модуля и передает его в '''ntpd'''. Чтобы настроить синхронизацию выполните следующие действия. |
|
| |
|
| Рабочий вариант от freemanon https://support.wirenboard.com/t/nastrojka-modulya-gps/5353/9
| | #Установите необходимые пакеты |
| | #:<syntaxhighlight lang="bash"> |
| | apt install ntp gpsd gpsd-clients |
| | </syntaxhighlight> |
| | #В конфигурационном файле gspd укажите порт к которому подключено устройство. А также установите параметр <code>GPSD_OPTIONS="-n"</code>, это нужно чтобы синхронизация со спутниками начинала выполняться сразу после запуска. |
| | #:<syntaxhighlight lang="bash"> |
| | nano /etc/default/gpsd |
| | </syntaxhighlight> |
| | #:<syntaxhighlight lang="bash"> |
| | DEVICES="/dev/ttyMOD4" |
| | GPSD_OPTIONS="-n" |
| | </syntaxhighlight> |
| | #Настройте ntpd. Для этого откройте конфигурационный файл: |
| | #:<syntaxhighlight lang="bash"> |
| | nano /etc/ntp.conf |
| | </syntaxhighlight> |
| | #:И дополните его следующим образом: |
| | #:<syntaxhighlight lang="bash"> |
| | driftfile /var/lib/ntp/ntp.drift |
| | restrict default nomodify notrust |
| | disable auth |
|
| |
|
| Варианты с NMEA Reference Clock Driver (с драйвером 20 - 127.127.20.0) так и не заработали, работающее решение нашлось здесь https://blog.rapid7.com/2015/07/27/adding-a-gps-time-source-to-ntpd/. Используется SHM Reference Clock (с драйвером 28 - 127.127.28.0)
| | # 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 |
|
| |
|
| 1. ставим пакеты
| | # Local users may interrogate the ntp server more closely. |
| | | restrict 127.0.0.1 |
| apt install ntp gpsd gpsd-clients
| | restrict 127.127.1.0 |
| | | restrict 127.127.20.0 |
| 2. настраиваем gpsd
| | restrict 127.127.22.0 |
| | | restrict 127.127.22.2 |
| /etc/default/gpsd:
| | restrict 127.127.28.0 |
| | | restrict 127.127.28.1 |
| DEVICES="/dev/ttyMOD3"
| | restrict 127.127.28.2 |
| GPSD_OPTIONS="-n"
| | </syntaxhighlight> |
| | | #Установите запуск '''gpsd''' после '''wb-hwconf-manager.service'''. Это нужно, чтобы '''gpsd''' запускался после перезагрузки контроллера автоматически. |
| 3. настраиваем ntpd
| | #:Откройте файл <code>/lib/systemd/system/gpsd.service</code> в текстовом редакторе: |
| на всякий случай оставил локальный сервер со stratum 10
| | #:<syntaxhighlight lang="bash"> |
| | | nano /lib/systemd/system/gpsd.service |
| /etc/ntp.conf:
| | </syntaxhighlight> |
| | | #:И приведите его к следующему виду: |
| # local
| | #:<syntaxhighlight lang="bash"> |
| server 127.127.1.0
| |
| fudge 127.127.1.0 stratum 10
| |
|
| |
| # GPS
| |
| server 127.127.28.0 minpoll 4 maxpoll 4 prefer
| |
| fudge 127.127.28.0 time1 0.0 refid GPS
| |
| | |
| driftfile /var/lib/ntp/ntp.drift
| |
| restrict default nomodify notrust
| |
| disable auth
| |
| | |
| 4. проверяем работу
| |
| | |
| root@wirenboard-AP2OY26Z:~# 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
| |
| | |
| | |
| '''Исправление запуска gpsd''' | |
| После перезагрузки gpsd автоматически не стартует и соответственно ntp не синхронизируется от спутника. Но если запустить клиента gpsd, например, выполнить команду cgps, то после этого служба gpsd начинает стартовать и время синхронизируется от спутника.
| |
| Оказывается это известный баг:
| |
| | |
| https://gpsd.gitlab.io/gpsd/troubleshooting.html
| |
| | |
| Командой <syntaxhighlight lang="bash"> /etc/init.d/gpsd status </syntaxhighlight> можно увидеть текущий статус. Должен быть active (running) и не должно быть ошибок при загрузке.
| |
| Для корректной работы нужно настроить systemd на запуск gpsd при загрузке:
| |
| | |
| Корректируем /lib/systemd/system/gpsd.service. По умолчанию gpsd стартует после службы chronyd.service, меняем на запуск после wb-hwconf-manager.service, чтобы gpsd стартовала после инициализации GPS-модуля.
| |
| <syntaxhighlight lang="bash"> | |
| [Unit] | | [Unit] |
| Description=GPS (Global Positioning System) Daemon | | Description=GPS (Global Positioning System) Daemon |
Строка 69: |
Строка 67: |
| Also=gpsd.socket | | Also=gpsd.socket |
| </syntaxhighlight> | | </syntaxhighlight> |
| | | #: |
| Создаем ссылку для systemd
| | #:Создайте ссылку для systemd: |
| <syntaxhighlight lang="bash"> | | #:<syntaxhighlight lang="bash"> |
| ln -s /lib/systemd/system/gpsd.service /etc/systemd/system/multi-user.target.wants/ | | ln -s /lib/systemd/system/gpsd.service /etc/systemd/system/multi-user.target.wants/ |
| </syntaxhighlight> | | </syntaxhighlight> |
| Перезапускаем systemctl
| | #:Перезапустите systemctl: |
| <syntaxhighlight lang="bash"> | | #:<syntaxhighlight lang="bash"> |
| systemctl daemon-reload | | systemctl daemon-reload |
| | </syntaxhighlight> |
| | #После этого можно проверить работу NTP сервера командой |
| | #:<syntaxhighlight lang="bash"> |
| | ntpq -p |
| | </syntaxhighlight> |
| | #:В результате должен получиться такой вывод: |
| | #:<syntaxhighlight lang="bash"> |
| | 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 |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| Возможно в /etc/default/gpsd нужно поставить USBAUTO=“false”, я сейчас ставлю, но не уверен влияет ли это на что-то или нет.
| | Посмотреть ошибки и статус GPS-модуля можно командой |
| | <syntaxhighlight lang="bash"> |
| | ntpq -c clockvar |
| | </syntaxhighlight> |
|
| |
|
| | Узнать статус демонов gpsd и ntp |
| | <syntaxhighlight lang="bash"> |
| | /etc/init.d/gpsd status |
| | /etc/init.d/ntp status |
| | </syntaxhighlight> |
|
| |
|
| | | ==Полезные ссылки== |
| | | *[https://support.wirenboard.com/t/nastrojka-modulya-gps/5353 Обсуждение настройки GPS-модуля на портале тех. поддержки] |
| '''Устаревшее'''
| | *[https://www.rapid7.com/blog/post/2015/07/27/adding-a-gps-time-source-to-ntpd/ Статья про настройку gpsd (англ.)] |
| Инструкция от пользователя.
| | *[https://www.lammertbies.nl/comm/info/gps-time Полезная статья про синхронизацию времени по GPS (англ.)] |
| Что сделать для сборки правильного нтп:
| | *[http://www.ntp.org/ Официальный сайт протокола NTP] |
| | |
| Поставить libcap-dev – без него не будет работать нтп с настройками, которые по умолчанию в системе и после ребута все сломается и придется через дебаг консоль убирать из загрузки нтп.
| |
| Через apt-get не получилось – ставил через dpkg брал тут: https://packages.debian.org/wheezy/armel/libcap-dev/download
| |
| Качаем отсюда нпт http://www.ntp.org/downloads.html (Production 4.2.8p6)
| |
| tar zxvf ntp-4.2.8p6.tar.gz
| |
| cd ntp-4.2.8p6
| |
| ./configure —enable-linuxcaps # для этого и нужен libcap-dev
| |
| make
| |
| make install
| |
| service ntp stop
| |
| cp /usr/local/bin/ntp* /usr/bin/ && sudo cp /usr/local/sbin/ntp* /usr/sbin/ #заменяем системный нтп новым улучшенным
| |
| | |
| Далее настраиваем нтп – надо создать алиалсы для драйвера 20 (https://www.eecis.udel.edu/~mills/ntp/html/drivers/driver20.html)
| |
| | |
| vi /etc/udev/rules.d/10-gps.rules
| |
| | |
| KERNEL=="ttyAPP2",NAME="%k",SYMLINK+="gps0",MODE="0660",GROUP="ntp"
| |
| | |
| KERNEL==“pps0",NAME="%k",SYMLINK+="gpspps0",MODE="0660",GROUP="ntp"
| |
| | |
| Можно еще использовать драйвер 22 – нтп + драйвер 20 (нмеа) или 28 (гпсд)
| |
| Но 20 и так умеет ппс (flag1 1) и экспериментально я остановился на нем. (https://www.eecis.udel.edu/~mills/ntp/html/refclock.html)
| |
| | |
| Правим /etc/ntp.conf:
| |
| | |
| server 127.127.20.0 mode 17 minpoll 4 maxpoll 4 iburst prefer
| |
| fudge 127.127.20.0 flag1 1 flag2 0 time2 1.0 refid GPSP
| |
| | |
| time2 1.0 - это смещение времени гпс от ппс тк гпс и ппс асинхронны и если нет смещения то нтп отбранкует драйвер 20 – подбирается экспериментально по методике ниже (но думаю что для всех виренбордов 5 будет 1.0 (для пи2 у меня получилось 0.7)) https://support.ntp.org/bin/view/Support/ConfiguringNMEARefclocks
| |
| | |
| if you want a good estimation for fudge time2 (perhaps because PPS is not an option for you) you could use the following procedure:
| |
| | |
| Switch off the PPS processing for the NMEA driver and mark the clock as noselect. Set the fudge time2 to zero. Add a few good public time servers or another clock; here in Germany I can use my DCF77 radio clock for that purpose. Disable all output sentences of the GPS18x LVC but the GPRMC sentence.
| |
| Restart the daemon and watch the offset for the NMEA clock. When the value gets stable, use the absolute value of the offset as fudge time2 for the NMEA driver.
| |
| Optionally restart ntpd and verify that the offset remains small. Note the jitter, which is probably in the order of 5-10msec. If the offset is small enough (better than 2ms is doable, but takes a long time to stabilise), go to the next step. Otherwise fine-tune fudge time2 and repeat this step.
| |
| Enable PPS processing again if you can. After restarting ntpd jitter and offset should decrease rather fast.
| |
| | |
| Finally, remove the noselect statement and enjoy your fast-locking NMEA clock with a Garmin GPS18x LVC!
| |
| | |
| Перезагружаемся и смотрим что есть наши алиасы
| |
| | |
| root@wirenboard:~# ls /dev/gps*
| |
| /dev/gps0 /dev/gpspps0
| |
| | |
| Далее ждем минут 10 и ntpq -nc peer -c as -c rl
| |
| Буква о у 127.127.20.0 – значит что последняя синхронизации с ппс (http://citrin.ru/net:ntpq)
| |
| | |
| root@wirenboard:~# ntpq -nc peer -c as -c rl
| |
| | |
| remote refid st t when poll reach delay offset jitter
| |
| ==============================================================================
| |
| o127.127.20.0 .GPSP. 0 l 8 16 377 0.000 0.000 0.008
| |
| *185.22.60.71 212.20.50.208 2 u 21 64 377 3.510 -0.048 0.132
| |
| +95.104.192.10 194.190.168.1 2 u 55 64 377 18.911 -1.880 0.093
| |
| -144.76.115.197 131.188.3.221 2 u 4 64 377 51.630 -6.302 0.509
| |
| +89.111.54.85 194.29.130.252 2 u 46 64 377 25.978 0.225 0.088
| |
| ind assid status conf reach auth condition last_event cnt
| |
| ===========================================================
| |
| 1 30454 974a yes yes none pps.peer sys_peer 4
| |
| 2 30455 963a yes yes none sys.peer sys_peer 3
| |
| 3 30456 9424 yes yes none candidate reachable 2
| |
| 4 30457 933d yes yes none outlier 3
| |
| 5 30458 943a yes yes none candidate sys_peer 3
| |
| | |
| associd=0 status=0415 leap_none, sync_uhf_radio, 1 event, clock_sync,
| |
| version="ntpd 4.2.8p6@1.3265 Wed Apr 6 16:13:39 UTC 2016 (2)",
| |
| processor="armv5tejl", system="Linux/4.1.15-imxv5-x0.1", leap=00,
| |
| stratum=1, precision=-17, rootdelay=0.000, rootdisp=1.120, refid=GPSP,
| |
| reftime=dab9e00e.9c7d01b8 Thu, Apr 14 2016 9:23:26.611,
| |
| clock=dab9e016.a2b1d422 Thu, Apr 14 2016 9:23:34.635, peer=30454, tc=4,
| |
| mintc=3, offset=0.000121, frequency=91.858, sys_jitter=0.007629,
| |
| clk_jitter=0.008, clk_wander=0.000
| |
| | |
| Это чтобы посмотреть ошибки и что выдает гпс
| |
| | |
| root@wirenboard:~# ntpq -c clockvar
| |
| associd=0 status=0011 1 event, clk_no_reply,
| |
| device="NMEA GPS Clock",
| |
| timecode="$GNRMC,092359.000,A,5549.0526,N,03735.1798,E,0.00,172.16,140416,,,A*78",
| |
| poll=3426, noreply=1, badformat=0, baddata=0, fudgetime2=1000.000,
| |
| stratum=0, refid=GPSP, flags=1
| |
| | |
| Дальше настраиваем нтп как нам надо – кому что можно откуда и так далее.
| |