Gibt es eine Möglichkeit, die korrekte Systemzeit ohne NTP zu erhalten?

770
GTKoo

Ich entwickle industrielle Embedded-Geräte auf dem ARMv7, 3.10-Kernel.

Lassen Sie mich zunächst auf die Hardwarezeit eingehen, bevor Sie sich dem Hauptthema widmen. Amlogic meson8b ist eine Kerneinheit, also habe ich "aml-rtc" als main rtc verwendet, aber es war unzuverlässig. also entschieden wir uns für einen externen rtc-chip, und jetzt ist ds1340 haupt-rtc. Nach einigen Testsequenzen glaube ich, dass die Hardwarezeit jetzt ziemlich zuverlässig ist.

Das Problem betrifft die Systemzeit. Die Systemzeit läuft schneller als die h / w-Zeit von etwa 2 bis 3 Sekunden pro Tag. Wie Sie wissen, gibt es viele Lösungen, die NTP verwenden, aber aufgrund der Eigenschaften unseres Geräts ist es vom Ethernet getrennt, daher kann ich NTP nicht verwenden.

Der Punkt ist, dass ich wissen möchte, ob es eine Methode gibt, um die korrekte Systemzeit ohne NTP zu erhalten.

Vielen Dank, dass Sie diesen Thread gelesen haben, und entschuldigen Sie mich bei meinem schlechten Englisch.


ps. Ich dachte, dass ich auch den Aufruf "hwclock --hctosys" verwenden sollte, aber dies kann aufgrund von Sicherungsdateien und Protokollen ein kritisches Problem sein. Wenn zum Beispiel LOG <1> um 12:05 Uhr Systemzeit gespeichert wurde, und wenn das System auf 12:04 Uhr zurückgesetzt wurde, könnte LOG <1> verloren gehen, weil nach "Neuer Zeit" 12:05 neue Protokolle gespeichert wurden. Dies ist nur ein Beispiel, und ich kann dieses Problem auch lösen, indem Sie die Zeitspanne "hwclock --hctosys" sehr kurz einstellen, aber ich möchte diesen Weg als letzten Ausweg beibehalten.

2
Sie können genaue Zeit per GPS erhalten. Zoredache vor 7 Jahren 0
Offensichtlich haben Sie eine Möglichkeit, den Fehler zu messen (wie Sie sagen, dass er etwa 2 bis 3 Sekunden pro Tag beträgt). Einige (die meisten? Alle?) NTP (Client) -Software beschleunigt oder verlangsamt die Systemuhr und synchronisiert sie mit der externen Zeitquelle (anstatt die Uhr vorwärts oder rückwärts zu springen). Bei einigen NTP-Programmen können Sie die Fehlerrate konfigurieren, die angenommen werden sollte, wenn keine Verbindung zu einem NTP-Server hergestellt werden kann. Sie können dies möglicherweise direkt in einer Konfigurationsdatei festlegen. … (Fortsetzung) G-Man vor 7 Jahren 0
(Forts.)… Eine Alternative wäre, es für einige Tage mit dem Internet zu verbinden, so dass es lernt, wie schnell die Systemuhr ist; sehen Sie dann, ob die Uhr nach dem Trennen weiterhin korrekt eingestellt wird. G-Man vor 7 Jahren 0
Wenn Sie nicht über eine lokale Referenzuhr mit eigener Stromversorgung verfügen oder eine externe Referenz wie NTP verwenden, weist wahrscheinlich jedes andere Schema mindestens ein Fehlerszenario auf, das dazu führt, dass Ihr System keine genaue Zeit hat. Das "alternative" Schema von @ G-Man funktioniert nicht, da Oszillatoren / Kristalle über lange Intervalle nicht so stabil sind. Die Wechselstromfrequenz (60 oder 50 Hz) ist genauer (dh sie wird aktiv verwaltet). sawdust vor 7 Jahren 0

1 Antwort auf die Frage

1
Kamil Maciorowski

Bearbeiten

Meine ursprüngliche Antwort beinhaltet etwas Programmierung. Vielleicht können Sie das Setup mit einer anderen Programmierung einfacher gestalten. Auf meinem Kubuntu man ntpdatezeigt sich, dass es adjtime()Systemaufrufe verwendet, um die Systemuhr schrittweise einzustellen. Stellen Sie sich ein Programm vor, das Hardware-Uhr liest und aufruft adjtime().


Ursprüngliche Antwort

Aus dem Kommentar von G-Man:

Einige (die meisten? Alle?) NTP (Client) -Software beschleunigt oder verlangsamt die Systemuhr und synchronisiert sie mit der externen Zeitquelle.

Wenn dies der richtige Weg ist, um Protokollprobleme usw. zu bewältigen, können Sie möglicherweise einen gefälschten lokalen NTP-Server implementieren. Lassen Sie Ihren gefälschten NTP-Server Korrekturen an sich selbst vornehmen (z. B. einmal pro Stunde) . Lassen Sie den NTP-Client die Systemuhr so ​​einstellen, dass die Protokolle nicht gestört und Dateien gespeichert werden.