web-dev-qa-db-ja.com

ttyUSBXデバイスをUSBシリアルデバイスに一致させる方法

オプションドライバーはUSB IDと正しく一致し、このデバイスのドライバーをロードします。例えば

# lsusb
Bus 001 Device 002: ID 19d2:0031 ONDA Communication S.p.A. ZTE MF636
Bus 001 Device 003: ID 12d1:14ac Huawei Technologies Co., Ltd.

また、ハードウェアを管理するためのttyUSBXデバイスを作成します

crw-rw---- 1 root uucp 188, 0 Jul  4 13:48 /dev/ttyUSB0
crw-rw---- 1 root uucp 188, 1 Jul  4 13:49 /dev/ttyUSB1
crw-rw---- 1 root uucp 188, 2 Jul  4 13:35 /dev/ttyUSB2
crw-rw---- 1 root uucp 188, 3 Jul  4 13:37 /dev/ttyUSB3
crw-rw---- 1 root uucp 188, 4 Jul  4 13:37 /dev/ttyUSB4
crw-rw---- 1 root uucp 188, 5 Jul  4 13:37 /dev/ttyUSB5
crw-rw---- 1 root uucp 188, 6 Jul  4 13:37 /dev/ttyUSB6
crw-rw---- 1 root uucp 188, 7 Jul  4 13:37 /dev/ttyUSB7

ただし、USBシリアルデバイスが複数あるので、どのttyUSBがどのUSBIDに対応しているかを知りたいです。例/ dev/ttyUSB1-> 19d2:0031

私がこの情報を入手できるポイントを知っていますか?

23
seaquest

Sysfsファイルシステムを見てください。私のUSBシリアルの例:

$ lsusb
Bus 003 Device 016: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
$ ls -l /sys/bus/usb-serial/devices
lrwxrwxrwx 1 root root 0 Jul  4 17:37 ttyUSB0 -> ../../../devices/pci0000:00/0000:00:1c.0/0000:02:00.0/usb3/3-1/3-1:1.0/ttyUSB0
$ $ grep PRODUCT= /sys/bus/usb-serial/devices/ttyUSB0/../uevent
PRODUCT=67b/2303/300

ご覧のように、ttyUSB0は私のコンピュータの067b:2303にマッピングされます。探索する価値のある他の場所は/sys/class/tty/です。シンボリックリンクに注意してください。

15
Lekensteyn

デバイスが/ dev/serial/by-id /に登録されているかどうかを確認することができます

ls -l/dev/serial/by-id

これらの名前は一貫している必要があり、正しいttyUSBxを指します(シンボリックリンク)。

11
Waxhead

同様の問題 がありました。

これを/etc/udev/rules.d/50-usb.rulesに書き込みます

SUBSYSTEM=="tty", ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0031", SYMLINK+="ONDA"
SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14ac", SYMLINK+="HUAWEI"

最後まで。リブート。

これで、/dev/ONDAを使用してONDAデバイスにアクセスできます。

非rootユーザーがこれらを使用できるようにしたい場合は、追加します

, MODE="0666"

各行の終わりまで。

6
Nick ODell

私はudevを使用して、デバイスのシンボリックリンクを作成するいくつかのルールを記述します。

デバイスを区別するのに十分な情報を取得するには、すべてのデバイスに対して次のようなことを試してください。

$ udevadm info --query all --name /dev/ttyUSB0 --attribute-walk
4
Mathias Weidner

次のコマンドを実行すると、19d2:0016に関連付けられているttyUSBデバイス名のリストが表示されます(これは、ZTE MF831の「モデムモード」IDですLTEスティック、実際のデバイスは異なる場合があります)。

    for i in $(find -L /sys/bus/usb/devices/ -maxdepth 2 -name "ttyUSB*"); do
        egrep -i "v19d2p0016(.*)in02" $i/../modalias >/dev/null && echo "/dev/${i##*/}"
    done

これにより、/ sys/bus/usb/devices内の、シンボリックリンクを含む、ttyUSB *というファイル名のファイルのリストがループされます。結果内でmodaliasという名前のファイルを検索し、ベンダーID「v」「19d2」と製品ID「p」0016を含む文字列を探します。出力が一致する場合、「/ dev /」で始まる文字列をエコーし​​ます「USBの前に?名前。 Afaikの最初または通常は最後(最大数)がZTEデバイスのモデムポートです。/tmp /内のファイルに結果をエコーし​​、それに応じて行をhead -n1またはtail -n1できます。ハブがある場合は、おそらくmaxdepthを増やす必要があります。

これは最もエレガントな方法ではありませんが、ほとんどすべてのLinuxバリアントで機能します。

1
epek