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 einer gettimeofday()
Funktion, die dann den Systemaufruf aufruft clock_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ält jiffies
. 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 des HZ
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
etwa calendar time
(auch wall clock
beim Booten) , so dass es weiß , was die tatsächliche Zeit war , wenn das System gestartet. Es fügt dann jiffies/HZ
Wert dieses jedesmal , wenn ein User - Space - Anwendung fragt , was Zeit ist es mit clock_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.