Raspbian(RPi Zero W)で動作しないUSBセンサーにアクセスするためのudevルール

Raspbian(RPi Zero W)で動作しないUSBセンサーにアクセスするためのudevルール

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ファイルを削除して再起動しました。

おすすめ記事