オプションドライバーは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
私がこの情報を入手できるポイントを知っていますか?
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/
です。シンボリックリンクに注意してください。
デバイスが/ dev/serial/by-id /に登録されているかどうかを確認することができます
ls -l/dev/serial/by-id
これらの名前は一貫している必要があり、正しいttyUSBxを指します(シンボリックリンク)。
同様の問題 がありました。
これを/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"
各行の終わりまで。
私はudevを使用して、デバイスのシンボリックリンクを作成するいくつかのルールを記述します。
デバイスを区別するのに十分な情報を取得するには、すべてのデバイスに対して次のようなことを試してください。
$ udevadm info --query all --name /dev/ttyUSB0 --attribute-walk
次のコマンドを実行すると、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バリアントで機能します。