【问题标题】:Access GPIO on beaglebone as non root user?以非 root 用户身份访问 beaglebone 上的 GPIO?
【发布时间】:2017-01-11 08:41:27
【问题描述】:

我四处询问,但我尝试的任何 udev 规则都不起作用。

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

例如,从 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,但到目前为止没有任何效果...

知道怎么改吗?

【问题讨论】:

  • 是否可以从脚本中运行 sudo,可能来自无密码的 sudo 用户?这不是一个优雅的解决方案,但也许你可以从子流程模块中做到这一点。
  • 啊,最后我决定使用 root 环境... BB 真的需要很好的接口/应用程序来管理引脚......因为 rpi 已经有了

标签: python linux beagleboneblack beagleboard udev


【解决方案1】:

我根据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. 重启

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-14
    • 2012-11-05
    • 2016-03-16
    • 1970-01-01
    • 2021-07-06
    • 2019-09-06
    • 2017-07-08
    • 2017-06-22
    相关资源
    最近更新 更多