UdevルールはマルチノードUSBデバイスと一致します。

UdevルールはマルチノードUSBデバイスと一致します。

物理的なUSB接続にもかかわらず、5つのttyノードを生成する3G / GPSデバイスがあります。デフォルトではマルチポートUSBシリアルアダプタです。

udev私はこれらのノードが常に同じ名前を持つようにするか、少なくともそのノードを指すシンボリックリンクを持つようにいくつかのルールを作成しようとしています。

実際にデバイスを見つけることができます/sys/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/。内部は 5 つのノードを生成する1-2.2:1.0/to です1-2.2:1.4/

ここでも見つけることができます/sys/bus/usb/devices/1-2.2

デバイスのudev情報は次のとおりです。

udevadm info -a -p /sys/bus/usb/devices/1-2.2/1-2.2\:1.0
looking at device '/bus/usb/devices/1-2.2/1-2.2:1.0':
KERNEL=="1-2.2:1.0"
SUBSYSTEM=="usb"
DRIVER=="option"
ATTR{bInterfaceNumber}=="00"
ATTR{bAlternateSetting}==" 0"
ATTR{bNumEndpoints}=="03"
ATTR{bInterfaceClass}=="ff"
ATTR{bInterfaceSubClass}=="01"
ATTR{bInterfaceProtocol}=="01"
ATTR{modalias}=="usb:v12D1p1506d0000dc00dsc00dp00icFFisc01ip01"
ATTR{supports_autosuspend}=="0"

この時点から、すべてのノードは同じ情報を持ちます。ノード間の唯一の違いは、bInterfaceNumber プロパティとデバイスパスです。それで、開発パス別にルールを作成してみようと思いました。

今、何らかの理由で、これらのノードはすべて次の規則に一致します。

ACTION=="add", DEV="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.0" SYMLINK+="huawey0"

したがって、デフォルトではhuawey0列挙型の最後のノードを指します。デバイスはttyUSB2から6までノードを作成し、リンクはUSB6を指します。

だからカーネルノードを渡してみました。

ACTION=="add", KERNEL=="1-2.2:1.0" SYMLINK+="huawey0"

今/devには何も表示されません。

その後、bInterfaceNumberを使って分離してみました。私は次のルールを使用しました

ACTION=="add", DEV="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.[0-4]" ATTR{bInterfaceNumber}=="00" SYMLINK+="huawey0"

しかし、まだ何も起こりませんでした。私もルールの簡単なバージョンを試してみました..

ACTION=="add", ATTR{bInterfaceNumber}=="00" SYMLINK+="huawey0"

しかし、まだ何も起こりません。なぜ一致しないのですか?

答え1

この記事は3年前に要求されたものなので、答えることができないかもしれませんが、後で参考にするために私の成功した経験をここで共有したいと思います。

Jens Reimannによるとudevを使用したGSMモデムデバイスの識別、"デバイス属性"bInterfaceNumber"はttyデバイスではなく、上位層のUSBデバイスにあります。したがって、FTDI USB-4ポートシリアルアダプタに対して2つのルールを作成しました。

SUBSYSTEMS=="usb", ENV{.LOCAL_ifNum}="$attr{bInterfaceNumber}"

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", SYMLINK+="ttyUSB_FTDI_4_PORT_%E{.LOCAL_ifNum}"

これは、「bInterfaceNumber」属性を環境変数「.LOCAL_ifNum」に格納します(プレフィックスポイントは一時変数または非表示変数の表記です)。 2番目の規則では、 "%E"構文を使用して同じ変数を取得します。最新のudevバージョンは、「%E」ではなく「$ env」もサポートしています。
(イェンス・レマン)

ttyUSB_FTDI_4_PORT_シンボリックリンク名はどこにありますか?これら2つのルールはttyUSB_FTDI_4_PORT_00、、、、ttyUSB_FTDI_4_PORT_01ttyUSB_FTDI_4_PORT_02のシンボリックリンクを生成しますttyUSB_FTDI_4_PORT_03ATTRS{serial}属性を追加して列挙をさらに制限できます。

ジェンス・レイマンも認めた。ケタンパテルU&Lの問題、モデムのUdevルールファイルが機能しません。受け入れられた回答渡すドロバート

答え2

すべてのルールに構文エラーがあります。

  1. =for割り当ては比較のためのものなので、実際には同じものを==見るのではなく、割り当てることです。DEV
  2. ,前にドアなしですべてのドアの間を移動する必要がありますSYMLINK+=

拳のルール

ACTION=="add", DEV=="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.0", SYMLINK+="huawey0"

ルール2

ACTION=="add", KERNEL=="1-2.2:1.0", SYMLINK+="huawey0"

ルール3

ACTION=="add", DEV=="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.[0-4]", ATTR{bInterfaceNumber}=="00", SYMLINK+="huawey0"

ルール4

ACTION=="add", ATTR{bInterfaceNumber}=="00", SYMLINK+="huawey0"

今、これらの規則はすべてあなたの要件を満たしている必要があります(私は個人的に最初の規則を使います)。

答え3

Alexのコメントに加えて、別の質問があります。ATTR{bInterfaceNumber}何らかの理由で動作しないようです。引用する関連質問への回答、次のようなものを使用する必要があります

SUBSYSTEM=="tty", ACTION=="add", \
    ENV{ID_VENDOR_ID}=="067b", ENV{ID_MODEL_ID}="2303", \
    ENV{ID_USB_INTERFACE_NUM}=="00", SYMLINK+="test_USB0"

関連情報