udev は変更を再帰的に適用しません。

udev は変更を再帰的に適用しません。

私は一緒に働いています。ビーグル骨黒板UbuntuARMアーキテクチャ用バージョン)、一部の汎用入力/出力(汎用入出力インタフェース)センサー/駆動モーターなどを読み取るためのインターフェースこれは、以下を使用して必要なピンを「エクスポート」することで設定できます。

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

私が経験している問題は、すべてのサブディレクトリとフォルダがまだ所有者とグループにルートを持っているということです。したがって、私のユーザーアカウントを使用して単一のピン(gpio)を設定することはできません。

自分のユーザー名(bbb)とグループ(users)の下の新しいエクスポートフォルダ内のすべてのアイテムをインポートするには、自分のルールをどのように変更する必要がありますか? ? ?

答え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

関連情報