RTC DS3231 unter Raspbian stretch auf einem Raspberry Pi 3b+

  • Hallo Leute,

    ich habe ein Problem mit der real time clock (RTC) und zwar unter Raspbian stretch (v9).

    Folgende Anleitung habe ich zur Einrichtung des RTC verwendet: https://www.raspberrypi.org/forums/viewtopic.php?t=209700

    Der Treiber wird richtig eingebunden


    Code
    1. pi@raspberrypi:~ $ sudo i2cdetect -y 1
    2. 0 1 2 3 4 5 6 7 8 9 a b c d e f
    3. 00: -- -- -- -- -- -- -- -- -- -- -- -- --
    4. 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    5. 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    6. 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    7. 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    8. 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    9. 60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
    10. 70: -- -- -- -- -- -- -- --

    So weit so gut. fake-hwclock habe ich nicht entfernt, sondern nur deaktiviert:

    Code
    1. sudo systemctl disable fake-hwclock.service

    Die Uhrzeit wird in die RTC geschrieben. Die Uhrzeit wird dabei von der Systemzeit übernommen:

    Damit die Uhrzeit beim Neustart aus dem RTC ausgelesen wird, wird eine Regel erstellt.

    In der Datei /etc/udev/rules.d/85-hwclock.rules steht bei mir folgendes (Anleitung von oben):

    Code
    1. KERNEL=="rtc0", RUN+="/sbin/hwclock --rtc=$root/$name --hctosys"

    Um es zu testen, kann man auch ein anderes Datum in die RTC eintragen und neu starten. Und da kommt das Problem. Die Uhrzeit aus dem RTC wird nicht übernommen. Bei Raspbian jessie hat es funktioniert.


    Wenn man den Dienst systemd-timesyncd.service deaktiviert, dann wird die Uhrzeit aus dem RTC beim Start ausgelesen, aber dann wird die Systemzeit nicht über NTP synchronisiert. Irgendwie ist es doch so nicht gewollt, oder? Weiß jemand, was man hier ändern kann?


    Vielen Dank für eure Mühe

    Schönen Gruß

    olflab

  • Danke für den Hinweis hyle,

    diese Anleitung habe ich auch schon gelesen, aber sie ist ebenfalls für rasbian jessie. Damals trat das Problem nicht auf.

  • Hallo

    Auf meinem System sieht es so aus.

    uname -a

    # Linux dns1-raspi 4.14.98+

    less /etc/os-release

    # VERSION="9 (stretch)"

    less /boot/config.txt

    # Kontrolle

    dtparam=i2c_arm=on

    dtoverlay=i2c-rtc,ds3231

    #

    lsmod

    # Kontrolle der rtc Module "rtc_ds1307" "i2c_bcm2835" "hwmon" "i2c_dev"

    journalctl -p err

    # Keine Fehler

    systemctl status systemd-timesyncd.service

    # Um die Zeit automatisch zu korrigieren. Bei Bedarf einschalten.

    # sudo systemctl enable systemd-timesyncd.service

    # sudo systemctl start systemd-timesyncd.service

    timedatectl status

    # Kontrolle

    "Time zone: Europe/Berlin (CET, +0100)"

    "Network time on: yes"

    "NTP synchronized: yes"

    #

    type hwclock

    sudo hwclock --debug

    sudo hwclock -r && date

    # Kontrolle Zeit und Datum sollten gleich sein.

    #

    less /etc/udev/rules.d/85-hwclock.rules

    # Datei gibt es bei mir nicht.

  • Hallo Leute, vielen Dank für die Unterstützung. Ich habe das System gerade vollständig neu aufgesetzt und ein Upgrade durchgeführt. Danach RTC eingebunden. Folgendermaßen sieht es bei mir aus.

    $ uname -a

    Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux


    $ less /etc/os-release

    PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"

    NAME="Raspbian GNU/Linux"

    VERSION_ID="9"

    VERSION="9 (stretch)"

    ID=raspbian

    ID_LIKE=debian

    HOME_URL="http://www.raspbian.org/"

    SUPPORT_URL="http://www.raspbian.org/RaspbianForums"

    BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"


    $ less /boot/config.txt (Ausschnitt)

    dtparam=i2c_arm=on

    dtoverlay=i2c-rtc,ds3231


    $ lsmod

    Module Size Used by

    cmac 16384 0

    fuse 110592 5

    rfcomm 49152 4

    bnep 20480 2

    hci_uart 36864 1

    btbcm 16384 1 hci_uart

    serdev 20480 1 hci_uart

    bluetooth 368640 29 hci_uart,bnep,btbcm,rfcomm

    ecdh_generic 28672 1 bluetooth

    joydev 20480 0

    hid_logitech 36864 0

    rtc_ds1307 24576 0

    ff_memless 16384 1 hid_logitech

    hwmon 16384 1 rtc_ds1307

    brcmfmac 307200 0

    brcmutil 16384 1 brcmfmac

    cfg80211 573440 1 brcmfmac

    rfkill 28672 6 bluetooth,cfg80211

    snd_bcm2835 32768 2

    snd_pcm 98304 1 snd_bcm2835

    snd_timer 32768 1 snd_pcm

    i2c_bcm2835 16384 0

    snd 69632 7 snd_timer,snd_bcm2835,snd_pcm

    evdev 24576 0

    fixed 16384 0

    uio_pdrv_genirq 16384 0

    uio 20480 1 uio_pdrv_genirq

    i2c_dev 16384 0

    ip_tables 24576 0

    x_tables 32768 1 ip_tables

    ipv6 425984 32


    $ journalctl -p err (da taucht ein Haufen Fehler auf. Der letzte taucht immer wieder auf)

    -- Logs begin at Thu 2016-11-03 18:16:42 CET, end at Sat 2019-03-30 06:03:00 CET. --

    Mär 30 05:47:37 raspberrypi kernel: brcmfmac: brcmf_fw_map_chip_to_name: using brcm/brcmfmac43455-sdi

    Mär 30 05:47:37 raspberrypi kernel: brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0: Feb 27 2

    Mär 30 05:47:37 raspberrypi kernel: brcmfmac: brcmf_c_preinit_dcmds: CLM version = API: 12.2 Data: 9.

    Mär 30 05:47:45 raspberrypi bluetoothd[574]: Failed to obtain handles for "Service Changed" character

    Mär 30 05:47:45 raspberrypi bluetoothd[574]: Sap driver initialization failed.

    Mär 30 05:47:45 raspberrypi bluetoothd[574]: sap-server: Operation not permitted (1)

    Mär 30 05:47:45 raspberrypi bluetoothd[574]: Failed to set privacy: Rejected (0x0b)

    Mär 30 05:59:20 raspberrypi kernel: usb 1-1.1.2-port2: cannot reset (err = -32)


    $ systemctl status systemd-timesyncd.service (ist aktiv und läuft)

    ● systemd-timesyncd.service - Network Time Synchronization

    Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)

    Drop-In: /lib/systemd/system/systemd-timesyncd.service.d

    └─disable-with-time-daemon.conf

    Active: active (running) since Sat 2019-03-30 05:47:38 CET; 27min ago

    Docs: man:systemd-timesyncd.service(8)

    Main PID: 264 (systemd-timesyn)

    Status: "Synchronized to time server [2a01:4f9:c010:bf3::2]:123 (2.debian.pool.ntp.org)."

    CGroup: /system.slice/systemd-timesyncd.service

    └─264 /lib/systemd/systemd-timesyncd


    Mär 30 05:47:38 raspberrypi systemd[1]: Starting Network Time Synchronization...

    Mär 30 05:47:38 raspberrypi systemd[1]: Started Network Time Synchronization.

    Mär 30 05:48:16 raspberrypi systemd-timesyncd[264]: Synchronized to time server [2a01:4f9:c010:bf3::2


    $ timedatectl status

    Local time: Sa 2019-03-30 06:17:18 CET

    Universal time: Sa 2019-03-30 05:17:18 UTC

    RTC time: Sa 2019-03-30 05:17:18

    Time zone: Europe/Berlin (CET, +0100)

    Network time on: yes

    NTP synchronized: yes

    RTC in local TZ: no


    $ type hwclock

    hwclock ist /sbin/hwclock


    $ sudo hwclock --debug

    hwclock from util-linux 2.29.2

    Using the /dev interface to the clock.

    Assuming hardware clock is kept in UTC time.

    Waiting for clock tick...

    /dev/rtc does not have interrupt functions. Waiting in loop for time from /dev/rtc to change

    ...got clock tick

    Time read from Hardware Clock: 2019/03/30 05:21:24

    Hw clock time : 2019/03/30 05:21:24 = 1553923284 seconds since 1969

    Time since last adjustment is 1553923284 seconds

    Calculated Hardware Clock drift is 0.000000 seconds

    2019-03-30 06:21:23.608780+0100


    $ sudo hwclock -r && date

    2019-03-30 06:23:36.789942+0100

    Sa 30. Mär 06:23:36 CET 2019


    Also, bis hierher ist aus meiner Sicht alles OK, oder? Ach so, fake-hwclock habe ich vorher deaktiviert. Das Problem ist, dass wenn ich das System herunterfahre und nach einer Weile neu starte, ist die Uhrzeit falsch. Es ist die Uhrzeit beim Herunterfahren.


    Warum wird die Uhrzeit beim Start nicht aus dem RTC in die Systemzeit übertragen? Dafür habe ich früher die oben erwähnte Regel (85-hwclock.rules ) eingefügt. Diese funktioniert aber nicht mehr.


    Das war jetzt ein langer Beitrag, aber ich hoffe, dass ihr mir helfen könnt.


    Also, was habe ich falsch gemacht? Funktioniert es bei euch?

  • Ich habe das System gerade vollständig neu aufgesetzt und ein Upgrade durchgeführt. Danach RTC eingebunden.

    Die Frage ist wieder, wie "eingebunden" ?


    Und wie schaut jetzt

    < ls -al /lib/systemd/system/hwclock* >

    aus.


    Servus !

    RTFM = Read The Factory Manual, oder so


  • Und wie schaut jetzt

    ls -al /lib/systemd/system/hwclock*

    Hallo

    Auf meinem System steht

    ls -al /lib/systemd/system/hwclock*

    lrwxrwxrwx 1 root root 9 Feb 17 09:22 /lib/systemd/system/hwclock.service -> /dev/null


    # Der Service ist aktiv.

    systemctl status fake-hwclock.service


    Der Link von STF zeigt viele gute Infos.
    Wobei zb. /etc/init.d/ oder update-rc.d nur noch vorhanden sind, um mit dem alten init System kompatibel zu sein.

    In Arch Linux für den RasPi gibt es nur noch systemd ohne Kompromisse.

    Das c Programm läuft bei mir nicht. "RTC-Deviceadresse wurde nicht gefunden!"



    Bitte mal testen und die Zeilen auskommentieren Step 1.

    sudo nano /etc/init.d/hwclock.sh

    Code
    1. #if [ -d /run/udev ] || [ -d /dev/.udev ]; then
    2. # return 0
    3. #fi

    Oder als Step 2.

    sudo nano /lib/udev/hwclock-set

    Code
    1. #if [ -e /run/systemd/system ] ; then
    2. # exit 0
    3. #fi



  • Quote

    Letztens habe ich an meinem Automations-Pi eine DS3231 angebracht, das deaktivieren hat nicht gereicht. Guck hier.

    Wow, STF, das hats gebracht. fake-hwclock muss nicht nur deaktiviert werden, sondern vollständig entfernt werden. Warum auch immer. Aber jetzt scheint es zu funktionieren! :bravo2:

    Werde noch einige Tests machen. Aber das sieht vielversprechend aus.

  • Letzte Aktualisierung: 05/02/2018 11:29:51 steht im Netzmafia-Link, aber von systemd lese ich dort noch nichts, die Beispiele sind auch mit Datum 2015 versehen
    Mit Debian 9 (Stretch) wurde das ganze Linux System auf systemd umgestellt und
    systemd wird mit
    systemctl administriert .


    Servus !

    RTFM = Read The Factory Manual, oder so

  • systemctl administriert

    Musst ja nicht gleich impulsiv werden. (; Das mag ja alles sein, auch, dass teilweise Einträge von 2015 dort erscheinen. Nur funktioniert es eben genau nicht, wenn Du den systemd Dienst einfach deaktivierst. Das Kommentieren der Zeilen, die wohl auf Grund der Rückwärtskompatibilität immer noch genau so vorhanden sind und auch durchlaufen werden, macht das Ganze erst möglich. So isses dann, wenn nicht konsequent alte Zöpfe abgeschnitten werden. Es hatte mich auch gewundert...


    Grüße, STF

  • OK. Um Missverständnisse zu vermeiden, beschreibe ich, was ich gemacht habe.

    1. In der Datei /boot/config.txt folgendes ergänzen, bzw. einkommentieren

    Code
    1. dtparam=i2c_arm=on
    2. dtoverlay=i2c-rtc,ds3231

    2. Neustart und danach mit sudo i2cdetect -y 1 geprüft, ob der Treiber geladen wird. (OK)

    3. fake-hwclock nicht nur deaktiviert, sondern entfertnt: sudo apt-get purge fake-hwclock. So wie in der Anleitung beschrieben.

    4. Damit die Zeit beim Bootvorgang aus der RTC in die Systemzeit übertragen wird, habe ich eine neue Regel erstellt: sudo nano /etc/udev/rules.d/85-hwclock.rules (Anleitung aus dem ersten Beitrag). In der Datei steht nur

    Code
    1. KERNEL=="rtc0", RUN+="/sbin/hwclock --rtc=$root/$name --hctosys"


    Heute funktioniert es immer noch. Als Zusatzinformation kann ich bestätigen, dass die Uhrzeit bei der Winter-Sommerzeitumstellung sich ebenfalls geändert hat.

    p.s. Bin mal gespannt, was mit der Zeitumstellung demnächst passiert.


    Allen ganz herzlichen Dank

  • Nur funktioniert es eben genau nicht, wenn Du den systemd Dienst einfach deaktivierst.

    Wieso deaktivieren ?

    Im Gegenteil. Mit der Ausgabe von

    lrwxrwxrwx 1 root root 9 Feb 17 09:22 /lib/systemd/system/hwclock.service -> /dev/null

    wird angezeigt, dass ein hwclock.service existiert und deaktiviert ist (link auf /dev/null).


    Damit die RTC Zeit in den Kernel beim Booten automatisch übernommen wir, muss wohl das hwclock.service nicht nur gestartet, sondern auch enabled werden.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • sondern auch enabled werden

    Schon, funktioniert nur nicht. Da bin ich ja auch drüber gestolpert. Du musst entweder Hand anlegen (oder den Dienst komplett rausschmeißen so wie es der TO getan hat). Es ist und bleibt Murks, wenn nicht komplett umgestellt wird.

  • Der TO redet aber von fake-hwclock.service.

    Bei mir fehlt "fake-"


    Aber wenn es jetzt mit udev funktioniert,braucht er das #systemctl enable hwclock.service auch nicht mehr, zumindest solange einmal ein Programm mit der Meldung "file createt in the future" abort Y/N stehen bleibt.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Im Gegenteil. Mit der Ausgabe von

    lrwxrwxrwx 1 root root 9 Feb 17 09:22 /lib/systemd/system/hwclock.service -> /dev/null

    wird angezeigt, dass ein hwclock.service existiert und deaktiviert ist (link auf /dev/null).

    BTW: Der symlink auf /dev/null zeigt, dass die service unit masked ist. Wenn sie nur deaktiviert wäre könnte man diese manuell starten, aber wenn sie masked ist, geht das nicht.

  • Ich glaube, ich muss noch mal zurückrudern. Ich Habe WLAN nicht deaktiviert. Wenn man es deaktiviert, scheint es doch nicht zu laufen. irgendwie ist da noch der Wurm drinnen.

    Ich habe übrigens die gleiche Ausgabe wie md_fg:

    ls -al /lib/systemd/system/hwclock*

    /lib/systemd/system/hwclock.service -> /dev/null


    Den Dienst hwclock könnte ich nicht aktivieren.

    #systemctl enable hwclock.service

    irgendwas ist da maskiert. Wie kann man es aktivieren?

    RTFM, kannst du beschreiben, wie man es richtig macht?