私USB光センサー私はほぼ1年間何の問題もなくラズベリーパイ3を使用してきました。これで、Raspberry Pi Zero Wirelessで使用しようとしています。
フォローするセンサーメーカーの文書Pi Zero(Pi3と同じ)にudevルールを作成して、「pi」ユーザーにUSBデバイスを使用する権限を付与します(rootとして使用したくないため)。
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でrootでコマンドを実行すると、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に2行を入れてこれを実行しました(/etc/udev/rules.d/99-com.rulesにあります)。 ) 次に、51-yoctopuce.rulesファイルを削除して再起動しました。