Chrony and GPSD
Sources such as:
- http://www.rjsystems.nl/en/2100-ntpd-garmin-gps-18-lvc-gpsd.php
- http://lists.ntp.org/pipermail/questions/2005-November/007878.html
Describe how to wire a Garmin gps 18 lvc to a serial port to grab the PPS (pulse-per-second) signal to create a Stratum 1 timesource. Other sources show using ntpd, and the gpsd man page provides config snippets.
Alpine Linux gpsd package 3.9-r1 and higher has the necessary pps code to interface with chrony. This page lists all of the files for a complete, working example:
- /etc/modules needs to list the pps_ldisc module - you'll need to manually load it if not doing a reboot
Contents of /etc/modules
- If the GPS 18 LVC is on /dev/ttyS1, then:
Contents of /etc/conf.d/gpsd
The purpose is to allow gpsd to start without editing /etc/conf.d/gpsd. Note that while gpsd will now start without editing the conf.d file, it will do so with no gps devices attached.
Also note that if you are using a serial device it is still recommended to add the stty and setserial commands as noted in the example configuration above.
- This shows all three methods of getting time from gpsd:
Contents of /etc/chrony/chrony.conf
Chronyc
If everything is working correctly, a chronyc 'sources' command should look like this:
chronyc> sources 210 Number of sources = 6 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== #x NEMA 0 4 377 14 +684ms[ +684ms] +/- 252ms #+ PPS 0 4 377 13 +2040ns[+2060ns] +/- 50ms #* SOCK 0 4 377 7 +225ns[ +245ns] +/- 2217ns ^? tick.tock.com 2 10 377 318 -5144us[-5144us] +/- 72ms ^? time.keeper.net 3 10 377 720 -4571us[-4567us] +/- 139ms ^? dead.time.server.org 0 10 0 10y +0ns[ +0ns] +/- 0ns
- NEMA (SHM0) is "x" - its really unstable
- PPS (SHM1) is good, but the delay of 0.1 makes it the not-preferred master
- SOCK is the preferred master
- The other NTP servers are only used if the local server goes down.
Notes
- In /etc/chrony/chrony.conf, there are three possible time sources:
- SHM 0 (NEMA serial data)
- SHM 1 (NEMA with PPS)
- SOCK (PPS 'proprietary' gpsd/chrony interface)
- You only need 1 of them, although all 3 are shown above
- In the example above, SHM1 is specified with a delay of 0.1 to prevent it from competing with the SOCK protocol
- If you prefer to use the SHM1 source instead of SOCK, then either:
- comment out the SOCK protocol line
- or reverse the delay values.
- If you prefer to use the SHM1 source instead of SOCK, then either:
- Note that the SHM0 source (NEMA only, no PPS) is set to a higher delay - don't use it if you have PPS available.
- An example of where you would want to use SHM0 is a USB based gps receiver - they don't have the PPS line
- Chrony creates the SOCK interface; chrony should be started before gpsd. If you restart chronyd for some reason, make sure you restart gpsd after.
- The SHM0 interface can be used with USB based gps devices. In this case, use /dev/ttyUSBX in the /etc/conf.d/gpsd file, and leave the stty and setserial lines commented out.