A / dev / ttyUSB için Otobüs ve Aygıt ilişkisi nasıl edinilir


14

USB dongle'ları yeniden başlatmak için bir komut dosyası yazmam gerekiyor. Tüm araçlara sahibim ancak / dev / ttyUSBx'imi fiziksel BUS ve DEVICE cihazına bağlayamıyorum. Bir sorun, aynı kimlik satıcı ve id ürün ile üç dongle var olmasıdır.

Ben lsusb yapmak çıktı:

Bus 001 Device 004: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 006: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 007: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 002: ID 80ee:0021
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Ve ben ekledim:

/dev/ttyUSB0
/dev/ttyUSB3
/dev/ttyUSB5

Ancak hangi cihazın hangi Veri Yolu Cihazı ile ilişkili olduğunu bilmek istiyorum. Örnek olarak aşağıdakileri almam gerekiyor:

/dev/ttyUSB0 -> Bus 001 Device 006
/dev/ttyUSB3 -> Bus 001 Device 004
/dev/ttyUSB5 -> Bus 001 Device 007

Ubuntu Server 10.04 kullanıyorum ve araçları test ettim:

lsusb
hal
lsmod

Ama ilişkiyi anlayamıyorum.

Yanıtlar:


11

Donanımınız olmadığından size kesin bir cevap veremem.

Söz konusu cihaza gitmenizi öneririm, örneğin:

ls -l /dev/ttyUSB0

ve majör ve minör düğüm numaralarını elde etmek. Diyelim ki 116, 7

Sonra şuraya git:

ls -l /sys/dev/char/116:7

( chartty bir karakter cihazı olduğundan, blockbunun yerine belirttiğiniz bir disk aygıtını izliyorsanız char)

Komutun çıktısında biraz benzer bir şey göreceksiniz:

lrwxrwxrwx 1 root root 0 Sep 6 00:17 116:7 -> ../../devices//sys/devices/pci0000:00/0000:00:13.5/pci0000:00/0000:00:13.5/usb1/1-3/1-3:1.1/sound/card1/pcmC1D0c

Rehber /sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/ ve alt dizinleri aygıt hakkında çok fazla bilgiye sahiptir. Örnek olarak /sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/busnumve /sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/devnum. Sistemimde bunlar / var / log / syslog içindeki aygıt hotplug girişlerinde belirtilen veri yolu ve aygıt numarası ile eşleşiyor.

/ Dev / video0 için sistemimde çalışan başka bir şey:

find /sys/dev -lname '*video0' -exec cat {}/device/busnum {}/device/devnum \; 2>/dev/null

Çok teşekkür ederim !, Bununla uzun süre savaşıyorum. Sadece daha fazla ziyaretçi için: Ubuntu Ubuntu 10.04.2 LTS'de cihaz dizini / sys / char / yerine / sys / dev / char /
Ernesto Campohermoso

Düzeltme için teşekkürler - Bu değişiklikle cevabı düzenledim ve bilgileri yazdırmak için bir find komutu ekledim.
John S Gruber

@JohnSGruber Tamam, ama nasıl monte edilir ?!
Dr.Jacky

1
@ Mr.Hyde: / dev / ttyUSB bağlayamazsınız; yalnızca disk sürücüsü gibi çalışan bazı cihazlar takılabilir.
John S Gruber

10

Karakter cihazlarını , karşılık gelen USB cihazı ve veri yolu numaralarına eşlemek için gerçekten iyi bir yol yoktur /dev/ttyUSB0. AMA, mümkün!

Böyle bir şey işe yarayabilir:

udevadm info --name=/dev/ttyUSB0 --attribute-walk

Oradan, cihaz ve ana cihazları hakkında bir sürü bilgi alırsınız. Şimdi, sadece istediğiniz verileri elde etmek için bu verileri ayrıştırmakla ilgili. Bunu geçmişte kullandım:

echo /dev/bus/usb/`udevadm info --name=/dev/ttyUSB0 --attribute-walk | sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p' | head -n 2 | awk '{$1 = sprintf("%03d", $1); print}'` | tr " " "/"

Şimdi, eğer bu bir ağız dolusu değilse, ne olduğunu bilmiyorum! Hadi yıkalım:

udevadm info --name=/dev/ttyUSB0 --attribute-walk - cihaz ve ana cihazları hakkında bilgi döndürür

sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p'- bu verileri ayrıştırır ve "devnum" veya "busnum" özniteliğini içeren tüm satırları döndürür. İlk önce "busnum" un listelendiğini varsayacağız ... ve bu durumda ... sadece ilk iki çıktı hattını alabiliriz.

head -n 2- Çıktının ilk 2 satırını alın. Burada daha süslü olabiliriz, ama biz sadece en yakın ebeveynin "bursum" ve "devnum" un ilk sırada yer alacağını varsayıyoruz.

awk '{$1 = sprintf("%03d", $1); print}' - Bu rakamları alır ve sıfırlarla doldurur.

echo /dev/bus/usb... - tüm bu caz echoyeni satırları boşluklarla değiştirmek için bir ifadeye sarıldı . Ekleyebilir -niçin echosondaki yeni satır kesmek istiyorum.

tr " " "/" - Çıktıdaki boşlukları eğik çizgilerle değiştirin

Bu şöyle bir şey çıkarır:

/dev/bus/usb/001/011

... tabii ki cihaz. İsterseniz, busnum:001 devnum:011birkaç değişiklikle kolayca bir şey çıktısı alabilirsiniz :

echo `udevadm info --name=/dev/ttyUSB0 --attribute-walk | sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\1\ \4/p' | head -n 2 | awk '{$1 = sprintf("%s:%03d", $1, $2); print $1;}'`

1

Düğümle ilgili tüm bilgileri aşağıdaki komutu kullanarak bulabilirsiniz:

udevadm info -a -p /sys/bus/usb-serial/devices/ttyUSB0/

Lütfen sondaki eğik çizgiyi kaldırın. "Syspath bulunamadı" yı verir.
17'de nvd
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.