Package: rpi.gpio-common Version: 0.7.1~a4-1+b1 Severity: normal Tags: upstream
Dear Maintainer, using a GPIO-line from a Python script as an unprivileged user gives: ebirdie@rpi4-1:~$ python3 relelähtö12.py Traceback (most recent call last): File "/home/ebirdie/relelähtö12.py", line 18, in <module> GPIO.setup(gpiopin,GPIO.OUT,initial=GPIO.HIGH) # pin gpiopin RuntimeError: No access to /dev/mem. Try running as root! ebirdie@rpi4-1:~$ groups ebirdie adm dialout sudo gpio Works fine with root privileges. ebirdie@rpi4-1:~$ sudo python3 relelähtö12.py Did a bit of investigation, may it be for any help: Seems that current upstream source does not support GPIO device model in Debian kernel. The Debian kernel does not provide device /dev/gpiomem as rpi.gpio needs it for unprivileged operation. rpi.gpio source code does not make use of the newer GPIO model with /dev/gpiochipX devices and thus resorts to access /dev/kmem with root privileges. See: <https://salsa.debian.org/raspi-team/rpi.gpio/-/blob/master/source/c_gpio.c> Also did tweak udev rules in addition to the rule rpi.gpio-common provides. ebirdie@rpi4-1:~$ diff -u /usr/lib/udev/rules.d/60-rpi.gpio-common.rules /etc/udev/rules.d/99-rpi.gpio-common.rules --- /usr/lib/udev/rules.d/60-rpi.gpio-common.rules 2021-09-30 17:41:27.000000000 +0300 +++ /etc/udev/rules.d/99-rpi.gpio-common.rules 2021-11-10 17:40:48.481080516 +0200 @@ -1,3 +1,4 @@ -SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="dialout", MODE="0660" +SUBSYSTEM=="bcm2711-gpiomem", KERNEL=="gpiomem", GROUP="dialout", MODE="0660" SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:dialout /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'" +SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:dialout /dev/gpiochip* ; chmod 0660 /dev/gpiochip*'" SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:dialout /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value ; chmod 660 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'" Didn't help. So, the conclusions from source code reading comprehension above holds until otherwise proven. My last take I became aware of while on my investigations. Maybe the Python library should morph from a board specific lib to a generic non-board specific Python library with the new kernel API for GPIO? I don't know, should it be in a bug report or not, decided to include it. <https://embeddedbits.org/new-linux-kernel-gpio-user-space-interface/> <https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/about/> Best regards, Erkki PS. Although reportbug tells 5.15 as a running kernel, the above tests were made on a 5.10 Debian kernel from bullseye release as well. -- System Information: Debian Release: 11.1 APT prefers stable-security APT policy: (990, 'stable-security'), (990, 'stable'), (500, 'unstable') Architecture: arm64 (aarch64) Kernel: Linux 5.15.0-2-arm64 (SMP w/4 CPU threads) Kernel taint flags: TAINT_CRAP Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled -- no debconf information