我正在与一个比格尔骨黑板(乌班图适用于 ARM 架构的版本),它具有一些通用输入/输出(通用输入输出接口)接口来读取传感器/驱动电机等。可以通过使用以下命令“导出”所需的引脚来配置:
bbb@arm:/sys/class/gpio$echo 30 > export
这里是默认文件夹及其内容:
bbb@arm:~$ ls -l /sys/class/gpio/
total 0
-rwxrwxrwx 1 bbb users 4096 Jan 6 12:13 export
lrwxrwxrwx 1 bbb users 0 Jan 6 12:13 gpiochip0 -> ../../devices/platform/ocp/44e07000.gpio/gpio/gpiochip0
lrwxrwxrwx 1 bbb users 0 Jan 6 12:13 gpiochip32 -> ../../devices/platform/ocp/4804c000.gpio/gpio/gpiochip32
lrwxrwxrwx 1 bbb users 0 Jan 6 12:13 gpiochip64 -> ../../devices/platform/ocp/481ac000.gpio/gpio/gpiochip64
lrwxrwxrwx 1 bbb users 0 Jan 6 12:13 gpiochip96 -> ../../devices/platform/ocp/481ae000.gpio/gpio/gpiochip96
-rwxrwxrwx 1 bbb users 4096 Jan 6 12:13 unexport
由于我想以普通用户身份使用这些引脚,因此我尝试配置一些规则来通过以下规则更改专有和用户组:
bbb@arm:~$ cat /etc/udev/rules.d/99-gpio.rules
KERNEL=="gpio*", SUBSYSTEM=="gpio", PROGRAM="/bin/sh -c 'chown -R bbb:users /sys/class/gpio; chmod -R 777 /sys/class/gpio'"
KERNEL=="gpio*", SUBSYSTEM=="gpio", PROGRAM="/bin/sh -c 'chown -R bbb:users /sys/class/virtual/gpio; chmod -R 777 /sys/class/virtual/gpio'"
它工作得很好,并且规则在启动时加载。但如果我导出一个引脚,我想使用:
bbb@arm:/sys/class/gpio$ echo 30 > export
bbb@arm:/sys/class/gpio$ cd gpio30
bbb@arm:/sys/class/gpio/gpio30$ ls -l
total 0
-rw-r--r-- 1 root root 4096 Jan 7 16:16 active_low
lrwxrwxrwx 1 root root 0 Jan 7 16:16 device -> ../../../44e07000.gpio
-rw-r--r-- 1 root root 4096 Jan 7 16:16 direction
-rw-r--r-- 1 root root 4096 Jan 7 16:16 edge
drwxr-xr-x 2 root root 0 Jan 7 16:16 power
lrwxrwxrwx 1 root root 0 Jan 7 16:16 subsystem -> ../../../../../../class/gpio
-rw-r--r-- 1 root root 4096 Jan 7 16:15 uevent
-rw-r--r-- 1 root root 4096 Jan 7 16:16 value
我遇到的问题是所有子目录和文件夹仍然具有 root 作为所有者和组。所以我无法使用我的用户帐户配置单个引脚(gpio)。
我应该如何修改我的规则以获取我的用户名(bbb)和组(用户)下的新导出文件夹中的所有内容???
答案1
好吧,在我的 Pi 上测试后,我收回我所说的一切。在当前文件中添加一条附加规则:
KERNEL=="gpio*",SUBSYSTEM=="gpio",ACTION=="add",PROGRAM="/bin/sh -c 'chown -R bbb:users /sys%p;chmod -R 770 /sys%p'"
现在进行测试:echo 30 > export
如果您执行了一项操作,ls -l /sys/class/gpio30
它看起来仍归 root 所有,但如果您注意到它是指向 /sys/devices/virtual/gpio/gpio30 的链接。
ls -la /sys/devices/virtual/gpio/gpio30
您将看到您的脚本已成功运行。
这可能有帮助:https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=9667