Ein kleiner Workarround um den CarPi doch noch mit GPS Zeit zu versorgen:
Ich verwende einen RasPi 3 mit "2016-09-23-raspbian-jessie" und dem "current_carpc.zip" von cbrauweiler.
Als GPS Empfänger verwende ich die USB Maus "Navilock NL-602U".
Die Maus belegt /dev/ttyACM0 - das muss also in /etc/default/gpsd entsprechend eingetragen sein.
Mir ist aufgefallen, dass der Sync mit dem NTPD ganz gut läuft, wenn die Zeit Differenz nicht zu groß ist (ne Stunde oder so).
Wenn aber der RasPi über Nacht ausgeschaltet war, konnte der NTPD auch nach längerer Zeit (>2h) nicht synchronisieren.
Wenn ich jedoch die Adresse 127.127.20.0 in die /etc/ntp.conf eingetragen habe, funktioniert der Sync auf Anhieb.
Leider blockiert mit dieser ".20"-Adresse die Verbindung zur GPS-Maus, so dass Cgps und Navit Probleme haben.
Meine Lösung sieht so aus:
In der /etc/rc.local setze ich die Uhrzeit auf 3:00 nachts
Meine /etc/ntp.conf schaut so aus:
Code:
...
server 127.127.28.0 minpoll 4 maxpoll 4 prefer
fudge 127.127.28.0 time1 0.183 refid NMEA
Damit synchronisiert der NTPD nur, wenn die Zeitdifferenz nicht zu groß ist.
Aber Cgps und Navit laufen einwandfrei.
ntpq -p liefert eine Ausgabe wie:
Code:
remote refid st t when poll reach delay offset jitter
==============================================================================
*SHM(0) .NMEA. 0 l 10 16 377 0.000 -13.354 5.535
Wobei der * in Spalte 1 den aktiven Sync anzeigt.
Zum schnellen Sync beim Kaltstart habe ich eine weitere ntp1.conf angelegt.
Code:
...
server 127.127.20.0 minpoll 4
fudge 127.127.20.0 time1 0.183 refid NMEAs
Die Idee dahinter ist: Beim Kaltstart soll der ntpd ggf. ein paar mal mit der "falschen" Config laufen um eine schnelle Synchronisation zu erzwingen, und dann normal weiter laufen.
Dazu habe ich ein Skript checkntpd in /root angelegt:
Code:
#!/bin/bash
# checkntpd: testet ob SHM Verbindung hat
# startet ggf. den ntpd mit "falscher" Config
/usr/bin/ntpq -p | grep "*"
if [ $? -eq 1 }; then
/bin/echo " ==> checkntpd @ `date`" >> /var/log/syslog
/usr/sbin/service ntp stop
/bin/sleep 2
/usr/sbin/ntpd -g -q -c /etc/ntp1.conf
/bin/sleep 2
/usr/sbin/service ntp start
fi
Im Skript wird der "echte" NTPD abgeschaltet und ntpd mit dem "falschen" Skript /etc/ntp1.conf gestartet.
Die Optionen -g und -q sorgen dafür, dass auch große Differenzen ausgeglichen werden können und dass sich ntpd nach einem Sync-Versuch wieder beendet.
Das Skript rufe ich aus der root Crontab auf:
Code:
1-6,10,15,20 3 * * * /root/checkntpd > /dev/null 2>&1
Da bei mir die Uhr im Kaltstart immer auf 3 Uhr nachts eingestellt wird, läuft das Skript zunächst jede Minute, dann noch um 3:10, 3:15 und 3:20 falls der GPS Empfang mal sehr schlecht ist (z.B. beim Testen im Haus).
Meistens greift die Synchronisation schon nach der ersten oder zweiten Minute. Dann steht die Uhr auf der realen Zeit und das Skript läuft erst wieder um 3:01 Uhr nachts - da fahr ich aber eher selten
Eine weitere Änderung ist noch notwendig, damit ntpd auch wirklich die /etc/ntp.conf verwendet.
In /etc/init.d/ntp sind ziemlich am Anfang die Zeilen auszuschalten (# vorsetzen)
Code:
...
#if [ -e /var/lib/ntp/ntp.conf.dhcp ]; then
# NTPD_OPTS="$NTPD_OPTS -c /var/lib/ntp/ntp.conf.dhcp"
#fi
...
Mit diesen Änderungen stellt sich meine Uhr recht schnell ein, auch wenn der CarPC über Nacht ausgeschaltet war.
BTW: ich habe die Option -g beim ntpd mit der echten Config laufen. Da schert sich ntpd seltsamerweise einen Dreck darum.