Freigeben der GPS-NMEA-Zeichenfolge mit NTP

865
Ozean

Ich verwende GPS als Uhr für NTP. Es funktioniert großartig und NTP öffnet /dev/gps0und liest es gut. Ich habe auch ein Programm, das /dev/gps0zum Lesen (und Schreiben) des GPS-Geräts geöffnet werden kann, sodass ich die Informationen verarbeiten und konfigurieren kann. Wie kann ich beide gleichzeitig ausführen?

Ich möchte nicht gpsd verwenden und ich möchte einen Weg finden, um die serielle Schnittstelle zu teilen, ohne etwas zu tun, das NTP beschädigen könnte. Socat, Pseudo-Terminal? Wie kann ich das leicht erreichen?

1
NTP unterstützt eine Software-Uhr, die über Shared Memory mit NTP kommuniziert. Wenn Ihre GPS-Software Zeitinformationen in den gemeinsam genutzten Speicher ablegen kann, kann NTP diese Informationen abrufen. [Here] (http://www.sput.nl/time/shm_linux_clock.c) ist ein Beispielcode, den ich vor langer Zeit geschrieben habe. David Schwartz vor 7 Jahren 0
Das habe ich eigentlich schon mit Shared Memory gemacht (gpsd verwendet auch Shared Memory). Das Problem ist, dass der "Kunde" NTP ausführen soll und dann ein zweites Programm wünscht, das nach Bedarf auf das serielle Gerät zugreifen kann. Ich dachte an posix_openpt, fragte mich aber, ob es einen besseren Weg gäbe. Ozean vor 7 Jahren 0
Sie können entweder den NTP-Code ändern oder Ihren eigenen Code schreiben, um als Abschlag zu fungieren. David Schwartz vor 7 Jahren 0
Abhängig von der Maschine können Sie einen anderen physischen seriellen Port installieren und dann einen für nema und pps den anderen als seriellen Port verwenden. Anschließend verwenden Sie den Shares-Speichertreiber von ntp. user3788685 vor 7 Jahren 0
Danke für die Hilfe. Ich löste dies durch Öffnen von Pseudo-Terminals, für ntp und eines für den Prozess, der die nmea-Zeichenketten analysiert. dh ntpfd = posix_openpt (O-RDWR | O_NOCTTY); Grantpt (ntpfd); unlockpt (ntpfd); ptsname_r (ntpfd, Buff, sizeof (Buff)). Buff enthält den Namen des Pseudo-Terminals. Dasselbe gilt für parserfd. Ich öffne und lese dann das GPS und sende, was ich zu diesen Fds bekomme. Verknüpfte das mit ntpfd verknüpfte Pseudo-Terminal mit / dev / gps0. Ozean vor 7 Jahren 1
@Ozean Bitte veröffentlichen Sie diese Lösung als Antwort auf Ihre Frage zum Nutzen zukünftiger Benutzer mit derselben Frage. Vielen Dank für Ihren Beitrag zu SuperUser. Twisty Impersonator vor 7 Jahren 0

1 Antwort auf die Frage

-1
Claude Frantz

Ich ignoriere den Grund, warum Sie nicht gpsd verwenden wollen. Ich empfehle Ihnen, es zu verwenden, da dies wahrscheinlich die einfachste Lösung ist. Wenn Sie Zugriff auf die NMEA-Sätze haben möchten, verwenden Sie das Programm "gpspipe", während gpsd ausgeführt wird. Sie werden wahrscheinlich haben, was Sie wollen.

Willkommen bei Super User. Dein Post muss erweitert werden. Eine gute [Antwort] (http://superuser.com/help/how-to-answer) enthält spezifische Anweisungen ([nicht nur Links] (http://meta.stackexchange.com/questions/8231/are-answers- dass-nur-enthalten-Links-anderswo-wirklich-gute-Antworten (8259 # 8259)) und eine Erklärung, wie oder warum die Antwort die OP-Frage beantwortet. Bearbeiten Sie Ihren Beitrag, um Details zu erläutern, wie Ihre Lösung die OP-Frage anspricht. Twisty Impersonator vor 7 Jahren 0