Reading the replies by Gary E. Miller it seems that your only options are
to either rewire your PPS output 🙄 or patch gpsd to fix the wrong
association. I personally went with rewiring my PCB because it was less
effort than building my own gpsd.


On Wed, Sep 16, 2020 at 1:56 AM Ryan Govostes <rgovos...@whoi.edu> wrote:

> Here is the bug I filed: https://gitlab.com/gpsd/gpsd/-/issues/103
>
> Specifying /dev/pps0 on the gpsd command line works to an extent in that
> it causes gpsd to start publishing to chrony.pps0.sock. However, it still
> has trouble in that it refuses to publish to chrony.ttyAMA1.sock because
> there’s some issue with /dev/pps1 (I think).
>
> Ryan
>
> On Sep 15, 2020, at 6:54 PM, Avamander <avaman...@gmail.com> wrote:
>
> > I’ll file a bug against gpsd for this case.
>
> Well no need, this behaviour was deemed "correct" already.
>
> > sudo gpsd -n -N -D3 -F /tmp/gpsd.sock /dev/ttyAMA1
>
> Manually specifying /dev/pps0 here doesn't help?
>
>
>
> On Wed, Sep 16, 2020 at 12:49 AM Ryan Govostes <rgovos...@whoi.edu> wrote:
>
>> Seems like gpsd hardcodes /dev/ttyAMA0 as “oh you’re using a Raspberry Pi
>> HAT” and then uses /dev/pps0, which would be the GPIO PPS source. Otherwise
>> it searches sysfs to find the PPS device for the given NMEA device.
>>
>> The reason it has to have that hardcoded is because the kernel pps-gpio
>> driver does not populate the `path` for the corresponding serial device
>> with the NMEA feed. (Perhaps it should let you override it if that GPIO PPS
>> source corresponds with a separate device.)
>>
>>
>> https://github.com/torvalds/linux/blob/master/drivers/pps/clients/pps-gpio.c
>> <https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Ftorvalds%2Flinux%2Fblob%2Fmaster%2Fdrivers%2Fpps%2Fclients%2Fpps-gpio.c&data=02%7C01%7Crgovostes%40whoi.edu%7C783f37e18dca4f007cb208d859ca50ce%7Cd44c5cc6d18c46cc8abd4fdf5b6e5944%7C0%7C0%7C637358072779884574&sdata=L2Kik9OpWKOyFujF7h4CfucsKNCT45gxH24%2FjRYRPKU%3D&reserved=0>
>>
>> Since I’m using /dev/ttyAMA1, that hack doesn’t trigger.
>>
>> I’ll file a bug against gpsd for this case.
>>
>> Ryan
>>
>>
>> On Sep 15, 2020, at 4:33 PM, Ryan Govostes <rgovos...@whoi.edu> wrote:
>>
>> I can confirm that /dev/ttyAMA1 streams incoming NMEA messages. I can
>> confirm /dev/pps0 is a working PPS device.
>>
>> I can confirm that gpsd is configured to access /dev/ttyAMA1 and when I
>> launch it with
>>
>> sudo gpsd -n -N -D3 -F /tmp/gpsd.sock /dev/ttyAMA1
>>
>> I see it getting a satellite fix, suggesting it is receiving NMEA
>> messages just fine, although it has the /dev/pps1 error messages as below.
>>
>> If I use `strace` on gpsd, then I see that it connects to
>> /var/run/chrony.ttyAMA1.sock (/var/run being a symlink to /run it should be
>> OK):
>>
>> connect(8, {sa_family=AF_UNIX, sun_path="/var/run/chrony.ttyAMA1.sock"},
>> 30) = 0
>>
>> I never see it reading or writing file descriptor 8, so it clearly is not
>> sending anything to chronyd.
>>
>>
>> It appears that /dev/pps1 is created some time after gpsd starts.
>> /sys/devices/virtual/pps/pps1 appears and the path file contains the text
>> /dev/ttyAMA1. gpsd scans through all of these pps/*/path files to find the
>> one matching the NMEA device it is configured for, so that’s why it ends on
>> /dev/pps1.
>>
>> I still don’t know who exactly is creating /sys/devices/virtual/pps/pps1
>> — strace doesn’t put the blame on either chronyd or gpsd, but otherwise
>> this is a vanilla system I installed just a few days ago.
>>
>> Ryan
>>
>>
>>
>> On Sep 15, 2020, at 4:05 PM, Avamander <avaman...@gmail.com> wrote:
>>
>> Check what you have specified in the list of devices to be used.
>>
>> I personally couldn't convince gpsd to use pps1 instead of pps0, but you
>> might be having the opposite issue :S
>>
>> What actually is pps1 on your system? It might play a role.
>>
>> On Tue, Sep 15, 2020 at 11:02 PM Ryan Govostes <rgovos...@whoi.edu>
>> wrote:
>> I’m not sure. Its logs look OK, but it prints out:
>>
>>        gpsd:INFO: KPPS:/dev/ttyAMA1 RFC2783 path:/dev/pps1, fd is 9
>>
>> Note that /dev/pps1 is _not_ the PPS device I expect to use. This device
>> only appears while gpsd is running so it appears to be created by it?
>> ppstest only reports timeouts for this one, while pps0 continues to work as
>> expected.
>>
>> More context:
>>
>>        gpsd:INFO: KPPS:/dev/ttyAMA1 RFC2783 path:/dev/pps1, fd is 9
>>        gpsd:INFO: KPPS:/dev/ttyAMA1 pps_caps 0x1133
>>        gpsd:INFO: KPPS:/dev/ttyAMA1 have PPS_CANWAIT
>>        gpsd:INFO: KPPS:/dev/ttyAMA1 kernel PPS will be used
>>        …
>>        gpsd:INFO: KPPS:/dev/ttyAMA1 kernel PPS timeout Interrupted system
>> call
>>        …
>>        gpsd:INFO: KPPS:/dev/ttyAMA1 kernel PPS timeout Connection timed
>> out
>>
>> Ryan
>>
>> On Sep 15, 2020, at 3:57 PM, Avamander <avaman...@gmail.com> wrote:
>>
>> However, `chronyc` does not report any updates being received from this
>> source.
>>
>>
>> If you aren't seeing anything on SHM1 either, then gpsd still has issues
>> with reading the PPS source. Check its logs.
>>
>> On Tue, Sep 15, 2020 at 10:56 PM Ryan Govostes <rgovos...@whoi.edu>
>> wrote:
>> Ah OK, I guess the part that was not clear to me was that chronyd
>> _creates_ this socket when configured with refclock SOCK, rather than
>> simply connecting to it.
>>
>> When I configured this and restarted chronyd and then gpsd, it did create
>> the socket file. However, `chronyc` does not report any updates being
>> received from this source.
>>
>> I did not find an AppArmor profile that is currently being enforced on
>> gpsd.
>>
>> I did notice that AppArmor was preventing chronyd from creating
>> /run/chronyd.pps0.sock, so I corrected that and switched the configuration
>> to:
>>
>>        refclock SOCK /run/chrony.ttyAMA1.sock refid GPS precision 1e-1
>>        refclock SOCK /run/chrony.pps0.sock refid PPS precision 1e-7
>>
>> However I still do not receive any updates.
>>
>> Ryan
>>
>> On Sep 15, 2020, at 3:20 PM, Avamander <avaman...@gmail.com> wrote:
>>
>> but also I don’t see that socket you’re referencing being created.
>> I don’t see any AppArmor logs that seem to indicate anyone was prevented
>> from creating this file.
>>
>>
>> Have you actually told chrony to create it?
>>
>> for a while but the PPS never updated:
>>
>>
>> Yes, this is exactly why I suggested you check the AppArmor policy
>> itself. When the pps device is inaccessible gpsd gives some vague error
>> about the pps device and that's it. Open gpsd's log and verify it hasn't
>> thrown an error about the pps device during startup.
>>
>> I couldn’t readily find much documentation on SHM 0 vs SHM 1.
>>
>>
>> Yes, this is awfully documented online.
>>
>>
>>
>> On Tue, Sep 15, 2020 at 10:08 PM Ryan Govostes <rgovos...@whoi.edu>
>> wrote:
>> Below Bill argued against using /var/run/chrony.ttyAMA0.sock, but also I
>> don’t see that socket you’re referencing being created. I don’t see any
>> AppArmor logs that seem to indicate anyone was prevented from creating this
>> file. Perhaps the version is too old?
>>
>> I couldn’t readily find much documentation on SHM 0 vs SHM 1. I did find
>> this, which suggests using SHM 1 instead of having chrony go directly to
>> the PPS device, as in:
>>
>>        refclock SHM 0 refid GPS precision 1e-1
>>        refclock SHM 1 refid PPS precision 1e-7
>>
>>
>> https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgpsd.gitlab.io%2Fgpsd%2Fgpsd-time-service-howto.html%23_feeding_chrony_from_gpsd&amp;data=02%7C01%7Crgovostes%40whoi.edu%7C86536cbb401c44a3c5cc08d859b6a884%7Cd44c5cc6d18c46cc8abd4fdf5b6e5944%7C0%7C0%7C637357988356257028&amp;sdata=N%2B8IAnmUrjXdPylbVOLjEXRfEGbG1QrLbGrToTbRHLU%3D&amp;reserved=0
>> <https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgpsd.gitlab.io%2Fgpsd%2Fgpsd-time-service-howto.html%23_feeding_chrony_from_gpsd&data=02%7C01%7Crgovostes%40whoi.edu%7C783f37e18dca4f007cb208d859ca50ce%7Cd44c5cc6d18c46cc8abd4fdf5b6e5944%7C0%7C0%7C637358072779894569&sdata=fGVNsCxbFvFLGpAXhcbgE37poR9Keu4TA23%2Bgj%2FnaKw%3D&reserved=0>
>>
>> I restarted chronyd with this configuration and watched `chronyc sources`
>> for a while but the PPS never updated:
>>
>>        210 Number of sources = 2
>>        MS Name/IP address         Stratum Poll Reach LastRx Last sample
>>
>>        
>> ===============================================================================
>>        #* GPS                           0   4   377    22
>>  +1104us[+4464us] +/-  100ms
>>        #? PPS                           0   4     0     -     +0ns[
>>   +0ns] +/-    0ns
>>
>> I disabled systemd-timesyncd as you suggested, thanks.
>>
>> Ryan
>>
>> On Sep 15, 2020, at 2:42 PM, Avamander <avaman...@gmail.com> wrote:
>>
>> First, disable systemd-timesyncd if you're using chrony: sudo systemctl
>> disable --now systemd-timesyncd
>>
>> Second, enable chrony, pretty sure it isn't enabled by default after
>> install: sudo systemctl enable chrony
>>
>> Why do you want to SHM 0 (non-PPS-corrected) NMEA time, instead of SHM 1
>> or /var/run/chrony.ttyAMA0.sock?
>>
>> On Tue, Sep 15, 2020 at 9:36 PM Ryan Govostes <rgovos...@whoi.edu> wrote:
>> Thanks, I removed the offset and delay so the reference clock
>> configuration is now:
>>
>>        refclock SHM 0 refid GPS precision 1e-1
>>        refclock PPS /dev/pps0 refid PPS
>>
>> My intention is to have GPS set the system date and time and then have
>> the PPS signal keep it from drifting.
>>
>> After applying this, I ran again and am now getting:
>>
>>        MS Name/IP address         Stratum Poll Reach LastRx Last sample
>>
>>        
>> ===============================================================================
>>        #x GPS                           0   4   377    16   +587us[
>> +587us] +/-  100ms
>>        #x PPS                           0   4   160    82   -128ms[
>> -128ms] +/-  759ns
>>
>> The #x suggests that “time may be in error.” However I am still seeing
>> gpsd work (monitored via cgps) and the PPS device still appears to be
>> working (according to ppstest).
>>
>> Furthermore timedatectl suggests that the system clock is not
>> synchronized:
>>
>>        $ timedatectl status
>>        Local time: Tue 2020-09-15 18:34:48 UTC
>>        Universal time: Tue 2020-09-15 18:34:48 UTC
>>        RTC time: n/a
>>        Time zone: Etc/UTC (UTC, +0000)
>>        System clock synchronized: no
>>        systemd-timesyncd.service active: yes
>>        RTC in local TZ: no
>>
>> What appears to be the problem?
>>
>> Ryan
>>
>> On Sep 15, 2020, at 12:47 PM, Bill Unruh <un...@physics.ubc.ca> wrote:
>>
>>
>>
>> William G. Unruh __| Canadian Institute for|____ Tel: +1(604)822-3273
>> Physics&Astronomy _|___ Advanced Research _|____ Fax: +1(604)822-5324
>> UBC, Vancouver,BC _|_ Program in Cosmology |____ un...@physics.ubc.ca
>> Canada V6T 1Z1 ____|____ and Gravity ______|_
>> https://nam02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.theory.physics.ubc.ca%2F&amp;data=02%7C01%7Crgovostes%40whoi.edu%7C86536cbb401c44a3c5cc08d859b6a884%7Cd44c5cc6d18c46cc8abd4fdf5b6e5944%7C0%7C0%7C637357988356257028&amp;sdata=EkXZPly9ps2U3qVb7qot7CxssLBlwUCyqTblGkx8FKo%3D&amp;reserved=0
>> <https://nam02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.theory.physics.ubc.ca%2F&data=02%7C01%7Crgovostes%40whoi.edu%7C783f37e18dca4f007cb208d859ca50ce%7Cd44c5cc6d18c46cc8abd4fdf5b6e5944%7C0%7C0%7C637358072779894569&sdata=NiQW4SXKjvekB8CV9roLWcQ3x5VVYrAl7Sr2dao1D0I%3D&reserved=0>
>>
>> On Tue, 15 Sep 2020, Ryan Govostes wrote:
>>
>> Hi all,
>>
>> I am setting up chronyd on an embedded Linux device to synchronize the
>> system clock using a GPS module. The GPS device sends NMEA strings over the
>> character device /dev/ttyAMA1 and I have also configured /dev/pps0, both of
>> which appear to be working OK.
>>
>> The system is running Ubuntu 18.04 and the latest package versions are
>> chronyd 3.2 and gpsd 3.17.
>>
>> I configured gpsd to listen to the serial device and then added these
>> lines to my chrony.conf:
>>
>>     refclock SHM 0 refid GPS precision 1e-1 offset 0.9999 delay 0.2
>>
>>
>> Why those figures for ooffset? That is 1 sec offset. NMEA is not that bad.
>>
>>
>>     refclock PPS /dev/pps0 refid PPS
>>
>> When I run `chronyc sources` they both seem to be kind of working:
>>
>>     210 Number of sources = 2
>>     MS Name/IP address         Stratum Poll Reach LastRx Last sample
>>
>>     
>> ===============================================================================
>>     #- GPS                           0   4   377    12   +128ms[ +128ms]
>> +/-  200ms
>>     #* PPS                           0   4   377    12     +6ns[ +119ns]
>> +/-  203ns
>>
>> However it looks like the GPS source is “not combined”. Is this a
>> degraded state, e.g., it is using one of these two sources?
>>
>>
>> Why would one want to combine GPS with PPS. PPS is good to the nanosecond
>> level. GPS toabut 100 ms -- that is almost a  million times worse. It
>> would be like combining your wristwatch with some clock which says "its
>> spring so it must be April".
>>
>>
>> Also, I am not sure why the LastRx from the PPS (or frankly either) ticks
>> upwards so long—shouldn’t it constantly be receiving updates?
>>
>>
>> Yout tell it that POLL is 4 which means 16 seconds. So every 16 seconds
>> that
>> clock is read. The driver massages the input ( once a second) to get rid
>> of
>> obvious outliers but reports to chrony once every 16 seconds. Note it is
>> a bad
>> idea to reduce the poll even further. Then obvious ouliers are not thrown
>> out,
>> and the ability to determine the rate of the clock is degraded.
>>
>>
>> I am just using the precision / offset / delay figures that several
>> examples use. Is there documentation on calibrating these values?
>>
>>
>> Get rid of the offset and delay. The GPS is useless except for setting
>> actual
>> number of the seconds.
>>
>>
>> Finally, I read that using Unix sockets rather that shared memory is
>> preferable, but my chronyd does not seem to create those sockets.
>>
>>
>> Why is it better? Leave things as they are. With PPS your time will be
>> accurate to microseconds just as things are now. Do you need any better
>> time?
>> If you do need time to nanoseconds, then you will really have to throw
>> away
>> your computer (its ability to read interrupts is only at the microsecond
>> level) and begin compensating for propagation delays in your gps unit, and
>> also the sawtooth offset on the ns level due to your gps receiver
>> innards. But
>> then, why would you want to know the time to 1 billionth of a second?
>>
>>
>>
>>
>>
>>
>> ��칻 �&�zf���k�|�����z�\��'�۱}���*+� ���칻 �&ފ{az˛��- ��zZ^���r
>> �+�z�+z����!����_jh�ʊ��+a��i�{az˛��-N�.nW�����+-��-z�!����_jh�ʊ
>>
>>
>>
>

Reply via email to