5つのttyノードを作成する3G/GPSデバイスがありますが、これは1つの物理USB接続にすぎません。基本的に、マルチポートUSBシリアルアダプター。
私はいくつかのudev
ルールを作成して、それらのノードが常に同じ名前、または少なくともそれらへのシンボリックリンクを持っていることを確認しようとしています。
私は確かに/sys/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/
でデバイスを見つけることができます。内部には1-2.2:1.0/
から1-2.2:1.4/
があり、5つのノードが作成します。
/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"
それでも何も起こりません。なぜ一致しないのですか?
すべてのルールに構文エラーがあります:
=
は代入用です==
は比較用なので、実際にDEV
が何と等しいかを見ていなかったので、代入していました。,
が必要です。SYMLINK+=
の前には何もありませんでした。ACTION=="add", DEV=="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.0", SYMLINK+="huawey0"
ACTION=="add", KERNEL=="1-2.2:1.0", SYMLINK+="huawey0"
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"
これらのルールはすべて、あなたが今望むものを実行するはずです(私は最初のものを個人的に使用します)。
この投稿は3年前に尋ねられたものであり、これは答えに対応していない可能性がありますが、今後の参考のために、私の成功した経験をここで共有したいと思います。
Jens Reimannの Identify GSM modem devices using udev によると、「デバイス属性「bInterfaceNumber」はttyデバイスではなく、USBデバイスの親階層」ので、FTDI usb-to-4-port-serialアダプターに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」もサポートします。
(Jens Reimann著)
ここで、ttyUSB_FTDI_4_PORT_
はシンボリックリンク名です。これらの2つのルールは、ttyUSB_FTDI_4_PORT_00
、ttyUSB_FTDI_4_PORT_01
、ttyUSB_FTDI_4_PORT_02
、ttyUSB_FTDI_4_PORT_03
としてシンボリックリンクを作成します。 ATTRS{serial}
属性を追加して、列挙をさらに制限できます。
Jens Reimannは、 Ketan Patel のU&L質問 のUdevルールファイルが機能していない 、 derobert による accepted answer を使用.
アレックスのコメントに加えて、別の問題があります。そうみたいです 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"