Cara mencocokkan perangkat ttyUSBX dengan perangkat serial usb

21

driver opsi dengan benar cocok dengan ID USB dan memuat driver untuk perangkat ini. Sebagai contoh

# 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.

Ini juga menciptakan perangkat ttyUSBX untuk mengelola perangkat keras

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

Namun, saya memiliki lebih dari satu perangkat serial usb dan saya ingin tahu ttyUSB mana yang menggunakan USBID. Ex. / dev / ttyUSB1 -> 19d2: 0031

Apakah Anda tahu titik di mana saya bisa mendapatkan informasi ini?

pelayaran
sumber
Jika Anda tahu detail seperti vendor / produk, maka jawaban ini luar biasa
earcam

Jawaban:

12

Lihatlah sistem file sysfs. Contoh untuk serial USB saya:

$ 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

Seperti yang Anda lihat, ttyUSB0peta ke 067b:2303di komputer saya. Lokasi lain yang patut dijelajahi adalah /sys/class/tty/. Perhatikan symlink.

Lekensteyn
sumber
apakah Anda melakukan sesuatu untuk membuatnya daftar juga PRODUK?
Igor Stoppa
@IgorStoppa, Cobalah untuk catpara ueventfile dari hasil find /sys -name ttyACM0, misalnya. Ganti nama simpul perangkat serial Anda.
sherrellbc
9

Anda dapat mencoba melihat apakah perangkat Anda terdaftar di / dev / serial / by-id /

ls -l / dev / serial / by-id

Nama-nama ini harus konsisten dan akan mengarahkan (symlink) ke ttyUSBx yang benar

Waxhead
sumber
Bisakah Anda menambahkan beberapa klarifikasi, contoh, dll. Jawaban online tidak masuk hitungan baik di SE
Romeo Ninov
@RomeoNinov Ok, saya menambahkan beberapa klarifikasi seperti yang Anda minta. Ini tidak persis lebih sulit daripada hanya melihat ke direktori lain, jadi saya tidak bisa melihat bagaimana membuat jawabannya lebih rumit daripada itu akan meningkatkan apa pun. Maaf soal itu.
Waxhead
Saya memiliki dua adapter identik (dua Arduino) yang terhubung ke Raspberry Pi. ls -l /dev/serial/by-idhanya mengembalikan satu adaptor ../../ttyUSB1, sementara ls -l /sys/bus/usb-serial/devicesmenunjukkan kepada saya keduanya. Jadi saya tidak berpikir ini adalah jawaban yang bagus.
Daniel F
6

Saya punya masalah serupa .

Tulis ini ke /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"

sampai akhir. Mulai ulang.

Sekarang Anda dapat menggunakan /dev/ONDAuntuk sampai ke perangkat ONDA Anda.

Jika Anda ingin pengguna non-root dapat menggunakannya, lalu tambahkan

, MODE="0666"

ke akhir setiap baris.

Nick ODell
sumber
Saya melakukan ini dan memeriksa file di mana mereka terhubung. produk yang saya miliki memiliki banyak antarmuka, seperti solid disk, serial usb. Sementara saya mengharapkan hubungan ke / dev / ttyACM0 tapi itu ke / dev / sda. cara apa pun untuk mendefinisikan dalam file aturan jenis perangkat apa yang harus diterapkan aturan? Saya menulis aturan di /etc/udev/rules.d/99-ftdi.rules
nurp
ok menemukannya: menambahkan SUBSYSTEM == "tty" ke parameter aturan. nilai ini dapat ditemukan di output udevadm info --name=/dev/ttyACM0
nurp
3

Saya akan menggunakan udev dan menulis beberapa aturan yang membuat symlink untuk perangkat.

Untuk mendapatkan informasi yang cukup untuk membedakan perangkat coba sesuatu seperti ini untuk semua perangkat:

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

Perintah berikut akan memberi saya daftar nama perangkat ttyUSB yang dikaitkan dengan 19d2: 0016 (yang merupakan id "mode modem" dari stik ZTE MF831 LTE, milik Anda mungkin berbeda.):

    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

Ini akan berulang melalui daftar file dengan nama file ttyUSB *, termasuk symlink, di / sys / bus / usb / perangkat. Dalam hasil, kami akan mencari file bernama modalias dan mencari string yang berisi id vendor "v" "19d2" dan id produk "p" 0016. Jika hasilnya cocok, kami akan menggemakan string yang diawali dengan "/ dev / "di depan USB? nama. Afaik yang pertama atau biasanya yang terakhir (angka tertinggi) adalah port modem untuk perangkat ZTE. Anda dapat mengulang hasil ke file di / tmp / dan kepala -n1 atau ekor -n1 sesuai baris. Jika Anda memiliki hub, Anda mungkin perlu meningkatkan maxdepth.

Ini bukan cara yang paling elegan, tetapi ini akan bekerja pada hampir semua varian Linux.

epek
sumber