나는USB 광 센서나는 거의 1년 동안 아무 문제 없이 라즈베리 파이 3를 사용해 왔습니다. 이제 Raspberry Pi Zero Wireless에서 사용하려고 합니다.
나는 팔로우한다센서 제조업체의 문서Pi Zero(Pi3에 있는 것과 동일)에 udev 규칙을 생성하여 "pi" 사용자에게 USB 장치를 사용할 수 있는 권한을 부여합니다(루트로 사용하고 싶지 않기 때문에).
sudo nano /etc/udev/rules.d/51-yoctopuce.rules
파일에 다음 줄을 추가합니다.
# udev rules to allow write access to all users for Yoctopuce USB devices
SUBSYSTEM=="usb", ATTR{idVendor}=="24e0", MODE="0666"
재부팅한 다음 제조업체의 명령을 실행하여 센서를 사용했습니다.
YModule inventory
이 시점에서 다음과 같은 오류 메시지가 나타납니다.
오류: USB를 등록할 수 없습니다. 사용자에게 USB 장치에 액세스할 수 있는 권한이 없습니다(ypkt_lin:406).
동일한 센서를 RPi3에 연결하고 동일한 명령을 실행하면 센서 일련번호 목록이 터미널에 출력됩니다(이 명령의 예상 출력).
Pi Zero에서 루트로 명령을 실행하면 즉,sudo ./bin/Y모듈 인벤토리, 그러면 명령이 올바르게 실행되고 출력은 센서의 일련 번호(명령의 예상 출력)입니다.
분명히 라이센스 문제가 있습니다. 나는 그것을 고치는 방법을 모른다.
내 udev 규칙 어딘가에 오류가 있다고 가정하지만 Pi 0의 규칙 파일이 내 (작동하는) Pi 3의 파일과 동일하기 때문에 어디에 있는지 알 수 없습니다(제조업체 웹사이트에 있음).
lsusb의 출력:
버스 001 장치 002: ID 24e0:0050
버스 001 장치 001: ID 1d6b:0002 Linux Foundation 2.0 루트 허브
첫 번째 장치는 Yoctopuce 광 센서입니다(24e0이 확실히 올바른 공급업체 ID입니다).
산출sudo lsusb -v -d 24e0:0050:
버스 001 장치 002: ID 24e0:0050
장치 설명자:
b 길이 18
b 설명자 유형 1
bcdUSB 2.00
bDeviceClass 0(인터페이스 수준에서 정의됨)
bDeviceSubClass 0
b 장치 프로토콜 0
bMaxPacketSize0 8
IDVendor 0x24e0
제품 ID 0x0050
bcd 장치 0.01
iManufacturer 1 Yoctopuce
iProduct 2 Yocto-Light-V3
i직렬 3 LIGHTMK3-1136C5
bNum구성 1
구성 설명자:
b 길이 9
b 설명자 유형 2
w전체 길이 41
bNum인터페이스 1
b 구성 값 1
아이컨피그레이션 0
bm 속성 0x80
(Bus Powered)
최대 전력 100mA
인터페이스 설명:
bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 No Subclass bInterfaceProtocol 0 None iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.11 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 29 Report Descriptors: ** UNAVAILABLE ** Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 1
장치 상태: 0x0000
(버스 구동)
내 디렉토리 /etc/udev/rules.d/의 내용은 다음과 같습니다: 51-yoctopuce.rules 99-com.rules
또한 99-com.rules 파일의 어떤 항목이 문제를 일으키는 경우를 대비하여 이름을 100-yoctopuce.rules로 바꾸려고 시도했지만 결과적으로 동일한 오류가 발생했습니다.
제가 이해한 바로는 규칙 파일을 편집한 후 시스템을 재부팅하여 이를 적용하기만 하면 됩니다. 그렇습니까, 아니면 일부 명령이 누락되었습니까?
이 문제를 해결하는 방법에 대한 제안 사항이 있습니까? 미리 감사드립니다.
/etc/udev/rules.d/99-com.rules 파일 내용(Pi Zero):
SUBSYSTEM=="input", GROUP="input", MODE="0660"
SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660"
SUBSYSTEM=="spidev", GROUP="spi", MODE="0660"
SUBSYSTEM=="bcm2835-gpiomem", GROUP="gpio", MODE="0660"
SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c '\
chown -R root:gpio /sys/class/gpio && chmod -R 770 /sys/class/gpio;\
chown -R root:gpio /sys/devices/virtual/gpio && chmod -R 770 /sys/devices/virtual/gpio;\
chown -R root:gpio /sys$devpath && chmod -R 770 /sys$devpath\
'"
KERNEL=="ttyAMA[01]", PROGRAM="/bin/sh -c '\
ALIASES=/proc/device-tree/aliases; \
if cmp -s $ALIASES/uart0 $ALIASES/serial0; then \
echo 0;\
elif cmp -s $ALIASES/uart0 $ALIASES/serial1; then \
echo 1; \
else \
exit 1; \
fi\
'", SYMLINK+="serial%c"
KERNEL=="ttyS0", PROGRAM="/bin/sh -c '\
ALIASES=/proc/device-tree/aliases; \
if cmp -s $ALIASES/uart1 $ALIASES/serial0; then \
echo 0; \
elif cmp -s $ALIASES/uart1 $ALIASES/serial1; then \
echo 1; \
else \
exit 1; \
fi \
'", SYMLINK+="serial%c"
답변1
방금 기존 규칙 파일 끝에 있는 /etc/udev/rules.d/51-yoctopuce.rules에 두 줄을 넣어서 이 작업을 수행했습니다(/etc/udev/rules.d/99-com.rules에 있음). ) 그런 다음 51-yoctopuce.rules 파일을 삭제하고 재부팅했습니다.