Page 1 of 1

RTC Treiber neu starten

Posted: 14 Nov 2022, 11:56
by THeyd
Moin zusammen,

ich habe ein Problem mit der Real Time Clock festgestellt. Und zwar wenn das Revolutionpi Core 3+ nach längerer Nichtbenutzung neu gestartet wird, kann die RTC nicht vom Treiber gelesen werden, scheinbar weil sich die Kapazität noch auflädt. Der Kernel gibt in diesem Fall folgende Fehlermeldung:

Code: Select all

[    2.814106] rtc-pcf2127-i2c: probe of 1-0051 failed with error -121

Nach einem Reboot funktioniert dann alles wieder:

Code: Select all

[    2.935838] rtc-pcf2127-i2c 1-0051: oscillator stop detected, date/time is not reliable
[    2.936073] rtc-pcf2127-i2c 1-0051: registered as rtc0
[    2.937195] rtc-pcf2127-i2c 1-0051: oscillator stop detected, date/time is not reliable
[    2.937202] rtc-pcf2127-i2c 1-0051: hctosys: unable to read the hardware clock

Nun möchte ich per Skript checken, ob die RTC richtig initialisiert wurde und ggf. den Treiber neu laden, um ein Reboot zu vermeiden.
Allerdings bereitet mir das Laden des Treibers zur Laufzeit Probleme.

Laut Devicetree wird der Treiber "pcf2129" genutzt, welcher einen alias des "rtc_pcf2127" Treiber darstellt.

Daher kam mir die Idee, das Kernel Modul "rtc_pcf2127" mit modprobe neu zu laden:

Code: Select all

>>sudo modprobe rtc_pcf2127 -v

Allerdings scheint das Laden mit modprobe nicht geklappt zu haben, da mit dmesg im kernel log nichts geschrieben wurde und auch lsmod nicht anzeigt, dass das Modul geladen wurde. Modprobe selber liefert kein Ausgabe

Interessanterweise schreibt modinfo, dass das Modul nicht gefunden wurde:

Code: Select all

>>modinfo rtc_pcf2127
modinfo: ERROR: Module rtc_pcf2127 not found.
Nach etwas herumprobieren habe ich herausgefunden, dass der pcf2127 Treiber in den Modulen für die Kernelversion "v7l" enthalten sind (unter /lib/modules/5.10.103-rt62-v7l/kernel/drivers/rtc/), der laufende Kernel hat aber die Version "v7".

modprobe -S Kernelversion hat auch nicht geklappt

Code: Select all

 
>>sudo modprobe -S 5.10.103-rt62-v7l rtc-pcf2127 -v
insmod /lib/modules/5.10.103-rt62-v7l/kernel/drivers/base/regmap/regmap-spi.ko
modprobe: ERROR: could not insert 'rtc_pcf2127': Exec format error
bzw. Logeintrag im dmesg:

Code: Select all

 
[15818.711307] regmap_spi: disagrees about version of symbol module_layout

Wie kann ich nun den Treiber der RTC zur Laufzeit neu laden?
Danke im Voraus für jegliche Tipps und Hinweise!

Liebe Grüße
Torben

Re: RTC Treiber neu starten

Posted: 15 Nov 2022, 09:05
by nicolaiB
Hi Torben,

der RTC Treiber für v6 und v7 ist fest in den Kernel eincompiliert, sodass es nicht als Modul geladen bzw. entladen werden kann. Dein Versuch schlägt fehl, da du versuchst das v7l Modul zu laden. Du kannst den Treiber aber auch ohne das Modul zu entladen zurücksetzen:

Code: Select all

# I2C Adresse bestimmen (z.B. 1-0051)
ls /sys/bus/i2c/drivers/rtc-pcf2127-i2c/

# Adresse freigeben (Adresse ggf. mit der im ersten Schritt bestimmten austauschen) 
echo 1-0051 > /sys/bus/i2c/drivers/rtc-pcf2127-i2c/unbind

# Adresse binden (Adresse ggf. mit der im ersten Schritt bestimmten austauschen)
echo 1-0051 > /sys/bus/i2c/drivers/rtc-pcf2127-i2c/bin


Danach solltest du im Kernel Log sehen, dass der Treiber neu geladen wurde.

Gruß Nicolai

Re: RTC Treiber neu starten

Posted: 16 Nov 2022, 11:16
by THeyd
Hallo Nicolai,

danke für den Tipp, werde es bei Gelegenheit ausprobieren und gebe dann Rückmeldung, ob es geklappt hat.

Beste Grüße
Torben

Re: RTC Treiber neu starten

Posted: 16 Nov 2022, 14:05
by THeyd
wenn ich

Code: Select all

sudo echo 1-0051 > /sys/bus/i2c/drivers/rtc-pcf2127-i2c/unbind

eingebe bekomme ich eine permission denied Meldung.

mit

Code: Select all

 
 sudo sh -c "echo 1-0051 > /sys/bus/i2c/drivers/rtc-pcf2127-i2c/unbind"
 sudo sh -c "echo 1-0051 > /sys/bus/i2c/drivers/rtc-pcf2127-i2c/bind"
klappt es dann aber.

Vielen Dank!