udev 不会递归地应用更改

udev 不会递归地应用更改

我正在与一个比格尔骨黑板乌班图适用于 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

相关内容