From 02f13352857aa73ae8965e9dc7fa2bb0b7c8a2a2 Mon Sep 17 00:00:00 2001 From: Drew Fustini Date: Tue, 4 Apr 2017 04:26:41 +0000 Subject: [PATCH] add udev rules and script for non-root access to gpio Refer to Issue #137 for details: Access to GPIO and PWM as non-root user not functioning https://github.com/adafruit/adafruit-beaglebone-io-python/issues/137 --- udev/80-non-root-gpio-permissions.rules | 1 + udev/udev-non-root-gpio-permissions.sh | 46 +++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 udev/80-non-root-gpio-permissions.rules create mode 100755 udev/udev-non-root-gpio-permissions.sh diff --git a/udev/80-non-root-gpio-permissions.rules b/udev/80-non-root-gpio-permissions.rules new file mode 100644 index 0000000..daf7e1d --- /dev/null +++ b/udev/80-non-root-gpio-permissions.rules @@ -0,0 +1 @@ +KERNEL=="gpio*", SUBSYSTEM=="gpio", ACTION=="add", PROGRAM="/usr/local/bin/udev-non-root-gpio-permissions.sh" diff --git a/udev/udev-non-root-gpio-permissions.sh b/udev/udev-non-root-gpio-permissions.sh new file mode 100755 index 0000000..eb928df --- /dev/null +++ b/udev/udev-non-root-gpio-permissions.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +# Result: chown debian:debian /sys/class/gpio + +chown -R debian:debian /sys/devices/gpio +chown -R debian:debian /sys/class/gpio +chown -R debian:debian /sys/devices/platform/ocp +chown -R debian:debian /sys/class/pwm + +#GPIO ( active_low device direction edge power subsystem uevent value ) +find /sys/class/gpio -type d -exec chmod 2770 {} \; +find /sys/class/gpio -name "direction" -exec chmod 0660 {} \; +find /sys/class/gpio -name "edge" -exec chmod 0660 {} \; +find /sys/class/gpio -name "value" -exec chmod 0660 {} \; +find /sys/class/gpio -name "active_low" -exec chmod 0660 {} \; +find /sys/class/gpio -name "device" -exec chmod 0660 {} \; +find /sys/class/gpio -name "power" -exec chmod 0660 {} \; +find /sys/class/gpio -name "subsystem" -exec chmod 0660 {} \; + +#PWM ( duty_cycle enable period polarity power uevent ) +find /sys/devices/platform/ocp -name "duty_cycle" -exec chmod 0660 {} \; +find /sys/devices/platform/ocp -name "enable" -exec chmod 0660 {} \; +find /sys/devices/platform/ocp -name "period" -exec chmod 0660 {} \; +find /sys/devices/platform/ocp -name "polarity" -exec chmod 0660 {} \; +find /sys/devices/platform/ocp -name "power" -exec chmod 0660 {} \; +find /sys/class/pwm -name "duty_cycle" -exec chmod 0660 {} \; +find /sys/class/pwm -name "enable" -exec chmod 0660 {} \; +find /sys/class/pwm -name "period" -exec chmod 0660 {} \; +find /sys/class/pwm -name "polarity" -exec chmod 0660 {} \; +find /sys/class/pwm -name "power" -exec chmod 0660 {} \; + +chmod 0220 /sys/class/gpio/export +chmod 0220 /sys/class/gpio/unexport +chmod 0220 /sys/class/pwm/export +chmod 0220 /sys/class/pwm/unexport + +find /sys/class/gpio -name "uevent" -exec chmod 0660 {} \; +find /sys/class/gpio -name "autosuspend_delay_ms" -exec chmod 0660 {} \; +find /sys/class/gpio -name "control" -exec chmod 0660 {} \; +find /sys/class/pwm -name "uevent" -exec chmod 0660 {} \; +find /sys/devices/platform/ocp -name "uevent" -exec chmod 0660 {} \; + +# Additional code for getting AIN pins set up +ain_activator=/sys/devices/platform/bone_capemgr/slots +chown -R debian:debian $ain_activator/ +chmod -R 2770 $ain_activator/