1. Einleitung
Präzise Zeit ist heute weit mehr als nur eine Komfortfunktion: Ob in Rechenzentren, bei Finanztransaktionen, in VoIP-Telefonanlagen, beim Logging von Ereignissen oder in der Industrie, exakte Zeitsynchronisation ist die Basis für stabile Abläufe und nachvollziehbare Daten. Professionelle Grandmaster Clocks, die GPS als Referenzquelle nutzen, sind allerdings oft sehr teuer. Dabei lässt sich ein solches System auch im eigenen Netzwerk mit überschaubarem Budget realisieren.
Ein Raspberry Pi in Kombination mit einem GPS-Empfänger und PPS (Pulse Per Second)-Signal eignet sich hervorragend als Grundlage für einen Stratum-1 Zeitserver. Über NTP (Network Time Protocol) oder noch genauer mit PTP (Precision Time Protocol) kann diese Referenzzeit anschließend im lokalen Netz verteilt werden. Damit erhält man eine Lösung, die nicht nur im Hobby- oder Laboreinsatz überzeugt, sondern auch für kleinere Firmenumgebungen interessant ist.
In diesem Beitrag erfährst Du Schritt für Schritt, wie Du mit einem Raspberry Pi eine eigene GPS-gestützte Grandmaster Clock aufbaust, welche Hardware erforderlich ist, welche Softwarelösungen (z. B. Chrony oder ptpd) sich eignen und wie die Konfiguration erfolgt, um im Heimnetz oder im Rechenzentrum hochpräzise Zeit bereitzustellen.
2. Voraussetzungen für den Bau einer GPS Grandmaster Clock mit Raspberry Pi
Um einen Raspberry Pi in eine präzise Grandmaster Clock zu verwandeln, braucht es einige grundlegende Komponenten und die richtige Auswahl der Hardware:
- Raspberry Pi
- Grundsätzlich funktioniert fast jedes Modell ab Raspberry Pi 3 als Stratum-1-Zeitserver über NTP.
- Für Hardware-PTP (Precision Time Protocol, IEEE 1588) ist jedoch mindestens ein Raspberry Pi 4 oder neuer erforderlich, da erst hier die Netzwerkschnittstelle PTP-Timestamping auf Hardwareebene unterstützt.
- Der Raspberry Pi 5 eignet sich besonders gut, da er leistungsstärker ist und stabilere PPS-Latenzen liefert.
- GPS-Empfänger mit PPS-Ausgang
- Wichtig ist ein Modul, das neben den NMEA-Daten auch ein PPS-Signal (Pulse Per Second) liefert.
- Beispiele:
- u-blox NEO-6M / M6N / M8N
- GlobalTop GMM-G3 (ältere Module, teilweise schwer erhältlich)
- Trimble Resolution-SMT oder vergleichbare Module
- Achte darauf, dass das Modul für eine externe Antenne geeignet ist und eine stabile 3,3V-TTL-Schnittstelle bietet.
- GPS-Antenne
- Eine aktive GPS-Antenne mit gutem Sichtfeld zum Himmel ist Pflicht.
- Positioniere sie am besten am Fenster oder außerhalb des Gebäudes.
- Stromversorgung & Kühlung
- Für einen 24/7-Zeitserver ist ein stabiler Betrieb wichtig.
- Verwende ein hochwertiges Netzteil (mind. 3A für Pi 4/5) und ggf. eine Kühlung (besonders beim Pi 5).
- Software
- Chrony oder ntpd für NTP-Zeitsynchronisation.
- linuxptp (ptp4l, phc2sys) für PTP-Grandmaster-Funktion.
- Optionale Tools für Monitoring (z. B.
gpsmon,cgps).
3. Vorbereitungen
3.1 Raspberry Pi vorbereiten – Betriebssystem installieren
Damit der Raspberry Pi als GPS-gestützter Zeitserver arbeiten kann, braucht er ein aktuelles Betriebssystem. Ich empfehle die offizielle Linux-Distribution Raspberry Pi OS (64-Bit), die auf Debian Bookworm basiert. Sie wird von der Raspberry Pi Foundation gepflegt und bietet die beste Unterstützung für Hardware, Treiber und Tools wie chrony oder linuxptp.
3.1.1 Schritt 1: Raspberry Pi Imager verwenden
Die einfachste Möglichkeit, Raspberry Pi OS auf eine microSD-Karte zu bringen, ist der offizielle Raspberry Pi Imager. Diesen kann man kostenlos für Windows, macOS oder Linux von der Seite der Raspberry Pi Foundation herunterladen.
- microSD-Karte (mindestens 8 GB, besser 16 GB oder mehr) in den Kartenleser einlegen
- Raspberry Pi Imager starten
- „Raspberry Pi OS (64-bit)“ auswählen
- Version: Debian Bookworm (Stand 2025)
- Zielmedium (die microSD-Karte) auswählen
- Schreibvorgang starten
Nach wenigen Minuten ist das Betriebssystem fertig auf die Karte geschrieben.
3.1.2 Schritt 2: Erster Start des Raspberry Pi
- microSD-Karte in den Raspberry Pi einsetzen
- Monitor, Tastatur und Maus anschließen (optional, für die Grundkonfiguration; später geht alles per SSH)
- Strom anschließen, der Pi startet automatisch
- Erster Boot dauert ein wenig länger, weil das System die Dateien einrichtet
- Im Einrichtungsassistenten Land, Sprache, Tastatur und WLAN einstellen (falls genutzt)
3.1.3 Schritt 3: System aktuell halten
Sobald das System läuft, sollte man es gleich auf den neuesten Stand bringen:
sudo apt update sudo apt upgrade -y
Damit ist das System vorbereitet, um später GPS und PPS einzubinden und daraus einen Stratum-1-Zeitserver bzw. eine Grandmaster Clock zu machen.
3.1.4 Persönliche Empfehlung
Ich habe für meinen Aufbau Raspberry Pi OS Bookworm 64-Bit verwendet, weil es die aktuelle, stabile Basis ist und alle wichtigen Pakete in aktuellen Versionen enthält. Für ein Projekt wie eine Grandmaster Clock ist ein solides, langfristig gepflegtes System entscheidend.
3.2 Verkabelung des GPS-Moduls mit dem Raspberry Pi (für Anfänger erklärt)
Der Raspberry Pi (ab Modell 3) hat eine 40-polige GPIO-Leiste, das ist die lange doppelreihige Stiftleiste am oberen Rand der Platine.
3.2.1 Orientierung der Pins
- Lege den Raspberry Pi so vor Dich hin, dass die USB-Buchsen nach rechts zeigen und die Netzwerkbuchse links daneben liegt.
- Die GPIO-Leiste befindet sich nun oben quer über die Platine.
- Pin 1 ist die linke obere Ecke dieser Leiste (ganz links außen).
- Die Pins sind in zwei Reihen angeordnet:
- obere Reihe = ungerade Nummern (1, 3, 5, 7 …)
- untere Reihe = gerade Nummern (2, 4, 6, 8 …)

