Bir ttyUSBX cihazını bir usb seri cihazla eşleştirme


23

opsiyon sürücüsü USB ID ile doğru bir şekilde eşleşti ve bu cihaz için sürücü yükledi. Örneğin

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

Ayrıca donanımı yönetmek için ttyUSBX cihazları oluşturur

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

Ancak, birden fazla usb seri aygıtım var ve hangi ttyUSB'nin hangi USBID için olduğunu bilmek istiyorum. Ör. / dev / ttyUSB1 -> 19d2: 0031

Bu bilgiyi nereden alabileceğimi biliyor musun?


Tedarikçi / ürün gibi detayları biliyorsanız, bu cevap harika
earcam

Yanıtlar:


14

Sysfs dosya sistemine bir göz atın. USB serim için bir örnek:

$ 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

Gördüğünüz gibi, ttyUSB0eşleştiren 067b:2303bilgisayarımda. Keşfetmeye değer başka bir yer vardır /sys/class/tty/. Simgelere dikkat edin.


Ürünü de listelemek için bir şey yaptınız mı?
Igor Stoppa

@IgorStoppa, deneyin sonucu dosyanın örneğin. Seri aygıtınızın düğüm adını değiştirin. catueventfind /sys -name ttyACM0
sherrellbc

10

Cihazlarınızın / dev / serial / by-id / altında kayıtlı olup olmadığını öğrenmeyi deneyebilirsiniz

ls -l / dev / serial / by-id

Bu adlar tutarlı olmalı ve doğru ttyUSBx'i gösterecektir (sembolik bağlantı)


Bazı açıklamalar, örnekler, vb. Ekleyebilir misiniz? Oneline cevabı SE'de iyi sayılmaz
Romeo Ninov

@RomeoNinov Tamam, istediğin gibi biraz açıklama ekledim. Bu sadece başka bir dizine bakmaktan daha zor değil, bu yüzden cevabı olduğundan daha ayrıntılı hale getirmenin her şeyi geliştireceğini göremiyorum. Bunun için üzgünüm.
Waxhead

Raspberry Pi'ye bağlı iki özdeş bağdaştırıcım (iki Arduino) var. ls -l /dev/serial/by-idsadece bir adaptör ../../ttyUSB1verirken ls -l /sys/bus/usb-serial/devicesikisini de gösterir. Bu yüzden bunun iyi bir cevap olduğunu düşünmüyorum.
Daniel F

6

Benzer bir sorun yaşadım .

Bunu /etc/udev/rules.d/50-usb.rules adresine yazın

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

sonuna kadar. Yeniden Başlatma.

Artık /dev/ONDAONDA cihazınıza ulaşmak için kullanabilirsiniz .

Kök olmayan kullanıcıların bunları kullanabilmesini istiyorsanız,

, MODE="0666"

her satırın sonuna kadar.


Bunu yaptım ve bağlandıkları dosyaları kontrol ettim. sahip olduğum ürün katı disk, usb seri gibi birden fazla arayüze sahip. Ben / dev / ttyACM0 ile bağlantı bekleniyordu ama / dev / sda oldu. kural dosyasında kuralın hangi aygıt türünün uygulanması gerektiğini tanımlamanın herhangi bir yolu var mı? Kuralları /etc/udev/rules.d/99-ftdi.rules
nurp

Tamam buldum: Kural parametrelerine SUBSYSTEM == "tty" eklendi. bu değer çıktısında bulunabilir udevadm info --name=/dev/ttyACM0
nurp

3

Udev kullanır ve cihazlar için semboller oluşturan bazı kurallar yazarım.

Cihazları ayırt etmek için yeterli bilgi almak için tüm cihazlar için böyle bir şey deneyin:

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

1

Aşağıdaki komutlar bana 19d2: 0016 (ZTE MF831 LTE çubuğunun "modem modu" kimliği olan ttyUSB cihaz adlarının listesini verecektir, sizinki farklı olabilir.):

    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

Bu, / sys / bus / usb / aygıtlarında sembolik bağlantılar da dahil olmak üzere ttyUSB * dosya adına sahip dosyaların bir listesi arasında geçiş yapacaktır. Sonuçlar içinde modalias adında bir dosya arayacağız ve "v" "19d2" satıcı kimliğini ve "p" 0016 ürün kimliğini içeren bir dize arayacağız. Çıktı eşleşirse, "/ dev / "USB'nin önünde mi? adlandırın. Afaik ilk veya genellikle son (en yüksek sayı) ZTE cihazları için modem bağlantı noktasıdır. Sonuçları / tmp / dosyasındaki bir dosyaya yansıtabilirsiniz. Hub'larınız varsa, muhtemelen maksdepth'i artırmanız gerekebilir.

Bu en zarif yol değil, ancak hemen hemen her Linux varyantı üzerinde çalışacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.