3 3

GPIO from python user space OPi:GPIO app

Recommended Posts


I have seen this old thread but since last post was long time ago and it was shell based I decided to go with new one ...



I have the udev setup (you can see some old versions inside commented out too)

root@orangepizeroplus2:~# cat /etc/udev/rules.d/60-python-pifacecommon.rules
#KERNEL=="spidev*", GROUP="gpio", MODE="0660"
#SUBSYSTEM=="gpio*", ACTION=="add|change", RUN+="/usr/bin/find /sys/class/gpio -exec /bin/chmod g+u {} + -exec /bin/chown :gpio {} +"

#KERNEL=="gpio*", GROUP="gpio", MODE="0660"
#SUBSYSTEM=="gpio*", ACTION=="add|change", RUN+="/usr/bin/find /sys/class/gpio -exec /bin/chmod g+u {} + -exec /bin/chown :gpio {} +"

KERNEL=="spidev*", GROUP="gpio", MODE="0660"
KERNEL=="gpio*", MODE:="0660", GROUP:="gpio"
SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c '\
 chown -R root:gpio /sys/class/gpio ; \
 chmod -R 777 /sys/class/gpio ;\
 chown -R root:gpio /sys/devices/virtual/gpio ;\
 chmod -R 777 /sys/devices/virtual/gpio; \
 chown -R root:gpio /sys/devices/platform/soc/*.gpio/gpio ;\
 chmod -R 777 /sys/devices/platform/soc/*.gpio/gpio; \
 chmod -R 777 /sys/class/gpio/gpio1/* ;\
 chgrp gpio /sys/class/gpio/gpio1/* ;\
 chgrp -R gpio /sys/devices/platform/sunxi-pinctrl/gpio ;\
 chmod -R ug+rw /sys/devices/platform/sunxi-pinctrl/gpio ' "

#SUBSYSTEM=="gpio", PROGRAM="/bin/sh -c '/bin/chown -R root:gpio /sys/devices/soc.0/*pinctrl/gpio'"
#SUBSYSTEM=="gpio", PROGRAM="/bin/sh -c '/bin/chmod -R ug+rw /sys/devices/soc.0/*pinctrl/gpio'"


and when I do it step by step from shell I kinda get it working but a simple


GPIO.setup(self.pin, GPIO.IN)

fails .. depending on the number of restarts it fails on /sys/class/gpio/gpio1/direction or in one other file there ..

python user is in gpio group, all files are 777...


IOError: [Errno 13] Permission denied: '/sys/class/gpio/gpio1/direction'
root@orangepizeroplus2:~# ls -la /sys/class/gpio/gpio1/direction
-rwxrwxrwx 1 root gpio 4096 Sep 21 07:52 /sys/class/gpio/gpio1/direction


looks like some race, OPi:GPIO is trying to access them faster then udev is chowning and chmoding files... I'm banging my head for days no more ideas :(

system is:

Welcome to ARMBIAN 5.32 user-built Debian GNU/Linux 8 (jessie) 3.4.113-sun8i

root@orangepizeroplus2:~# uname -a
Linux orangepizeroplus2 3.4.113-sun8i #4 SMP PREEMPT Thu Sep 21 03:24:39 CEST 2017 armv7l GNU/Linux


I can change the system to any other one (other kernel, other whatever..) if that will help, I was going with the older kernel hoping this will solve the problem, having identical problem with


Welcome to ARMBIAN 5.27 stable Debian GNU/Linux 8 (jessie) 4.10.11-sun8i
root@orangepione:~# uname -a
Linux orangepione 4.10.11-sun8i #2 SMP Tue Apr 18 17:55:20 CEST 2017 armv7l GNU/Linux


so, if anyone have any idea what to try I'd really appreciate some help

Share this post

Link to post
Share on other sites

forgot to say, originally the error was on export but added to rclocal echo1 > export and that triggers the udev rule so now is stuck opn direction

Share this post

Link to post
Share on other sites

This patch solves it for me (Edit but I think there should be a better way)


diff --git a/OPi/GPIO.py b/OPi/GPIO.py
index 775134e..aa8e77b 100644
--- a/OPi/GPIO.py
+++ b/OPi/GPIO.py
@@ -239,6 +239,7 @@ Methods
 import warnings
+import time
 from OPi.constants import IN, OUT
 from OPi.constants import LOW, HIGH                     # noqa: F401
@@ -358,6 +359,7 @@ def setup(channel, direction, initial=None, pull_up_down=None):
                 raise e
+        time.sleep(0.1)
         sysfs.direction(pin, direction)
         _exports[channel] = direction
         if direction == OUT and initial is not None:



Share this post

Link to post
Share on other sites

thanks, so def. a race condition where opi lib is faster then chown/chmod :( .. thanks, I'll try, it's acceptable solution for me if it works :)


Share this post

Link to post
Share on other sites
This topic is now closed to further replies.
3 3