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

내가 겪고 있는 문제는 모든 하위 디렉터리와 폴더가 여전히 소유자와 그룹으로 루트를 가지고 있다는 것입니다. 따라서 내 사용자 계정을 사용하여 단일 핀(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여전히 루트가 소유한 것처럼 보이지만 /sys/devices/virtual/gpio/gpio30에 대한 링크라는 것을 알게 되면.

ls -la /sys/devices/virtual/gpio/gpio30
스크립트가 성공적으로 실행된 것을 볼 수 있습니다.

이는 도움이 될 수 있습니다:https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=9667

관련 정보