Ich habe eine Hauptplatine mit I / O-Pins und ich habe eine C-Bibliothek mit Funktionen geschrieben, um den Status dieser I / O-Pins festzulegen und abzufragen. Nehmen wir an, der Name einer dieser Funktionen ist get_pin(int pin_no)
und gibt die logische Spannung dieses Pins zurück. Ich möchte ein 1-Puls-pro-Sekunde-Signal (PPS) an einen meiner Pins senden und Linux-NTPD auf der Basis dieses Signals kalibrieren.
Ist es möglich, dem NTPD mitzuteilen, einen dieser I / O-Pins als PPS zu verwenden? Wenn ja, wie lautet der Ansatz dafür? Ie. Ist es über die Konfigurationsdatei oder muss der Quellcode von NTPD geändert werden? Meine frühe Forschung scheint darauf hinzudeuten, dass Letzteres notwendig sein könnte.
Bearbeiten: Ich arbeite mit dem ntpd auf Centos
Hat Ihr Kernel PPS-Unterstützung?
%Vor% Ist ldattach
installiert?
Sie brauchen möglicherweise ldattach
nicht. Es wurde in den LinuxPPS-Installationsanweisungen erwähnt. Es scheint jedoch, dass es nur für PPS verwendet wird, die über eine serielle Leitung gesendet werden (zB RS-232 ).
Ist das pps-tools
installiert?
Ist das pps-gpio.ko
Modul installiert?
Sie können dem Kernel mitteilen, dass ein GPIO-Pin als PPS-Signal verwendet wird, indem Sie etwas ähnliches zu Ihrer Kernel-Zeile in Ihrer GRUB-Konfiguration hinzufügen:
%Vor%Sie müssen "18" in den GPIO-Pin ändern, den Sie verwenden.
Sie müssen ein paar Zeilen wie diese zu Ihrem ntp.conf
hinzufügen:
Referenzen:
Für ein Kalibrierungssignal mit einem Impuls pro Sekunde muss außerdem der Eingangspin genau 1 Sekunde für die Kalibrierung gelesen werden. Der Abruf wird nicht ausgeführt, da die Ausführung des Zeitgebers bei der Arbeit mit hoher Priorität vom Betriebssystem abweichen kann.
Gleiches gilt für die Verwendung von Unterbrechung bei Änderung * für diesen mit der Funktion kalibrieren verknüpften Pin. Außerdem wird 1 PPS-Ausführung der Kalibrierungsmethode aufgrund von Unterbrechungsverarbeitungsverzögerungen, wie z Interrupt höherer Priorität tritt auf.
Wenn ich die Frage richtig verstanden habe, verwenden Sie etwas wie Raspberry und möchten Ihr System durch einen anderen Controller synchronisieren, indem Sie eine Folge von logischen 1s erhalten, die zum Beispiel Zeit teac für Ihr Board bedeuten?
Die einzige Sache, die ich nicht verstehe, ist warum brauchen Sie NTP-Daemon dafür. Ist es nicht besser, eine statische Variable time_t
zu erstellen, die bei jedem Teac-Empfang erhöht wird?
Wenn Sie später einige externe Geräte synchronisieren möchten und die Karte als Zeitserver fungiert, passen Sie das Systemdatum jedes Mal an, wenn die Differenz zwischen Ihrer statischen Variable und time(0)
größer als der definierte Wert ist.
Tags und Links ntp