RTC-Clock-Fehler (Failed to register)

  • Habe mich gestern Abend daran versucht, eine RTC auf meinem Pi anzubringen. Leider konnte ich nur Teilerfolge verzeichnen und die RTC funktioniert nicht wunschgemäss...


    Nach längerer Ursachenforschung (bin noch ein Pi-Newbie), bin ich auf folgenden Fehler gestossen, welcher wohl dafür sorgt, dass die RTC nicht so tut wie sie sollte:


    Code
    i2c i2c-1: Failed to register i2c client ds1307 at 0x68 (-16)


    Die Ausgabe von i2cdetect -y 1 bestätigt mir aber, dass sich die RTC dort befinden:

    Code
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 
    70: -- -- -- -- -- -- -- --    


    In der "/etc/rc.local" habe ich folgendes drin:

    Code
    echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
    sudo hwclock -s
    date


    In der "/etc/modules":

    Code
    i2c-dev
    rtc-ds1307


    -----------


    Dann bin ich während der Problemsuche noch über etwas anderes gestolpert, was ebenfalls nicht gut sein wird:


    systemctl status fake-hwclock.service gibt folgendes aus:

    Code
    ● fake-hwclock.service
       Loaded: masked (/dev/null; bad)
       Active: inactive (dead)
    
    Nov 21 06:49:42 raspberrypi systemd[1]: fake-hwclock.service: Cannot add dependency job, ignoring: Unit fake-hwclock.service is masked.
    Nov 21 06:49:45 raspberrypi systemd[1]: fake-hwclock.service: Cannot add dependency job, ignoring: Unit fake-hwclock.service is masked.
    Nov 21 06:49:46 raspberrypi systemd[1]: fake-hwclock.service: Cannot add dependency job, ignoring: Unit fake-hwclock.service is masked.

    EDIT: da fällt mir doch noch ein, dass die fake-hwclock während der RTC-Installation ja deaktiviert wird -> Daher kann die obige Ausgabe doch korrekt sein...



    Hinweis: Die RTC an sich funktioniert – sie gibt die korrekte Zeit aus und behält diese auch, wenn ich den Pi vom Strom und Netzwerk getrennt habe. Die Systemzeit hingegen geht nach dem anschliessenden Neustart (nachdem Strom getrennt wurde) falsch.


    Hat jmd. eine Idee worin das Problem der eingangs erwähnten Frage liegen könnte?

  • Habe mich gestern Abend daran versucht, eine RTC auf meinem Pi anzubringen. Leider konnte ich nur Teilerfolge verzeichnen und die RTC funktioniert nicht wunschgemäss...


    Hinweis: Die RTC an sich funktioniert – sie gibt die korrekte Zeit aus und behält diese auch, wenn ich den Pi vom Strom und Netzwerk getrennt habe. Die Systemzeit hingegen geht nach dem anschliessenden Neustart (nachdem Strom getrennt wurde) falsch.

    Ich denke wenn Du eine RTC hast, wird fake-hwclock (oder systemd-timesyncd) nicht benötigt.

    Hat dein PI Internetanschluss bzw. welches OS hast Du auf deinem PI und welche timezone auf deinem PI konfiguriert?

    Du könntest auf deinem PI, ntp mit der RTC benutzen:

    Code
    apt-cache show ntp

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Hat dein PI Internetanschluss

    Zurzeit ja – später dann nicht mehr -> deswegen auch die Installation der RTC


    welches OS hast Du auf deinem PI

    Zurzeit ist Raspbian Stretch installiert - sobald ich ein Backup erstellt habe, werde ich auf Buster upgraden


    welche timezone auf deinem PI konfiguriert?

    Current default time zone: Europa/Zurich

    Local time is now: Thu Nov 21 18:41:16 CET 2019

    Universal Time is now: Thu Nov 17:41:16 UTC 2019


    ---------


    Mein Hauptanliegen zurzeit wäre es, diese i2c-Fehlermeldung wegzubekommen. Ich gehe davon aus, wenn das richtig erkannt wird, kann ich dann auch die Systemzeit von der RTC abnehmen.

  • Mein Hauptanliegen zurzeit wäre es, diese i2c-Fehlermeldung wegzubekommen. Ich gehe davon aus, wenn das richtig erkannt wird, kann ich dann auch die Systemzeit von der RTC abnehmen.

    Der Eintrag in der /etc/rc.local ist nicht richtig:

    Code
    echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
    sudo hwclock -s
    date

    "sudo" sollte man in der rc.local nicht verwenden, weil diese schon mit root-Rechten ausgeführt wird. Evtl. auch absolute Pfade verwenden. Es kann aber auch sein, dass die Eintragungen in der rc.local, nicht zum richtigen Zeitpunkt bzw. nicht in der richtigen Reihenfolge/Abhängigkeit ausgeführt werden.

    M. E. wäre es besser wenn Du dafür deine service-unit erstellst.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Ich glaube das ist mein erster Fall am Pi denn ich liegen lassen muss. Habe gefühlte 100 Threads zu diesem Thema durchgelesen und jeder erzählt etwas anderes, oder hat sein Ziel auf einem anderem Weg erreicht als der Vorhergehende... Ich habe schon so viele Dinge nun probiert, dass ich langsam das Gefühl habe den Pi damit zu Schaden, resp. durch irgendwelche Änderungen unbewusst (mangels Wissen) ein "Ghetto" zu veranstalten.

  • und jeder erzählt etwas anderes,

    Weil das Internet nichts vergisst, und jede Anleitung nur am System des Autors funktioniert(e).


    Gerade beim i2c Modul hat sich beim Pi seit seinem ersten Erscheinen einiges geändert, sodass eine funktionierende Modulaktivierung nur dann gelingen kann, wenn die aktuelle Syntax am aktuellen System eingehalten wird. Diese ist in /boot/overlays/README beschrieben.


    Statt 100 mal ins Internet zu schauen brauchst Du nur einmal die README Textdatei durchlesen.



    Servus !

    RTFM = Read The Factory Manual, oder so

  • Diese ist in /boot/overlays/README beschrieben.

    ja, da hast du wohl recht. Leider habe ich diesen Hinweis nirgends aufgeschnappt.


    -----


    Ich denke meine Probleme sind hier begraben:


    Sollte jmd. hierzu noch etwas einfallen (ausser das ich wohl Bockmist gebaut habe), wäre ich darüber sehr dankbar.

    • Official Post

    Statt 100 mal ins Internet zu schauen brauchst Du nur einmal die README Textdatei durchlesen.

    Und es wird (bei mir Buster auf RPi4 4GB) sogar der 1307er als Beispiel genommen. ;)


  • Das habe ich vorhin auch durchgelesen – und natürlich auch gesehen, dass die den ds1307 verwenden (habe RPi 3B+ und Stretch) – muss mir aber zugestehen, dass ich hier recht am Anschlag laufe.


    Heisst das, dass ich den ganzen Part mit modprobe und echo, etc. nicht benötige und nur den Einzeiler (siehe Zeile 16 o. 23 oben) in meine config.txt ergänzen hätte müssen?


    Frage: Kann ich meine modprobe-Einstellungen irgendwie wieder auf Standard zurücksetzen?

    Frage2: Wie kann ich das Dokument «new_device» löschen? Selbst mit angemeldeten Root-Rechten klappt das nicht mehr.



    EDIT: Ich habe nun alle mir bekannten und möglichen Änderungen welche ich vorgenommen habe rückgängig gemacht. Einzig die modprobe-Befehle kann ich nicht anpassen. Zumindest habe ich nun beim Start keine Fehlermeldungen mehr (vorher hatte ich da einen load-kernel-module-Fehler).

  • EDIT: Ich habe nun alle mir bekannten und möglichen Änderungen welche ich vorgenommen habe rückgängig gemacht. Einzig die modprobe-Befehle kann ich nicht anpassen. Zumindest habe ich nun beim Start keine Fehlermeldungen mehr (vorher hatte ich da einen load-kernel-module-Fehler).

    Welche modprobe-Befehle meinst Du? I. d. R. sind die ja nicht persistent und nach einem reboot wieder weg.

    Oder hast Du die irgendwo eingetragen?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Welche ClockModuls hast du da?

    Mir kommt das irgendwie bekannt vor.

    So da isses wieder:


    Code
    dtoverlay=i2c-rtc,ds1307  <<-- wir in der boot drinne sein denke ich mal


    Ich bin mir ziemlich sicher das die fake-hwclock sich mit der "real" clock nicht versteht. Die solltest du "weg" machen :)


    Code
    sudo apt-get -y remove fake-hwclock
    sudo update-rc.d -f fake-hwclock remove
    sudo systemctl disable fake-hwclock



    Ich meine das man erst ein hwclock-set machen muss damit die rtc richtig funktioniert

    Edited once, last by Landixus ().

  • Gibt eine schöne Anleitung hier, wo das Einbinden der RTC DS1307 beschrieben ist.

    Das funktionierte auch bei meiner RTC, die keine DS1307 ist, da musste ich halt die Namen der Einträge angepasst werden.


    PS. Die DS1307 ist nicht sehr genau, die kann schon mal ein paar Sekunden vor oder nachgehen, da sie Temperaturabhängig ist.

  • Welche modprobe-Befehle meinst Du? I. d. R. sind die ja nicht persistent und nach einem reboot wieder weg.

    Oder hast Du die irgendwo eingetragen?

    Das wusste ich nicht... Es geht mir um Befehle wie zum Beispiel folgende: modprobe i2c_bcm2708 modprobe i2c_dev modprobe rtc-ds1307


    Aber wenn diese nicht persistent sind, dann hoffe ich damit nichts verändert zu haben, was ich später bereuen würde...



    Welche ClockModuls hast du da?

    Es ist eigentlich die DS3231SN (*Klick*) – gemäss einigen Internetbeiträgen (von denen ich ja mittlerweilen weiss, dass ich diese mit Vorsicht zu geniessen habe) sollte ich aber auch für diese RTC den ds1307-Code verwenden...


    dtoverlay=i2c-rtc,ds1307 <<-- wir in der boot drinne sein denke ich mal

    Ja, genau, dass habe ich in der /boot/config.txt drin.


    Ich bin mir ziemlich sicher das die fake-hwclock sich mit der "real" clock nicht versteht. Die solltest du "weg" machen :)

    Das kann gut sein, da die RTC eigentlich läuft und mir auch nach einer Strom-/Netzwerktrennung die korrekte Zeit ausgibt. Nur das System übernimmt mir nicht die RTC-Zeit. Ich werde die FakeClock heute Abend gemäss deinen Inputs oben einmal entfernen.


    Vielleicht noch eine Frage vorweg: Ich muss dem System ja sicher mitteilen, dass es nun die RTC-Zeit durch die FakeClock ersetzt -> geschieht dies mittilerweilen auch mit den DToverlay automatisch?


    -------


    Edit:

    Thomas H Danke für deinen Hinweis. Es ist aber ebenfalls eine alte Anleitung und beinhaltet Schritte, die jetzt – dank DToverlays – nicht mehr notwendig sind.

  • Das wusste ich nicht... Es geht mir um Befehle wie zum Beispiel folgende: modprobe i2c_bcm2708 modprobe i2c_dev modprobe rtc-ds1307

    In der Ausgabe von:

    Code
    lsmod

    kannst Du sehen ob die Module geladen sind. Man kann (falls erforderlich) Module auch manuell entfernen. Z. B.:

    Code
    sudo modprobe -rv <Modul>

    Siehe auch die manpage für modprobe.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Vielleicht noch eine Frage vorweg: Ich muss dem System ja sicher mitteilen, dass es nun die RTC-Zeit durch die FakeClock ersetzt -> geschieht dies mittilerweilen auch mit den DToverlay automatisch?


    -------

    Code
    sudo nano /lib/udev/hwclock-set
    
    #if [ -e /run/systemd/system ] ; then
    #exit 0
    #fi


    die 3 Zeilen aktiv setzen


    die auch noch

    Code
    /sbin/hwclock --rtc=$dev --systz --badyear
    /sbin/hwclock --rtc=$dev --systz



    Dann mal gucken:

    Code
    sudo hwclock -D -r


    Wenn richtig... reinschreiben:

    Code
     sudo hwclock -w


    evtl. vor beiden Aktionen ein "date" machen :)


    Beim nächsten reboot sollte alles passen wenn die Batterie nicht leer ist.

  • In der Ausgabe von:


    lsmod

    Dort steht bei mir (unter anderem):


    Code
    Module        Size    Used by
    rtc_ds1307    24576   0

    Daher gehe ich einmal davon aus, dass das Modul geladen wird. Etwas skeptisch macht mich die "0" -> Diese bedeutet ja, dass das Modul derzeit nicht verwendet wird. Was mich in der Annahme bestärkt, dass das System gar noch nicht weiss, dass es die Systemzeit von der RTC nehmen soll.

  • die 3 Zeilen aktiv setzen

    Erst einmal; Danke für deinen Beitrag. Deine Anpassung habe ich vorgenommen; meine aktuelle /lib/udev/hwclock-set sieht nun so aus:



    sudo hwclock -D -r

    Das gibt folgende Ausgabe (welche m.E. gut aussieht; Zeit stimmt auch):

    Systemzeit und RTC laufen nun identisch:

    Code
    date; sudo hwclock -r
    Fre Nov 22 11:16:04 CET 2019
    2019-11-22 11:16:03.986775+0100


    Habe den Pi mal neu gebootet, aber lsmod gibt immer noch ein Used by: 0 an. Kann mir vielleicht jmd. mit einer funktionierenden RTC sagen, ob da eine 1 stehen sollte?



    Bin zurzeit nur remote auf dem System (da nicht zuhause), daher kann ich den Pi nicht vom Strom/LAN trennen um zu testen, welche Zeit das System gerade zieht -> kann ich das allenfalls mit einer Abfrage klären?

  • Es ist eigentlich die DS3231SN (*Klick*) – gemäss einigen Internetbeiträgen (von denen ich ja mittlerweilen weiss, dass ich diese mit Vorsicht zu geniessen habe) sollte ich aber auch für diese RTC den ds1307-Code verwenden...

    kann ich bestätigen funktioniert (aber damals unter wheezy)


    Realtime Clock (RTC DS1307) am Raspberry Pi betreiben

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Edited once, last by jar ().

  • Habe den Pi mal neu gebootet, aber lsmod gibt immer noch ein Used by: 0 an. Kann mir vielleicht jmd. mit einer funktionierenden RTC sagen, ob da eine 1 stehen sollte?

    Wenn dort lediglich eine 0 steht, heißt das nicht, dass das Modul nicht benutzt/benötigt wird. Es wird nur von _anderen_ Modulen nicht benutzt bzw. andere Module sind davon nicht abhängig. Das sieht man z. B. wenn man so ein Modul (mit 0), entfernen will:

    Code
    :~# lsmod | grep ipv6
    ipv6                  450560  0
    Code
    :~# modprobe -rv ipv6
    rmmod ipv6
    modprobe: ERROR: ../libkmod/libkmod-module.c:793 kmod_module_remove_module() could not remove 'ipv6': Device or resource busy

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Ist i2c_arm (alias i2c) überhaupt enabled ? Das muss nicht automatisch funktionieren. dtparm=i2c_arm, oder dtparm=i2c.


    Zur Fehlersuche hilft auch der dt-Debug Modus.


    Wie ist eigentlich das RTC Modul tatsächlich verdrahtet ?



    Servus !

    RTFM = Read The Factory Manual, oder so