GPIO-Ärger auf dem Raspberry Pi 5
(Aktualisiert 13.9.2024) Mit der Auslieferung des Raspberry Pi 5 im Herbst 2024 hat sich bei einigen Low-Level-Tools der GPIO-Zugriff geändert: Für die Modelle bis einschließlich Raspberry Pi 4 erfolgt der GPIO-Zugriff über chip0 bzw. /dev/gpiochip0. Beim Raspberry Pi musste dagegen chip4 bzw. /dev/gpiochip4 verwendet werden. Scripts, die universell auf alten und neuen Geräten laufen sollten, brauchten eine entsprechende Fallunterscheidung.
Mit Kernel 6.6.47, der mittlerweile standardmäßig als Update unter Raspberry Pi OS installiert wird, ändert sich wieder alles! Auch beim Raspberry Pi 5 muss nun /dev/gpiochip0 verwendet werden. Eine Referenz aller internen GPIO-Nummern gibt cat /sys/kernel/debug/gpio.
Die Änderung betrifft unter anderem:
- Python: gpiozero, lgpio, gpiod
- Bash: gpioset, gpioget
- C: lgpio, libgpiod, wiringpi
Scripts, die mit diesen Modulen bzw. Bibliotheken verfasst wurden, müssen geändert werden (Umstellung von GPIO-Chip 4 auf GPIO-Chip 0). Im Folgenden habe ich diesbezüglich Anleitungen für diverse Fälle zusammengefasst.
13.9.2024: Mit dem neuesten Update von Raspberry Pi OS wird ein Link von /dev/gpiochip4 auf /dev/gpiochip0 eingerichtet, wodurch die Auswirkungen des veränderten Kernels in den meisten Fällen nicht mehr spürbar sind.
ls -l /dev/gpiochip*
crw-rw---- 1 root gpio 254, 0 13. Sep 08:39 /dev/gpiochip0
crw-rw---- 1 root gpio 254, 10 13. Sep 08:39 /dev/gpiochip10
crw-rw---- 1 root gpio 254, 11 13. Sep 08:39 /dev/gpiochip11
crw-rw---- 1 root gpio 254, 12 13. Sep 08:39 /dev/gpiochip12
crw-rw---- 1 root gpio 254, 13 13. Sep 08:39 /dev/gpiochip13
lrwxrwxrwx 1 root root 9 13. Sep 08:39 /dev/gpiochip4 -> gpiochip0
Von gpiozero gibt es mittlerweile eine aktualisierte Version, die das richtige Chip-Device erkennt.
Python-Scripts mit gpiozero
Beim Start derartiger Scripts auf dem Raspberry Pi 5 mit dem aktuellen Kernel (>= 6.6.47) tritt die Fehlermeldung can not open gpiochip auf. Das Script bricht ab. Der Fehler ist bekannt, es wird demnächst eine neue Version des Python-Modules geben. Bis dahin ist es am einfachsten, das Script wie folgt zu starten:
RPI_LGPIO_CHIP=0 ./gpiozero-led.py
Alternativ führen Sie export RPI_LGPIO_CHIP=0 aus und fügen diese Anweisung auch in /home/your-account/.bashrc ein. Eine weitere Möglichkeit ohne die externe Definition von Umgebungsvariablen besteht darin, am Beginn Ihres Python-Scripts die folgende Zeile einzubauen:
import os
os.environ['RPI_LGPIO_CHIP']='0'
Im gpiozero-Issue ist auch von PWM-Problemen zu lesen, die sich selbst mit RPI_LGPIO_CHIP=0 nicht lösen lassen. Das kann ich nicht bestätigen. Mein PWM-Test-Script gibt zwar eine Warnung aus, funktioniert aber.
Python-Scripts mit lgpio
Wenn Sie in Ihrem Python-Script das lgpio-Modul verwenden, müssen Sie den Handle nun IMMER mit gpiochip_open(0) öffnen, also:
# alle Raspberry-Pi-Modelle mit aktuellen Kernel >= 6.6.45
handle = lgpio.gpiochip_open(0)
# Raspberry Pi 5 mit Kernel < 6.6.45
# handle = lgpio.gpiochip_open(4)
Python-Scripts mit gpiod
Wenn Sie in Ihrem Python-Script das gpiod-Modul verwenden, müssen Sie die Initialisierung nun IMMER mit 'gpiochip0' durchführen, also:
chip = gpiod.Chip('gpiochip0') # alle Modelle mit Kernel >= 6.6.45
# chip = gpiod.Chip('gpiochip4') # Raspberry Pi 5 mit Kernel < 6.6.45
pinout-Kommando
Auch das Kommando pinout liefert zur Zeit Fehlermeldungen (can’t connect to pigpio at localhost sowie Unable to initialize GPIO Zero). Hinter den Kulissen handelt es sich bei dem Kommando um ein Python-Script, das gpiozero verwendet. Bis dieses Modul aktualisiert wird, hilft der oben schon erwähnte Trick mit RPI_LGPIO_CHIP=0 weiter, also:
RPI_LGPIO_CHIP=0 pinout
bash-Scripts mit gpioset, gpioget und gpiomon
Bei den genannten Kommandos übergeben Sie als ersten Parameter die Chip-Nummer. Ab Kernel 6.6.45 lautet diese IMMER 0, also z.B.:
chip=0
gpioset $chip 7=1 # GPIO 7 (Pin 26) auf "high" stellen
gpioset $chip 7=0 # GPIO 7 (Pin 26) auf "low" stellen
bash-Scripts mit pinctrl
Hier ändert sich nichts. pinctrl war schon in der Vergangenheit in der Lage, die richtige Chip-Nummer selbst zu erkennen, und das funktioniert weiterhin. Großartig!
pinctrl set 7 op dh # LED an Pin 26 ein
pinctrl set 7 op dl # LED an Pin 26 aus
C-Programme mit lgpio
Ab Kernel 6.6.45 müssen Sie IMMER die Chip-Nummer 0 verwenden, also:
#define CHIP 0
...
h = lgGpiochipOpen(CHIP); // open connection to I/O chip
C-Programme mit gpiod
Ab Kernel 6.6.45 müssen Sie IMMER "gpiochip0" verwenden, also:
char *chipname = "gpiochip0";
chip = gpiod_chip_open_by_name(chipname);
...
wiringpi
Die von Gordon Drogon entwickelte wiringpi-Bibliothek ist seit vielen Jahren veraltet (gilt bis Version 2.5).
2024 hat der Grazer Computer Club die Wartung der Bibliothek übernommen. Damit ist diese Bibliothek (jetzt in Version 3.0) wieder verwendbar! Weitere Informationen sowie Installationshinweise gibt es auf der GitHub-Projektseite:
https://github.com/WiringPi/WiringPi
Persönliche Anmerkung
Diese ganze Angelegenheit ist ein einziges Trauerspiel. Dass beim Raspberry Pi 5 anfänglich /dev/gpiochip4 als interne GPIO-Schnittstelle verwendet wurde (und nicht von Anfang an /dev/gpiochip0 wie bei früheren Raspberry-Pi-Modellen), war schon eine äußerst fragwürdige Entscheidung. Aber die Schnittstelle jetzt, fast ein Jahr nach dem Release des Raspberry Pi 5 und Raspberry Pi OS Bookworm, zu ändern, ist einfach irrsinnig.
Mit dem Kernel-Update funktionieren unzählige GPIO-Scripts von einen Tag auf den anderen nicht mehr. So etwas muss von vorne herein vermieden werden, und, wenn es denn gar nicht anders geht, viel viel besser kommuniziert werden. Die Maintainer der GPIO-Bibliotheken waren offenbar allesamt überrascht von der Änderung. Unprofessioneller geht’s nicht.
Hintergründe / Links
- https://forums.raspberrypi.com/viewtopic.php?t=359302
- https://forums.raspberrypi.com/viewtopic.php?t=361116
- https://github.com/domoticz/domoticz/issues/6040
- https://github.com/WiringPi/WiringPi/issues/280
- https://stackoverflow.com/questions/78452048/not-able-to-access-gpio-pins-on-my-raspberry-pi-5
- https://github.com/raspberrypi/linux/pull/6144
- https://github.com/gpiozero/gpiozero/issues/1166
Dieser Blog-Beitrag ist ursprünglich unter https://pi-buch.info/low-level-gpio-zugriff-geaendert-mit-kernel-6-6/ erschienen. Danke an Hr. Strohmayer, der mich als erster auf dieses Problem aufmerksam gemacht hat.
Letzte Woche wurden Upgrades auf Ubuntu 24.04.1 LTS vorübergehend ausgesetzt. Grund dafür waren unerwartete Abhängigkeitsprobleme bei Kernel-Headern nach dem Upgrade. Der Fehler war unter der Nummer 2078720 dokumentiert und wurde inzwischen behoben. Ab sofort sind die Upgrades wieder möglich. Hauptproblem: Fehlende Kernel-Header-Abhängigkeiten Das neue Upgrade-Tool *ubuntu-release-upgrader* führte einen verbesserten Algorithmus ein. Leider kam es dabei […]
Ein Linux-System bietet Flexibilität und Kontrolle, aber mit dieser Freiheit kommen auch Verantwortung und die Notwendigkeit, bestimmte Vorsichtsmaßnahmen zu treffen. Denn Ihr wisst ja von Onkel Ben: Aus großer Kraft folgt große Verantwortung. Wenn du möchtest, dass dein Linux-Erlebnis reibungslos, sicher und effizient verläuft, gibt es einige Dinge, die du auf keinen Fall tun solltest. […]
Es gibt so einige Dinge, mit denen Du Dein Linux System schnell beschädigen kannst. Im schlimmsten Fall droht sogar Datenverlust. In dieser Folge nenne ich 6 Dinge, die Du besser nicht machst, wenn Dir Dein System etwas bedeutet.
Das Debian-Projekt hat die Veröffentlichung von Debian 12.7 “Bookworm” bekannt gegeben. Das aktualisierte ISO Installationsmedium für das aktuelle Debian GNU/Linux 12 „Bookworm“ Betriebssystem steht zum Download zur Verfügbung. Debian 12.7 wurde nur zwei Monate nach Debian 12.6 veröffentlicht und stellt seltsamerweise das sechste Point-Release von Debian Bookworm dar. Dabei handelt es sich um das sechste, […]
Linux, das 1991 von Linus Torvalds ins Leben gerufen wurde, begann als ein bescheidenes Projekt eines finnischen Informatikstudenten, entwickelte sich jedoch schnell zu einem bedeutenden Akteur in der Welt der Betriebssysteme. In den ersten zehn Jahren seiner Existenz erlebte Linux eine rasante Entwicklung und wachsende Popularität, insbesondere unter Programmierern und IT-Enthusiasten. Die Open-Source-Natur des Projekts […]
Wir leben in einer Zeit, in der der Begriff “Microsoft Linux” keine verwunderten Blicke mehr hervorruft. Der Technologieriese aus Redmond, der einst Linux als “Krebs” bezeichnete, nutzt es nun als Grundlage für seine milliardenschwere Azure Cloud-Plattform. Wie die meisten wissen, gehört LinkedIn, das weltweit führende soziale Netzwerk für Berufstätige, seit Dezember 2016 vollständig zu Microsoft. […]
Der 25. August dürfte vielen FOSS und Linux Freunden ein besonderer Feiertag sein, denn es bedeutet, dass Linux 33 Jahre alt wird. Am 25. August 1991 kündigte der damals 21-jährige finnische Student Linus Benedict Torvalds in der Newsgroup comp.os.minix an, dass er an einem kostenlosen Betriebssystem für 386 (486) AT-Klone arbeitet – „nur als Hobby“. […]
Wenn man an Fedora denkt, fällt einem meist die Fedora Workstation ein, die seit Jahren mit der GNOME-Desktopumgebung verbunden ist. GNOME ist die Standard-Desktopumgebung für Fedora und die Entwickler haben viel Arbeit investiert, um das beste GNOME-Erlebnis zu bieten. Aber Fedora kann mehr als nur GNOME. Es gibt auch einen offiziellen Fedora KDE Plasma Spin. […]
Die Document Foundation hat LibreOffice 24.8 veröffentlicht, die neueste stabile Version der beliebten Open-Source-Office-Suite für GNU/Linux, Android, macOS und Windows. Diese Version bringt eine Reihe wichtiger Neuerungen mit sich, darunter eine neue Datenschutzfunktion, die es ermöglicht, persönliche Informationen wie Autorennamen, Zeitstempel und Druckerkonfigurationen beim Speichern automatisch zu entfernen. Außerdem wurde eine verbesserte passwortbasierte ODF-Verschlüsselung eingeführt, […]
Debian, eine der angesehensten und am weitesten verbreiteten Linux-Distributionen, hat Version 11, mit dem Codenamen “Bullseye”, ab dem 15. August 2024 in die Langzeitunterstützungsphase (LTS) überführt. Dieser Übergang erfolgt genau drei Jahre nach der ursprünglichen Veröffentlichung von Bullseye. Die Pflege der verschiedenen Debian-Versionen folgt einem strukturierten Ansatz um Stabilität und Sicherheit für alle Nutzer zu […]