3.2.2 Anschlussplan GPS-Modul (z. B. GY-GPS6MV2 mit NEO-6M)
- Stromversorgung
- GPS VCC (weißes Kabel) → Pin 1 (3,3 V, oben links außen)
- GPS GND (schwarzes Kabel) → Pin 6 (GND, dritte Position unten rechts)
- Serielle Verbindung
- GPS RX (graues Kabel) → Pin 8 (TXD0, obere Reihe, vierter Pin von links)
(Der Pi sendet Befehle zum Modul) - GPS TX (violettes Kabel) → Pin 10 (RXD0, untere Reihe, fünfter Pin von links)
(Der Pi empfängt NMEA-Daten vom Modul)
- GPS RX (graues Kabel) → Pin 8 (TXD0, obere Reihe, vierter Pin von links)
- PPS-Signal (Pulse Per Second)
- Auf diesem GPS-Modul wird das PPS-Signal nicht als Pin herausgeführt.
- Stattdessen kann man es an dem Vorwiderstand der Status-LED oder direkt am Modul abgreifen (siehe rote Kreise im Bild).
- Dünnes Kabel anlöten (z. B. blauer Draht).
- GPS PPS (blaues Kabel) → Pin 12 (GPIO18, obere Reihe, sechster Pin von links)

3.2.3 Hinweise für Einsteiger
- Achte darauf, wirklich Pin 1 als Ausgangspunkt zu nehmen, alle anderen Pins werden von dort gezählt.
- Nie die 5 V-Pins (Pin 2 oder Pin 4) verwenden, das Modul läuft intern mit 3,3 V, 5 V können es zerstören.
- Das angelötete PPS-Kabel am besten mit Heißkleber oder Schrumpfschlauch fixieren, damit es nicht abreißt.
- GND (Masse) muss immer verbunden sein, sonst funktioniert keine Kommunikation.
👉 Ergebnis: Mit nur 5 Kabeln (VCC, GND, RX, TX, PPS) hast Du ein funktionierendes GPS-Modul, das den Raspberry Pi mit exakter Zeit über NMEA-Daten und PPS-Impulse versorgt.
4. Installation
4.1 Raspberry Pi für GPS + PPS vorbereiten (Systemkonfiguration)
Damit der Raspberry Pi später das GPS-Modul korrekt anspricht und das PPS-Signal über GPIO18 nutzen kann, müssen ein paar Startparameter gesetzt werden. Diese liegen in den Konfigurationsdateien im Verzeichnis /boot/firmware/.
4.1.1 Kernel-Parameter anpassen (cmdline.txt)
Die Datei cmdline.txt enthält die Boot-Optionen für den Linux-Kernel. Sie besteht aus einer einzigen langen Zeile, in der verschiedene Parameter hintereinander stehen.
4.1.1.1 Bearbeiten mit vi:
sudo vi /boot/firmware/cmdline.txt
- Mit den Pfeiltasten ans Ende der Zeile gehen.
- Folgenden Parameter hinzufügen (mit Leerzeichen davor, falls direkt am letzten Wort):
nohz=off
- Speichern und beenden:
Escdrücken:wqeingeben- Enter drücken
4.1.1.2 Erklärung:
- nohz=off
- Deaktiviert den „Tickless Kernel“ Modus.
- Normalerweise unterdrückt Linux unnötige Timer-Interrupts zur Energieeinsparung.
- Für präzise Zeitmessung mit PPS brauchen wir jedoch stabile Takte, daher muss dieser Modus ausgeschaltet werden.
4.1.2 Gerätekonfiguration anpassen (config.txt)
Die Hardware-spezifischen Einstellungen für den Raspberry Pi stehen in config.txt.
4.1.2.1 Bearbeiten mit vi:
sudo vi /boot/firmware/config.txt
- Ganz nach unten scrollen, bis zum Bereich
[ALL]. - Unterhalb von
[ALL]folgende Zeilen einfügen:
enable_uart=1 dtoverlay=pi3-disable-bt dtoverlay=pps-gpio,gpiopin=18
- Speichern und beenden (
Esc,:wq, Enter).
4.1.2.2 Erklärung:
- enable_uart=1
- Schaltet die serielle Schnittstelle (UART) frei.
- Darüber empfängt der Pi die NMEA-Daten vom GPS-Modul.
- dtoverlay=pi3-disable-bt
- Standardmäßig ist der UART-Port auf dem Pi mit dem Bluetooth-Modul verbunden.
- Diese Einstellung deaktiviert Bluetooth und gibt den Port für das GPS-Modul frei.
- dtoverlay=pps-gpio,gpiopin=18
- Bindet das PPS-Signal (Pulse Per Second) an GPIO18 (Pin 12) ein.
- Das Betriebssystem erkennt das Signal später als
/dev/pps0.
4.1.3 Neustart
Nach den Änderungen den Raspberry Pi neu starten, damit die Einstellungen aktiv werden:
sudo reboot
👉 Damit ist der Pi bereit, das GPS-Modul über die serielle Schnittstelle anzusprechen und das PPS-Signal auf GPIO18 als hochpräzise Sekundenmarke zu nutzen.
4.2 GPS- und PPS-Software auf dem Raspberry Pi installieren
Nachdem die Boot-Optionen angepasst wurden, muss der Raspberry Pi die GPS-Daten und das PPS-Signal auch auswerten können. Dafür installieren wir die passenden Pakete und richten den GPS-Daemon (gpsd) ein.
4.2.1 Benötigte Pakete installieren
sudo apt install screen gpsd gpsd-clients pps-tools
- gpsd – der GPS-Daemon, der die Daten vom Modul einsammelt und anderen Programmen zur Verfügung stellt
- gpsd-clients – kleine Hilfsprogramme wie
cgps, um die GPS-Daten am Terminal anzeigen zu lassen - pps-tools – Werkzeuge, um das PPS-Signal zu testen (
ppstest) - screen – ein Terminal-Multiplexer, mit dem man seriellen Output komfortabel ansehen kann
4.2.2 gpsd konfigurieren
Die Konfigurationsdatei liegt unter /etc/default/gpsd.
4.2.2.1 Bearbeiten mit vi:
sudo vi /etc/default/gpsd
Den Inhalt so einfügen (alte Inhalte ggf. ersetzen):
# Devices gpsd should collect to at boot time. # Sie müssen für den Benutzer gpsd oder die Gruppe dialout lesbar sein. DEVICES="/dev/ttyAMA0 /dev/pps0" # Weitere Optionen für gpsd GPSD_OPTIONS="-n" # Automatisches Hotplugging von USB-GPS-Modulen deaktivieren USBAUTO="false" # gpsd beim Boot starten START_DAEMON="true"
4.2.2.2 Erklärung:
- DEVICES=”/dev/ttyAMA0 /dev/pps0″
/dev/ttyAMA0= die serielle Schnittstelle des Raspberry Pi, über die NMEA-Daten vom GPS kommen/dev/pps0= das PPS-Gerät (GPIO18), liefert die exakte Sekundenmarke
- GPSD_OPTIONS=”-n”
- Normalerweise wartet gpsd, bis sich ein Client verbindet, bevor es das GPS-Modul abfragt.
- Mit
-nstartet die Abfrage sofort beim Booten, dadurch steht die Zeit schneller zur Verfügung.
- USBAUTO=”false”
- Wir verwenden ein fest verdrahtetes GPS-Modul, daher kein automatisches Einbinden von USB-Geräten.
- START_DAEMON=”true”
- Sorgt dafür, dass gpsd beim Booten automatisch startet.
4.2.3 gpsd aktivieren und starten
sudo systemctl enable gpsd.service sudo systemctl start gpsd.service
- enable sorgt dafür, dass gpsd bei jedem Neustart geladen wird.
- start startet gpsd sofort, ohne auf den nächsten Boot zu warten.
4.2.4 PPS-Modul beim Boot laden
Damit der Kernel das PPS-Signal immer erkennt, muss das Kernelmodul pps-gpio automatisch geladen werden.
4.2.4.1 Datei /etc/modules bearbeiten:
sudo vi /etc/modules
Am Ende der Datei hinzufügen:
pps-gpio
4.2.4.2 Erklärung:
- Jedes Mal, wenn der Pi bootet, wird dadurch das PPS-Modul geladen.
- In Verbindung mit dem Overlay-Eintrag in
config.txtsteht danach das Gerät/dev/pps0immer bereit.
4.2.5 Neustart
Zum Abschluss den Raspberry Pi neu starten, damit alle Änderungen wirksam werden:
sudo reboot
👉 Danach läuft gpsd und stellt die GPS- sowie PPS-Daten im System zur Verfügung. Im nächsten Schritt sollte man prüfen, ob alles korrekt funktioniert, z. B. mit cgps -s für GPS-Daten und ppstest /dev/pps0 für das Sekunden-Signal.
4.3 Erster Test: Funktioniert GPS und PPS?
Nach dem Neustart prüfen wir zunächst, ob der Raspberry Pi sowohl das GPS-Modul als auch das PPS-Signal korrekt erkennt.
4.3.1 GPS-Daten mit cgps testen
Der Befehl:
cgps -s
Beispielausgabe:
┌──────────────────────────────────────────┐┌──────────────────────────────────────────┐ │ Time: 2025-10-02T14:10:58.000Z ││PRN: Elev: Azim: SNR: Used: │ │ Latitude: 49.627369 N ││ 5 30 212 36 Y │ │ Longitude: 10.609570 E ││ 9 9 77 11 Y │ │ Alt (HAE,MSL): 315.2 m, 271.8 m ││ 13 88 195 19 Y │ │ Speed: 0.12 km/h ││ 14 63 95 28 Y │ │ Track (true, var): 64.8 deg ││ 15 56 291 28 Y │ │ Climb: 0.01 m/s ││ 17 13 124 35 Y │ │ Status: 3D FIX (231 secs) ││ 21 11 185 42 Y │ │ ││ 23 20 320 27 Y │ │ Long Err : 0.70, +/- 10.2 m ││ 24 3 292 12 N │ │ Lat Err : 0.65, +/- 9.8 m ││ │ │ Alt Err : 1.05, +/- 38.1 m ││ │ │ 2D Err : 0.92, +/- 23.7 m ││ │ │ 3D Err : 1.41, +/- 39.4 m ││ │ │ Time Err : 0.71 ││ │ │ ││ │ └──────────────────────────────────────────┘└──────────────────────────────────────────┘
4.3.1.1 Erklärung:
- Time: Aktuelle GPS-Zeit, hier in UTC.
- Latitude / Longitude: Geographische Position (in diesem Beispiel anonymisiert für Altschauerberg bei Neustadt a. d. Aisch).
- Alt (HAE, MSL): Höhe über Meeresspiegel in Metern.
- Speed / Track / Climb: Geschwindigkeit, Kurs und Steigrate (praktisch null, wenn das Modul stationär ist).
- Status: „3D FIX“ bedeutet, dass mindestens vier Satelliten empfangen werden, damit sind Höhe, Breite und Länge bestimmt.
Fehlerabschätzungen (DOP-Werte):
- HDOP (Horizontal Dilution of Precision): Genauigkeit in der Ebene.
- VDOP (Vertical DOP): Genauigkeit in der Höhe.
- PDOP (Position DOP): Kombinierte Genauigkeit in 3D.
- TDOP (Time DOP): Genauigkeit der Zeitangabe.
Satellitentabelle:
- GNSS: System (GP = GPS, GL = GLONASS, GA = Galileo, etc.).
- PRN: Kennnummer des Satelliten.
- Elev / Azim: Position des Satelliten am Himmel (Elevation = Höhe über Horizont, Azimuth = Himmelsrichtung).
- SNR: Signal-Rausch-Verhältnis (je höher, desto besser).
- Used: „Y“ = wird zur Positionsberechnung genutzt, „N“ = wird zwar empfangen, aber nicht verwendet.
4.3.2 PPS-Signal prüfen
Mit folgendem Befehl überprüfen wir, ob das Pulse-Per-Second-Signal korrekt ankommt:
sudo ppstest /dev/pps0
Beispielausgabe:
trying PPS source "/dev/pps0" found PPS source "/dev/pps0" ok, found 1 source(s), now start fetching data... source 0 - assert 1759396350.006310981, sequence: 16 source 0 - assert 1759396351.006317035, sequence: 17 source 0 - assert 1759396352.006323317, sequence: 18 source 0 - assert 1759396353.006330048, sequence: 19 ...
4.3.2.1 Erklärung:
- Jede Zeile zeigt einen Impuls pro Sekunde („Pulse Per Second“).
- assert: Zeitstempel des PPS-Signals in Sekunden seit UNIX-Epoch.
- sequence: fortlaufender Zähler, zeigt, dass die Impulse regelmäßig eintreffen.
Wenn man pro Sekunde eine neue Zeile sieht, funktioniert das PPS-Signal korrekt.
4.3.3 Fazit zum Test
cgps -sbestätigt: GPS-Modul empfängt Satelliten und liefert Position + Zeit.ppstestbestätigt: PPS-Signal wird erkannt und kommt exakt jede Sekunde.
👉 Damit ist die Grundlage geschaffen, um den Raspberry Pi als Stratum-1 NTP/PTP Zeitserver zu nutzen.
4.4 Installation des Network Time Protokoll Daemon
4.4.1 Warum Chrony (und was ist der Unterschied zu NTP/ntpd)?
NTP/ntpd ist der „Klassiker“ für Zeitsynchronisation. Chrony ist eine modernere Implementierung, die besonders gut mit schwankenden Latenzen, instabilen Quellen, kurzen Online-Phasen und PPS-Signalen klarkommt. In der Praxis sind das die wichtigsten Unterschiede:
- Konvergenz & Stabilität: Chrony passt die lokale Uhr schneller und stabiler an (kürzere Lock-Zeit, robust gegen Jitter).
- Guter Umgang mit PPS: Chrony kann ein serielles NMEA-Signal (GPSD) mit PPS sehr präzise „verheiraten“ (Lock).
- Besser bei Last/Packet-Delay: Chrony modelliert Netzwerk-Delay und Drift aggressiver → genauere Ergebnisse in „normalen“ Netzen.
- Ressourcen & Pflege: Schlank, Standard unter Debian/Raspberry Pi OS (Bookworm).
- ntpd/ntpsec: weiterhin solide, in vielen Umgebungen bewährt; Chrony ist jedoch meist genauer und reagiert flinker.
Kurz: Für einen GPS/PPS-basierten Stratum-1-Server ist Chrony erste Wahl, darum verwende ich es im Folgenden.
4.4.2 Installation von Chrony
sudo apt install chrony
Danach läuft der Dienst in der Regel bereits. Falls auf dem System noch systemd-timesyncd aktiv ist, kann man ihn abschalten:
sudo systemctl disable --now systemd-timesyncd.service 2>/dev/null || true
4.4.3 Konfiguration für GPS + PPS (Deine Datei)
Öffne die Hauptkonfiguration:
sudo vi /etc/chrony/chrony.conf
Trage folgenden Inhalt ein (oder ergänze ihn entsprechend), dieser Block entspricht Deiner Vorlage:
############################################################################### # Chrony Konfiguration - Raspberry Pi als Stratum-1 Zeitserver (GPS/PPS) ############################################################################### # --------------------------------------------------------------------------- # Einbinden zusätzlicher Konfigurationsdateien # --------------------------------------------------------------------------- confdir /etc/chrony/conf.d sourcedir /etc/chrony/sources.d # --------------------------------------------------------------------------- # Authentifizierung und Drift-Korrektur # --------------------------------------------------------------------------- # Schlüssel für NTP-Authentifizierung (normalerweise nicht genutzt) keyfile /etc/chrony/chrony.keys # Datei für Frequenzabweichung des lokalen Quarzes driftfile /var/lib/chrony/chrony.drift # Ablage für NTS-Cookies (falls Network Time Security genutzt wird) ntsdumpdir /var/lib/chrony # --------------------------------------------------------------------------- # Logging # --------------------------------------------------------------------------- # Logdateien für Diagnose (tracking, measurements, statistics) logdir /var/log/chrony # --------------------------------------------------------------------------- # Systemzeit / RTC # --------------------------------------------------------------------------- # Kernel synchronisiert alle 11 Minuten die Hardware-Uhr (RTC) rtcsync # Zeitzone für Schaltsekunden (TAI-UTC Differenz) leapsectz right/UTC # Wenn Abweichung >1 Sekunde beim Start, dann harter Sprung (statt langsames Slewing) makestep 1.0 -1 # --------------------------------------------------------------------------- # Initial-Start: Schneller Grob-Sync gegen PTB-Zeitserver # (nur beim Booten, um große Abweichungen sofort zu korrigieren) # --------------------------------------------------------------------------- initstepslew 60 ptbtime1.ptb.de ptbtime2.ptb.de ptbtime3.ptb.de # --------------------------------------------------------------------------- # Zeitquellen # --------------------------------------------------------------------------- # GPS über gpsd (Unix-Socket) refclock SOCK /var/run/chrony.ttyAMA0.sock refid GPS precision 1e-1 poll 3 # PPS-Signal für exakte Zeitsynchronisation # -> "lock GPS" bedeutet: PPS wird nur akzeptiert, wenn auch GPS-Signal gültig refclock SOCK /var/run/chrony.pps0.sock refid PPS precision 1e-7 lock GPS poll 3 # PTB-Server als Backup und Vergleichsquelle (nicht zur Steuerung genutzt) server ptbtime1.ptb.de iburst minpoll 5 maxpoll 5 noselect prefer server ptbtime2.ptb.de iburst minpoll 5 maxpoll 5 noselect server ptbtime3.ptb.de iburst minpoll 5 maxpoll 5 noselect # Lokale Stratum-Gewichtung: sorgt dafür, dass GPS/PPS Vorrang hat stratumweight 0 # --------------------------------------------------------------------------- # Zugriffskontrolle # --------------------------------------------------------------------------- # Erlaubt NTP-Abfragen aus dem internen Netz (hier 10.10.0.0/17) allow 10.10.0.0/17
Speichern und neu starten:
sudo systemctl restart chrony
4.4.3.1 Was bewirkt jede Zeile? (Erklärung & sinnvolle Anpassungen)
confdir / sourcedir
- Erlaubt Dir, Zusatzdateien sauber abzulegen (z. B. weitere Server oder Sonderregeln).
- Optional, aber ordentlich.
keyfile / driftfile / ntsdumpdir
driftfile: Chrony lernt die Frequenzabweichung Deines Quarzes → stabilere Zeit.keyfile: Nur nötig, wenn Du klassisches NTP-Auth nutzt.ntsdumpdir: Ablage für NTS-Cookies (falls Du NTS einsetzt).
logdir
- Schreibt Diagnose-Logs (z. B.
tracking,measurements,statistics) nach/var/log/chrony. - Hilfreich bei Fehlersuche.
rtcsync
- Schaltet den Kernel-Mechanismus ein, die Hardware-Uhr (RTC) alle 11 Minuten mit der Systemzeit zu beschreiben.
- Sinnvoll, damit der Pi beim Neustart nicht völlig „daneben“ liegt.
leapsectz right/UTC
- Nutzt die „right/UTC“-Zone mit Schaltsekunden-Information.
- So bleiben Sprünge korrekt modelliert.
makestep 1.0 -1
- Wenn die Abweichung größer als 1 s ist, wird gesteppt (harte Korrektur).
-1bedeutet: diese Regel gilt unbegrenzt (auch später, nicht nur beim Boot).- ↳ Für einen Zeitserver sinnvoll, um grobe Fehler zügig zu korrigieren.
initstepslew 60 ptbtime{1..3}.ptb.de
- Beim Booten (nur initial) darf Chrony bis 60 s sofort „steppen“, basierend auf externen PTB-Servern.
- Beschleunigt den Erst-Sync, falls GPS noch keinen Fix hat.
- Optional anpassbar: Du kannst hier eigene, nahe externe Zeitserver verwenden.
refclock SOCK /var/run/chrony.ttyAMA0.sock …
- Bindet die NMEA-Zeit ein, die
gpsdüber den Chrony-SOCK bereitstellt. refid GPS→ Klarer Name inchronyc sources.precision 1e-1≈ 0,1 s – typisch für NMEA.poll 3→ Poll-Intervall 2^3 = 8 s.- Wichtig: Der Pfad setzt voraus, dass
gpsddie Chrony-SOCK-Sockets anlegt (in Debian/RPi-OS üblich, wennDEVICESgesetzt sind).- Falls die Pfade bei einem System abweichen, prüfe mit
ls /var/run/chrony.*.sock.
- Falls die Pfade bei einem System abweichen, prüfe mit
refclock SOCK /var/run/….pps0.sock … lock GPS
- Bindet PPS ein (die präzise Sekundenmarke).
precision 1e-7≈ 100 ns – real erreichbare Genauigkeit ist natürlich systemabhängig, aber deutlich besser als NMEA.lock GPS→ PPS wird nur verwendet, wenn GPS valide ist (vermeidet „freie“ PPS-Ticks ohne Bezug).poll 3→ 8 s Abtastung (ausreichend, PPS kommt ja jede Sekunde).
server ptbtime.ptb.de … noselect*
- Nutzt PTB-Server nur als Vergleich/Monitoring, nicht zur Steuerung (
noselect). iburstbeschleunigt den Start.minpoll/maxpoll 5→ 32 s Poll-Intervall, gleichbleibend.- Hinweis:
preferhat in Kombination mitnoselectkeine Wirkung (optional entfernen oder belassen, es stört nicht).
stratumweight 0
- Deaktiviert die (geringe) Standardbevorzugung niedriger Strata.
- Damit gewinnen lokales GPS/PPS tatsächlich die Oberhand.
allow 10.10.0.0/17
- Erlaubt NTP-Anfragen aus Deinem LAN. Anpassen an das eigene Netz (z. B.
192.168.1.0/24). - Optional mehrere
allow-Zeilen für weitere Netze.
4.4.4 Rechteproblem bei Chrony-Sockets lösen
Standardmäßig legt Chrony die GPS- und PPS-Sockets unter /var/run/ an. Ohne Anpassung können andere Prozesse (z. B. gpsd) diese nicht immer verwenden.
Um das zu korrigieren, ergänzen wir einen ExecStartPost-Befehl in der Systemd-Unit von Chrony:
sudo systemctl edit chrony.service
Im Editor folgenden Block einfügen:
[Service] ExecStartPost=/bin/sh -c '/bin/chmod 666 /var/run/chrony.ttyAMA0.sock /var/run/chrony.pps0.sock || true'
Speichern und beenden.
Damit wird nach jedem Start von chronyd ein chmod 666 auf die beiden Socket-Dateien ausgeführt. Das bedeutet: alle Benutzer dürfen lesen und schreiben, das löst zuverlässig das Rechteproblem.
Anschließend:
sudo systemctl daemon-reload sudo systemctl restart chrony
4.4.5 Neustart & Kontrolle
sudo reboot
Prüfen:
ls -l /var/run/chrony*.sock
Die Dateien sollten nun rw-rw-rw- (666) haben.
4.4.6 Dienst prüfen
Nach dem Neustart:
sudo systemctl status chrony --no-pager chronyc sources -v chronyc tracking chronyc sourcestats -v
Erwartung:
- In
sourcessiehst Du GPS (NMEA) und PPS als Quellen; PTB-Server erscheinen mitx(noselect). trackingzeigt geringe „Last offset“-Werte (nach kurzer Einregelzeit).sourcestatsgibt Jitter/Offset-Statistiken je Quelle aus.
4.4.7 Was muss man ggf. anpassen?
- Netz-Freigabe:
allow …auf das eigene Subnetz ändern. - Externe Server:
initstepslew …auf eigene, zuverlässige Server anpassen (oder weglassen, wenn nur GPS/PPS gewünscht ist). - SOCK-Pfade: Wenn
gpsdauf Deiner Distribution andere Sockets anlegt, die Pfade in denrefclock SOCK …-Zeilen entsprechend anpassen (mitls /var/run/prüfen). - Firewall/Router: UDP/123 im LAN erlauben, damit Clients Deinen Pi als Zeitserver nutzen können.
- Zeitzone/Locale: Hat keinen Einfluss auf die UTC-Zeit, nur auf die lokale Darstellung.
4.5 Was ist PTP – und warum überhaupt?
PTP (IEEE 1588) ist ein Netzwerk-Protokoll zur hochpräzisen Zeitsynchronisation. Im Gegensatz zu NTP (typisch Millisekunden) erreicht PTP in lokalen Netzen Sub-Mikrosekunden bis Nanosekunden, vor allem wenn Hardware-Timestamping in der Netzwerkkarte (NIC) genutzt wird. Mit reinen Software-Timestamps landet man meist im Bereich einige 10 µs bis wenige ms, je nach Last und Netz. bootlin.com+2Oracle Docs+2
Wie funktioniert’s?
PTP verteilt Zeit in einer Hierarchie: Ein Grandmaster (GM) gibt die Referenzzeit vor (bei Dir: GPS/PPS → Chrony), Ordinary/Boundary Clocks folgen. Linux macht das mit linuxptp (Programme ptp4l, phc2sys). ptp4l spricht das Protokoll, phc2sys koppelt die PTP Hardware Clock (PHC) der NIC an die Systemuhr (oder umgekehrt). Red Hat Docs+1
4.5.1 Vorteil PTP
- Sehr hohe Genauigkeit im LAN (bis Sub-µs mit HW-Timestamps). bootlin.com
- Stabiler als NTP bei asynchronen Latenzen/Jitter. Red Hat
- Für Anwendungen mit strengen Timing-Anforderungen (Industrie/TSN, Telco, Hochfrequenzhandel u. ä.). Cisco
4.5.2 Realistische Erwartung mit Raspberry Pi
Ein Raspberry Pi mit GPS/PPS ist kein Meinberg-Grandmaster, dafür kostet er ~100 € statt ~20.000 €. Du bekommst sehr gute Ergebnisse für Labor, Heim- und viele KMU-Setups, aber nicht die letzten Nanosekunden im Worst-Case-Netz. Mit Hardware-Timestamping an der NIC sind sub-µs realistisch; mit Software-Timestamping eher < 100 µs bis ms. Quantum+1
Wichtig zu Raspberry-Pi-Modellen (HW-Timestamping):
- Pi 4 Model B: laut Raspberry-Pi-Forum kein HW-Timestamping. Raspberry Pi-Foren
- Compute Module 4/5: HW-Timestamping prinzipiell möglich, aber abhängig von Treiber/PHY-Support (Historie mit Treiber-/Firmware-Themen beachten). GitHub+1
- Pi 5: HW-Timestamping vorgesehen, es gab aber Treiber-Bugs/Issues in frühen Kerneln (Stand 2024). Prüfe Deinen Kernel/ethtool-Output. Alternativ bietet ein PCIe-NIC (z. B. Intel i210/i225/i226 auf HATs) sauberes HW-Timestamping. GitHub+1
4.5.3 PTP auf dem Raspberry Pi einrichten
4.5.3.1 linuxptp installieren
sudo apt install linuxptp
4.5.3.2 Prüfen, ob Deine NIC HW-Timestamping kann
ethtool -T eth0 ls -l /dev/ptp*
- HW-Timestamping:
ethtool -Tlistet u. a.SOF_TIMESTAMPING_TX_HARDWARE,RX_HARDWARE; zudem existiert oft /dev/ptp0 (PHC). - Nur Software-Timestamping: Es gibt keine/limitierte HW-Capabilities;
/dev/ptp*fehlt. In diesem Fall läuftptp4lweiterhin (mit geringerer Genauigkeit). docs.fedoraproject.org
Hinweis zu den Pi-Modellen s. oben, verifiziere immer mit
ethtool -T, da Support vom Kernel/PHY abhängt. Raspberry Pi-Foren+1
4.5.4 Architektur festlegen
- Dein Setup: GPS/PPS → Chrony diszipliniert die Systemuhr.
- Mit HW-Timestamping: Synchronisiere die PHC der NIC mit der Systemuhr (phc2sys), ptp4l verteilt Zeit vom PHC ins Netz.
- Ohne HW-Timestamping:
ptp4lnutzt die Systemuhr direkt (Software-Timestamps), Genauigkeit geringer, aber funktional. Red Hat Docs
4.5.4.1 Beispiel-Konfiguration (Grandmaster)
Lege z. B. /etc/linuxptp/ptp4l-gm.conf an:
[global] # # Default Data Set # twoStepFlag 1 #slaveOnly 0 socket_priority 0 priority1 128 priority2 128 domainNumber 0 utc_offset 37 clockClass 6 clockAccuracy 0x20 offsetScaledLogVariance 0x4000 free_running 0 freq_est_interval 1 dscp_event 0 dscp_general 0 dataset_comparison ieee1588 G.8275.defaultDS.localPriority 128 maxStepsRemoved 255 # # Port Data Set # logAnnounceInterval 1 logSyncInterval 0 operLogSyncInterval 0 logMinDelayReqInterval 0 logMinPdelayReqInterval 0 operLogPdelayReqInterval 0 announceReceiptTimeout 3 syncReceiptTimeout 0 delayAsymmetry 0 fault_reset_interval 4 neighborPropDelayThresh 20000000 gmCapable 1 masterOnly 1 G.8275.portDS.localPriority 128 asCapable auto BMCA ptp inhibit_announce 0 inhibit_delay_req 0 ignore_source_id 0 # # Run time options # assume_two_step 0 logging_level 6 path_trace_enabled 0 follow_up_info 0 hybrid_e2e 0 inhibit_multicast_service 0 net_sync_monitor 0 tc_spanning_tree 0 tx_timestamp_timeout 50 unicast_listen 0 unicast_master_table 0 unicast_req_duration 3600 use_syslog 1 verbose 0 summary_interval 0 kernel_leap 1 check_fup_sync 0 # # Servo Options # pi_proportional_const 0.0 pi_integral_const 0.0 pi_proportional_scale 0.0 pi_proportional_exponent -0.3 pi_proportional_norm_max 0.7 pi_integral_scale 0.0 pi_integral_exponent 0.4 pi_integral_norm_max 0.3 step_threshold 0.0 first_step_threshold 0.00002 max_frequency 900000000 clock_servo pi sanity_freq_limit 200000000 ntpshm_segment 0 msg_interval_request 0 servo_num_offset_values 10 servo_offset_threshold 0 write_phase_mode 0 # # Transport options # transportSpecific 0x0 ptp_dst_mac 01:1B:19:00:00:00 p2p_dst_mac 01:80:C2:00:00:0E udp_ttl 1 udp6_scope 0x0E uds_address /var/run/ptp4l # # Default interface options # clock_type OC network_transport UDPv4 delay_mechanism E2E time_stamping hardware tsproc_mode filter delay_filter moving_median delay_filter_length 10 egressLatency 0 ingressLatency 0 boundary_clock_jbod 0 # # Clock description # productDescription ;; revisionData ;; manufacturerIdentity 00:00:00 userDescription ; timeSource 0x20
Erläuterung:
priority1steuert die BMCA-Wahl (kleiner = „wichtiger“). Default ist 128. Für einen einzigen GM ist 127 ein guter Wert. Linux PTP Project+1clockClass/clockAccuracy/timeSourcesignalisieren Qualität des GM (GNSS-basiert). Vorgaben wie Class 6 und timeSource 0x20 sind verbreitet. Red Hat Docs+1network_transport: Viele Clients sprechen UDPv4. Manche Industrie-Geräte erwarten L2 (IEEE 802.3).domainNumber: Alle Teilnehmer innerhalb derselben Domain müssen denselben Wert nutzen (default 0). Debian Manpages
4.5.5 Dienste starten
4.5.5.1 Variante A – HW-Timestamping vorhanden (empfohlen)
- PHC ↔ Systemuhr koppeln (Systemuhr stammt von Chrony/GPS):
# PHC (z.B. /dev/ptp0) an CLOCK_REALTIME anbinden: sudo phc2sys -a -r -m # oder explizit: # sudo phc2sys -s CLOCK_REALTIME -c /dev/ptp0 -O 0 -m
- ptp4l als Grandmaster starten:
sudo ptp4l -f /etc/linuxptp/ptp4l-gm.conf -i eth0 -m
4.5.5.2 Variante B – nur Software-Timestamping
sudo ptp4l -f /etc/linuxptp/ptp4l-gm.conf -i eth0 -m -S
-S erzwingt Software-Timestamping; ptp4l nutzt die von Chrony stabilisierte Systemzeit. Genauigkeit ist geringer, aber für viele Szenarien ausreichend. docs.fedoraproject.org
4.5.6 PTP als Systemdienst einrichten
Bisher haben wir ptp4l und phc2sys nur manuell gestartet. Damit Dein Raspberry Pi dauerhaft als Grandmaster arbeitet, sollten die Dienste automatisch beim Booten starten. Das erreichen wir über systemd-Unit-Dateien.
4.5.6.1 Variablen- und Standardwerte hinterlegen
Zuerst legen wir eine Konfigurationsdatei an, in der wir zentrale Werte wie Netzwerkschnittstelle und Optionen für ptp4l/phc2sys ablegen.
sudo install -d -m 0755 /etc/default sudo tee /etc/default/linuxptp >/dev/null <<'EOF' # Netzwerkschnittstelle für PTP (ggf. anpassen, z. B. eth0 oder end0) IFACE=eth0 # Quelle für phc2sys: # CLOCK_REALTIME = von Chrony/GPS geführte Systemzeit # Alternativ könnte man auch eine PHC als Quelle nehmen PHC2SYS_SRC=CLOCK_REALTIME # Zusatzoptionen für ptp4l (z. B. -S für Software-Timestamps) PTP4L_EXTRA_OPTS="" # Zusatzoptionen für phc2sys # -O 0 bedeutet: kein Offset zwischen Systemuhr und PHC PHC2SYS_EXTRA_OPTS="-O 0" EOF
Erklärung:
IFACE=eth0→ Name des Netzwerkinterfaces, über das PTP läuft. Anpassen, falls Dein Pi z. B.end0oderenx…heißt.PHC2SYS_SRC=CLOCK_REALTIME→ Die von Chrony stabilisierte Systemzeit ist die Referenz. Sie wird auf die Hardware Clock (PHC) der NIC übertragen.PTP4L_EXTRA_OPTS→ Hier kann man Zusatzparameter hinterlegen, z. B.-S, wenn die NIC kein Hardware-Timestamping unterstützt.PHC2SYS_EXTRA_OPTS="-O 0"→ Kein zusätzlicher Offset, also 1:1-Übernahme der Chrony-Zeit in die PHC.
4.5.6.2 systemd-Unit für ptp4l (Grandmaster)
Nun erstellen wir die Service-Datei für den eigentlichen PTP Grandmaster-Dienst:
sudo tee /etc/systemd/system/ptp4l-gm.service >/dev/null <<'EOF' [Unit] Description=PTP Grandmaster (ptp4l) Documentation=man:ptp4l(8) After=network-online.target chrony.service Wants=network-online.target [Service] Type=simple EnvironmentFile=-/etc/default/linuxptp ExecStart=/usr/sbin/ptp4l -f /etc/linuxptp/ptp4l.conf -i $IFACE -m $PTP4L_EXTRA_OPTS Restart=on-failure RestartSec=2 [Install] WantedBy=multi-user.target EOF
Erklärung:
After=network-online.target chrony.service→ Startet erst, wenn Netzwerk und Chrony laufen.ExecStart=…→ Startetptp4lmit der Konfigurationsdatei/etc/linuxptp/ptp4l.conf.-i $IFACE→ Verwendet das in/etc/default/linuxptpangegebene Interface.-m→ Loggt Nachrichten direkt ins Journal, damit man mitjournalctl -u ptp4l-gmmitlesen kann.Restart=on-failure→ Falls der Dienst abstürzt, wird er automatisch neu gestartet.
4.5.6.3 systemd-Unit für phc2sys
Damit die PHC der Netzwerkkarte kontinuierlich mit der von Chrony geführten Systemzeit synchronisiert wird, erstellen wir einen zweiten Dienst:
sudo tee /etc/systemd/system/phc2sys-gm.service >/dev/null <<'EOF' [Unit] Description=Sync NIC PHC with GPS-synced system clock (phc2sys) Documentation=man:phc2sys(8) After=ptp4l-gm.service chrony.service Requires=ptp4l-gm.service [Service] Type=simple EnvironmentFile=-/etc/default/linuxptp # Systemzeit (Chrony/GPS) -> PHC der NIC ExecStart=/usr/sbin/phc2sys -w -s $PHC2SYS_SRC -c $IFACE -m $PHC2SYS_EXTRA_OPTS Restart=on-failure RestartSec=2 [Install] WantedBy=multi-user.target EOF
Erklärung:
Requires=ptp4l-gm.service→ Startet nur, wenn auch ptp4l läuft.-s $PHC2SYS_SRC→ Quelle, hierCLOCK_REALTIME(die von Chrony geführte Systemzeit).-c $IFACE→ Ziel, die PHC des angegebenen Interfaces.-w→ Wartet, bis PTP läuft, bevor synchronisiert wird.-m→ Loggt ins Journal.
4.5.6.4 Dienste aktivieren
Nach Anlegen der Dateien muss systemd die neuen Units einlesen und aktivieren:
sudo systemctl daemon-reload sudo systemctl enable --now ptp4l-gm.service phc2sys-gm.service
daemon-reload→ Systemd liest die neuen Unit-Dateien ein.enable --now→ Aktiviert die Dienste für den Autostart und startet sie sofort.
4.5.6.5 Kontrolle
- Status prüfen:
systemctl status ptp4l-gm.service phc2sys-gm.service - Logs mitlesen:
journalctl -u ptp4l-gm -f journalctl -u phc2sys-gm -f - PMCTest:
pmc -u -b 0 'GET CURRENT_DATA_SET' pmc -u -b 0 'GET TIME_STATUS_NP'
Damit läuft Dein Raspberry Pi 24/7 als GPS-synchronisierter PTP Grandmaster.
4.5.7 Das Problem mit den Schaltsekunden
Im Jahr 2025 haben wir derzeit +37 Schaltsekunden. Diese sind auch in der Konfiguration vorgesehen worden. Aber wenn jetzt mal eine Abfrage der Parameter gemacht wird, wird diese Korrektur zur UTC Zeit als nicht gültig deklariert:
sudo pmc -u -b 0 -t 0 'GET GRANDMASTER_SETTINGS_NP'
Das Ergbnis sieht dann wie folgt aus:
sending: GET GRANDMASTER_SETTINGS_NP 2ccf67.fffe.fccc11-0 seq 0 RESPONSE MANAGEMENT GRANDMASTER_SETTINGS_NP clockClass 6 clockAccuracy 0x20 offsetScaledLogVariance 0x4000 currentUtcOffset 37 leap61 0 leap59 0 currentUtcOffsetValid 0 ptpTimescale 0 timeTraceable 0 frequencyTraceable 0 timeSource 0x20
Es müssen noch die Parameter currentUtcOffsetValid, ptpTimescale und timeTraceable auf “1” gesetzt werden. Das geht am einfachsten über ein Management Befehl:
sudo pmc -u -b 0 -t 0 "SET GRANDMASTER_SETTINGS_NP \ clockClass 6 \ clockAccuracy 0x20 \ offsetScaledLogVariance 0x4000 \ currentUtcOffset 37 \ leap61 0 \ leap59 0 \ currentUtcOffsetValid 1 \ ptpTimescale 1 \ timeTraceable 1 \ frequencyTraceable 0 \ timeSource 0x20"
Damit nach einem Neustart das ganze automatisch erledigt wird, setze ich ein kleines Shellskript ein, das als Daemon automatisch gestartet wird, wenn der Prozess ptp4l initialisiert wurde und die Uhrzeit sich stabilisiert hat.
sudo tee /usr/local/sbin/ptp-gm-flags.sh >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
SOCKET="/var/run/ptp4l" # passt zu deiner ptp4l.conf
DOMAIN="0"
TS="0"
PMC="$(command -v pmc || echo /usr/sbin/pmc)"
# auf UDS-Socket warten (max ~2min)
for i in {1..240}; do
[[ -S "$SOCKET" ]] && break
sleep 0.5
done
[[ -S "$SOCKET" ]] || { echo "ERROR: ptp4l-Socket fehlt: $SOCKET"; exit 1; }
# auf MASTER-State warten (max ~5min)
for i in {1..600}; do
if "$PMC" -u -s "$SOCKET" -b "$DOMAIN" 'GET PORT_DATA_SET' | grep -q 'portState.*MASTER'; then
break
fi
sleep 0.5
done
# Flags setzen (kompletter Satz)
"$PMC" -u -s "$SOCKET" -b "$DOMAIN" -t "$TS" \
"SET GRANDMASTER_SETTINGS_NP clockClass 6 clockAccuracy 0x20 offsetScaledLogVariance 0x4000 currentUtcOffset 37 leap61 0 leap59 0 currentUtcOffsetValid 1 ptpTimescale 1 timeTraceable 1 frequencyTraceable 0 timeSource 0x20"
# verifizieren (loggt ins Journal)
"$PMC" -u -s "$SOCKET" -b "$DOMAIN" 'GET TIME_PROPERTIES_DATA_SET' || true
EOF
sudo chmod +x /usr/local/sbin/ptp-gm-flags.shJetzt die beiden Dienste:
sudo tee /etc/systemd/system/ptp-gm-flags.service >/dev/null <<'EOF' [Unit] Description=Setze GM-Flags (UTC valid, traceable) nach ptp4l-Start After=network-online.target Wants=network-online.target StartLimitIntervalSec=0 [Service] Type=oneshot ExecStart=/usr/local/sbin/ptp-gm-flags.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target EOF
und
sudo tee /etc/systemd/system/ptp-gm-flags.path >/dev/null <<'EOF' [Unit] Description=Watch for ptp4l socket and set GM flags [Path] PathExists=/var/run/ptp4l Persistent=true [Install] WantedBy=multi-user.target EOF
Danach die Dienste aktivieren und starten:
sudo systemctl daemon-reload sudo systemctl enable --now ptp-gm-flags.service sudo systemctl enable --now ptp-gm-flags.path sudo systemctl start ptp-gm-flags.service sudo systemctl start ptp-gm-flags.path
4.5.8 (Optional) NIC-Tuning bei Pi 5 / Intel-NIC
Einige Treiber bündeln Pakete (Coalescing). Geringere Latenzen bringen oft bessere PTP-Stabilität:
sudo ethtool -C eth0 rx-usecs 4 tx-usecs 4
(Beim Boot per systemd-Unit setzen.) Austin’s Nerdy Things
4.5.9^ Was muss man anpassen?
- Interface-Name:
eth0ggf. aufenx…/end0ändern. - PTP-Domain:
domainNumber(Pi & Clients identisch). Debian Manpages - Transport:
UDPv4vs.L2je nach Client. - Prioritäten/Policy:
priority1/2,clockClass/Accuracygemäß Deiner Rolle/Compliance. Linux PTP Project+1 - HW-TS-Support: Mit
ethtool -Tverifizieren; bei Problemen Kernel/NIC-Treiber prüfen (Pi 5/CM4 hatten bekannte Issues). Alternativ PCIe-Intel-NIC nutzen. GitHub+2GitHub+2
5. Fazit – vom Bastelprojekt zum ernstzunehmenden Zeitserver
Mit vergleichsweise geringem Aufwand lässt sich aus einem Raspberry Pi, einem GPS-Modul mit PPS-Ausgang und der passenden Software ein vollwertiger Stratum-1-Zeitserver aufbauen. Dank Chrony wird die Systemuhr des Pi präzise diszipliniert, während PPS die exakte Sekundenmarke liefert. In Kombination mit PTP (Precision Time Protocol) kann diese Zeit im lokalen Netz mit hoher Genauigkeit verteilt werden, weit über das hinaus, was klassisches NTP im Millisekundenbereich leistet.
Natürlich sollte man realistisch bleiben:
Ein Raspberry Pi mit GPS ist keine professionelle Meinberg-Grandmaster-Clock für fünfstellige Summen. In puncto Stabilität, Temperaturkompensation und absoluter Genauigkeit spielen die Industrieprodukte in einer ganz anderen Liga. Aber für rund 100 Euro Materialkosten erhält man eine Lösung, die im Labor, im Heimnetz, für VoIP-Telefonanlagen, Server-Umgebungen oder auch für kleinere Firmen vollkommen ausreicht, und in vielen Fällen eine Genauigkeit im Bereich von Mikrosekunden bis Millisekunden erreicht.
Die Vorteile liegen auf der Hand:
- Preis-Leistungs-Verhältnis: Für ein Zehntel bis Hundertstel der Kosten einer Profi-Clock erhält man eine solide Referenzzeit.
- Flexibilität: Mit Chrony, gpsd und linuxptp hat man volle Kontrolle über Konfiguration, Protokolle und Zugriffsrechte.
- Erweiterbarkeit: Der Zeitserver kann NTP und PTP parallel bedienen und damit praktisch alle Clients im Netzwerk versorgen.
- Lernfaktor: Man versteht im Detail, wie präzise Zeitverteilung funktioniert, etwas, das bei einer „Black Box“-Industrieuhr verborgen bleibt.
Wer den Raspberry Pi als Grandmaster einsetzt, sollte jedoch ein paar Punkte im Hinterkopf behalten: stabile Stromversorgung, gute GPS-Antenne mit freiem Himmel, korrekte PPS-Verdrahtung und ein Auge auf Kernel/Treiber, wenn es um Hardware-Timestamping geht.
Mein Fazit:
Ein Raspberry Pi als GPS-gestützter Zeitserver ist ein hervorragendes Projekt für alle, die Wert auf präzise Zeit im Netzwerk legen, sei es für Logging, Server, Telefonie oder einfach zum Lernen. Er ersetzt zwar keine professionelle Grandmaster-Clock in kritischen Infrastrukturen, doch für private und semi-professionelle Umgebungen ist er eine kostengünstige, praxisnahe und technisch spannende Lösung, die das Thema Zeitsynchronisation greifbar macht.
