Soweit ich weiß, wird RTC benötigt, um die Zeit im Auge zu behalten. Raspberry Pi hat dies jedoch nicht und verwendet NTP-Server, um seine Zeit zu synchronisieren.
Das ist alles in Ordnung, aber woher weiß Pi, dass eine Millisekunde oder eine Sekunde vergangen ist. Wie ist sich Pi des Zeitablaufs bewusst?
timekeeping
rtc
AppleGrew
quelle
quelle
Antworten:
RTC-Betrieb
Was RaspberryPi fehlt, ist eine batteriegepufferte RTC (Real Time Clock). Es ist ein Gerät, das unabhängig vom Hauptcomputer arbeiten und die verstrichene Zeit verfolgen kann, auch wenn es ausgeschaltet ist (aus diesem Grund verfügt es über einen eigenen Akku). Es kann auf sehr einfache Weise funktionieren - es ist ein bekannter Frequenzoszillator angeschlossen und bei jedem Impuls des Oszillators wird der interne Timer / Zähler erhöht. Da die Frequenz bekannt ist, ist es einfach, die verstrichene Zeit basierend auf dem Zähler zu berechnen. Das Gerät verfügt außerdem über einen Akku, sodass es auch bei ausgeschalteter externer Stromversorgung weiterarbeiten kann.
Einige RTC-Geräte sind möglicherweise anspruchsvoller. Sie können beispielsweise einen Interrupt in der programmierbaren Frequenz oder im Alarmmodus erzeugen (auf eine bestimmte Zeit in der Zukunft oder auf eine bestimmte Zeit jeden Tag usw. eingestellt). Es ist nicht relevant für die Einhaltung der Systemzeit und optional.
Wie RTC verwendet wird
Ein Computer kann RTC fragen, wie spät es ist (oder genauer gesagt, wie hoch sein Zählerwert ist), und sein internes Datum / seine interne Uhrzeit basierend auf diesem Wert einstellen. Von nun an fragt ein Computer RTC jedoch nicht mehr jede Sekunde / Millisekunde / Mikrosekunde nach der Zeit. Stattdessen wird eine eigene Uhr (Systemzeit genannt) ausgeführt, die normalerweise eigene Timer / Zähler verwendet. Genau wie bei RTC wird der Timer / Zähler mit einer bekannten Frequenz getaktet, sodass die verstrichene Zeit einfach berechnet werden kann.
Sie können Ihr System zwingen, seine Uhr mit dem RTC-Gerät zu synchronisieren (in beide Richtungen), dies geschieht jedoch erst, wenn Sie dazu aufgefordert werden. Einige Systeme sind so konfiguriert, dass sie die Systemzeit beispielsweise beim Herunterfahren oder nach der NTP-Synchronisierung in RTC speichern.
Fehlende RTC
RaspberryPi verfügt wie viele billige Single-Board-Computer nicht über ein externes RTC-Gerät. Dies bedeutet, dass beim Booten nicht nach der aktuellen Uhrzeit gefragt werden kann. Aber wie bereits erwähnt - dies ist kein Problem, wenn wir Datum / Uhrzeit von einer anderen Quelle (wie NTP) erhalten können. Der einzige Nachteil ist, dass Sie im Gegensatz zu RTC beim frühen Start nicht nach NTP fragen können (da Sie zuerst eine Netzwerkverbindung benötigen).
Um Ihre Frage direkt zu beantworten - unabhängig davon, ob RaspberryPi (oder ein anderer Computer) über RTC verfügt oder nicht, wird die Zeit mithilfe eines internen Timer- / Zählergeräts verfolgt, das in fast jedem Computersystem verfügbar ist und für die Ausführung nahezu aller Arten erforderlich ist des Betriebssystems.
Zeit unter Linux
Userspace-Anwendungen unter Linux können
calendar time
mithilfe einergettimeofday()
Funktion, die dann den Systemaufruf aufruftclock_gettime()
, die so genannte Funktion (was in der realen Welt eine Zeit ist) bestimmen. Was jetzt passiert, ist aufgrund der vielen erweiterten Funktionen des Linux-Kernels (wie Namespaces usw.) etwas kompliziert. Aber die Grundlagen sind, dass der Kernel seine Zeit basierend auf beibehältjiffies
. Es ist eigentlich nur eine Variable innerhalb des Kernels (normalerweise 64 Bit breit), die die Anzahl der Ticks seit dem Start des Systems zählt.Ticks werden vom Hardware-Timer mittels generiert
interrupts
.jiffies
Der Wert wird bei jedem solchen Interrupt erhöht. Der Hardware-Timer ist so konfiguriert, dass er in regelmäßigen Abständen solche Interrupts erzeugt. Das Intervall wird beim Booten gemäß einem Wert desHZ
Kernel- Konfigurationsparameters konfiguriert .Zu jedem Zeitpunkt weiß der Kernel, wie viele Ticks vom Start generiert wurden (
jiffies
variabel), er weiß, wie viele solcher Ticks pro Sekunde generiert werden (HZ
Konfigurationsoption), sodass er leicht berechnen kann, wie viel Zeit vom letzten Start vergangen ist.So zusammenzufassen - kernel fragt
RTC
etwacalendar time
(auchwall clock
beim Booten) , so dass es weiß , was die tatsächliche Zeit war , wenn das System gestartet. Es fügt dannjiffies/HZ
Wert dieses jedesmal , wenn ein User - Space - Anwendung fragt , was Zeit ist es mitclock_gettime
Systemaufruf.Hardware-Timer / Zählergerät
Hardware-Timer / Zähler ist ein sehr einfaches Gerät. Es hat ein Zählerregister, das seine Taktanzeigen zählt. Takt-Ticks werden normalerweise von einem externen
oscillator
(einer elektronischen Schaltung, die sich wiederholende Signale erzeugt) erzeugt und haben eine bekannte Frequenz (normalerweise im Bereich von einigen kHz bis Hunderten MHz). Dies bedeutet, dass wir leicht berechnen können, wie viel Zeit vergangen ist, indem wir den Zählerwert durch die Frequenz des Oszillators dividieren.Das Timer-Gerät kann für verschiedene Aufgaben programmiert werden - es kann nach oben und unten zählen und das Zählerregister mit einem bestimmten Wert vergleichen. Zum Beispiel kann es ein externes Signal erzeugen und von vorne beginnen zu zählen, wenn das Zählerregister einen bestimmten Wert hat. Auf diese Weise können Sie das Timer-Gerät so konfigurieren, dass ein solches externes Signal in einem konstanten Intervall erzeugt wird, das viel niedriger als der Oszillator ist. Dieses Signal kann dann als Interrupt-Ereignis für eine CPU verwendet werden.
Beachten Sie, dass der Oszillator direkt anstelle des Timer-Geräts verwendet werden kann. Was das Timer / Zähler-Gerät vom Oszillator unterscheidet, ist, dass es programmiert werden kann. Sie können sich also ein Timer / Zähler-Gerät als einen viel ausgefeilteren Oszillator vorstellen.
quelle
Der CPU-Takt wird von einem Kristall abgeleitet. Normalerweise können Sie 10 bis 20 Teile pro Million für die Taktgenauigkeit erwarten (ca. 5 bis 10 Minuten pro Jahr).
quelle
Um die Frage zusammen mit Anweisungen zum Hinzufügen einer RTC zu Ihrem PI viel einfacher zu beantworten, füge ich unten einen Link ein. Je nachdem, ob Sie neben der Verwendung der inet / ntp-Methode zur Zeitangabe nur eine zuverlässige Methode wünschen oder eine sehr genaue Methode benötigen, würde ich die Verwendung der "Chronodot" -RTC empfehlen. Andernfalls würde die RTC des Breakout-Boards einwandfrei funktionieren und ist sehr einfach in Betrieb zu nehmen. Sie müssen lediglich I2C einrichten, damit der PI mit der RTC kommuniziert. Link Info / Materialien
quelle