python - 以非 root 用户身份访问 beaglebone 上的 GPIO?

标签 python linux beagleboneblack beagleboard udev

我四处询问,我尝试过的任何 udev 规则根本不起作用。

我需要的是能够像 root 以外的其他用途访问 gpio 引脚。

例如,从应该从传感器读取温度的 Adafruit 执行 python 脚本,我得到了这个:

$ python Adafruit_Python_DHT/examples/simpletest.py 
Traceback (most recent call last):
  File "Adafruit_Python_DHT/examples/simpletest.py", line 39, in <module>
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
  File "build/bdist.linux-armv7l/egg/Adafruit_DHT/common.py", line 90, in read_retry
  File "build/bdist.linux-armv7l/egg/Adafruit_DHT/common.py", line 77, in read
  File "build/bdist.linux-armv7l/egg/Adafruit_DHT/Beaglebone_Black.py", line 213, in read
RuntimeError: Error accessing GPIO. Make sure program is run as root with sudo!

我尝试了很多不同的技巧来解决这个问题,但只有当我以 root 身份使用它时它才有效 我试过这个:https://gist.github.com/metasoarous/a7308779837f9dcba662还有这个https://github.com/metasoarous/strange-coop/tree/master/etc

还有一些其他的 udev/rules.d 但到目前为止没有任何效果......

知道如何改变这个吗?

最佳答案

我根据 this 尝试了以下说明并工作:

  1. 运行 nano/etc/udev/rules.d/80-gpio-permissions.rules

  2. KERNEL=="gpio*", SUBSYSTEM=="gpio", ACTION=="add", PROGRAM="/usr/local/bin/udev-gpio-permissions.sh"
    
  3. 运行 nano/usr/local/bin/udev-gpio-permissions.sh

  4. 复制

    #!/bin/bash
    
    # Result: chown debian:root /sys/class/gpio
    
    chown -R debian:root /sys/devices/gpio
    chown -R debian:root /sys/class/gpio
    chown -R debian:root /sys/devices/platform/ocp
    chown -R debian:root /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 {} \;
    
    chmod 0220 /sys/class/gpio/export
    chmod 0220 /sys/class/gpio/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 {} \;
    
  5. 运行 chmod +x/usr/local/bin/udev-gpio-permissions.sh

  6. 运行 udevadm control --reload-rules

  7. 重启

关于python - 以非 root 用户身份访问 beaglebone 上的 GPIO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41586162/

相关文章:

java - 如何编写 shell 脚本来获取给定的进程空闲时间?

c - Beaglebone Black 上的 GPIO

使用 db-api 进行 Python 类型提示

linux - incron 和 subliminial 字幕下载器

Python ftplib - retrbinary 因零字节文件超时而失败

Linux命令——给文件名添加时间元素

linux - 无法从 Arch Linux ssh 进入 Beaglebone Black

linux-device-driver - 通过设备树中选择的节点传递 Bootargs 不适用于 Beaglebone Black

python - 在 bash/python/perl 脚本中运行一系列交互式 shell 命令

python - 方案 : s3 with pyspark 没有文件系统