2011-01-25 28 views
8

Odczytuję dane z wielu identycznych kart USB-szeregowych w Ubuntu 10.1.Jak zidentyfikować wiele kart USB-szeregowych pod Ubuntu 10.1

Czasami zmienia się ich ścieżka/dev/tty (np. Jeśli podczas uruchamiania są podłączone inne urządzenia USB).

Potrzebuję sposobu wielokrotnego odwoływania się do tego samego adaptera przez takie zmiany.

Wszystkie urządzenia mają takie same numery seryjne, zgodnie z udevadm.

Myślę, że najbardziej prawdopodobną opcją jest identyfikacja adaptera, z którym port jest połączony (nie są przenoszone).

Mogę znaleźć różne interesujące/dev ścieżki, które mogą działać, ale pomimo całej dyskusji o udev online, nie mogę znaleźć ostatecznego oświadczenia o tym, czy niektóre z tych ścieżek są statyczne, jeśli urządzenie jest podłączone do port statyczny.

+1

Znalazłem to superuser odpowiedź bardzo przydatna: http://superuser.com/a/536648/27510 – ergosys

Odpowiedz

-1

urządzeń mają te same numery seryjne [..]

W usb-parse-devpath.pm adresy to za pomocą autobusu i portu ID adaptera.

9

Istnieje rozwiązanie. Lepiej późno niż kiedykolwiek;)

Użyj następującej reguły udev, aby zmapować urządzenia /dev/ttyUSB{?} do łącza /dev/usb-ports/%bus_id-%port_id.

Oto moja /etc/udev/rules.d/usb-parse-devpath.rules:

ACTION=="add", KERNEL=="ttyUSB[0-9]*", PROGRAM="/etc/udev/rules.d/usb-parse-devpath.pm %p", SYMLINK+="usb-ports/%c" 

A usb-parse-devpath.pm scenariusz:

#!/usr/bin/perl -w 

@items = split("/", $ARGV[0]); 
for ($i = 0; $i < @items; $i++) { 
    if ($items[$i] =~ m/^usb[0-9]+$/) { 
     print $items[$i + 1] . "\n"; 
     last; 
    } 
} 

Jak widać to pomaga nam tworzyć nazwanych linków do /dev/ttyUSB{?} urządzeń i umieścić je na /dev/usb-ports w następującym formacie : bus_id-port_id.

Na przykład, kolejna komenda daje mi następujące:

$ udevadm info --query=path --name=/dev/ttyUSB0 
/devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0/ttyUSB0/tty/ttyUSB0 

Tak, bus_id jest 3 i port_id jest 1 a teraz mam następujących w moim /dev/usb-ports:

$ ls -al /dev/usb-ports 
lrwxrwxrwx 1 root root 10 Май 12 00:26 3-1 -> ../ttyUSB0 

Pozdrawiam.

+2

Uważam, że zmiana print $ przedmiotów [$ i + 1] do wydrukuj $ items [$ i + 2] jest bardziej przydatna tutaj; ponieważ oba porty USB z przodu mojego komputera zdawały się mapować na "1-1" pod tym pierwszym! –

+0

@JamesMuscat: Dziękuję za odpowiedź. –

+0

Porozmawiaj o ponad inżynierii! 'AKCJA ==" dodaj ", KERNEL ==" ttyUSB [0-9] * ", SYMLINK + =" usb-ports/tty-% s {../ busnum} -% s {../ devpath} "' ma to samo. –

1

Podobnie jak odpowiedź Ilyi Matvejchikov, dobrym rozwiązaniem jest dodanie reguł udev, aby robić to, co chcesz z urządzeniem. Podobnie jak ty miałem podobny problem. Miałem zasilacz UPS na przejściówce USB-do-wielu-szeregowych i czasami system przełączał się na numery/dev/tty.

Moim rozwiązaniem było stworzenie reguły pasującej do typu urządzenia przez sterownik i port, a następnie utworzenie dowiązania symbolicznego do portu, do którego został podłączony mój UPS. Użyłem NUT do monitorowania UPS, który był zawsze podłączony do tego samego portu fizycznego.

# File contents of /etc/udev/rules.d/75-nut-ups.rules 
# Create /dev/nut-ups0 to use as a persistent serial device that can be used 
# reliably by nut to communicate with a UPS attached to the system. 
# The UPS is attached to the first port of a MosSemiconductor dual USB 
# serial adapter. 
KERNELS=="ttyUSB*", SUBSYSTEMS=="usb-serial", DRIVERS=="moschip7720", ATTRS{port_number}=="0", SYMLINK+="nut-ups0" 

Teraz skonfigurować NUT, aby zawsze używać stałej/dev/NUT ups0, jak port szeregowy i zasada dba o mapowaniu prawidłowo, gdy urządzenie usb-serial został rozpoznany.

Można użyć polecenia lsusb, aby dowiedzieć się rzeczywistą nazwę urządzenia do używania w regule, gdy jest podłączony.

2

Look z $ udevadm info -n /dev/ttyUSB0 -a którego portu urządzenie USB jest podłączone. Zmienna Jądra jednego z urządzenia macierzyste powinny być podobne do KERNELS == "1-1.2: 1.0".

Utwórz regułę udev:

SUBSYSTEM=="tty", KERNELS=="1-1.2:1.0", SYMLINK+="ttyUSB42" 
SUBSYSTEM=="tty", KERNELS=="1-1.3:1.0", SYMLINK+="usb-serial" 

i spust udev

$ udevadm trigger 
0

USB-urządzenia może Ci numer portu i wyliczanie autobus/dev.

0

Ja też szukałem tego tematu, aby znaleźć sposób fizycznego urządzenia USB przypisanego/podłączonego do logicznej/dev urządzenia. Tak więc, po pewnym prób i błędów, to co pracował dla mnie najlepsze:

zobaczyć, co istnieje logiczne urządzenia ttyUSBx (gdzie x oznacza 0, 1, 2 ...):

$ ls /dev 

trasę autobusu i numery portów dla wszystkich adapterów USB-serial:

$ lsusb 

Wreszcie zastosowanie:

$ udevadm info --name=ttyUSBx --attribute-walk | grep num 

teraz skontrolować wyjście udevadm aby dopasować nazwę urządzenia logicznego do rzeczywistego urządzenia fizycznego. Oto moja aukcja kiedy to robiłem:

$ lsusb 
Bus 002 Device 005: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial  (UART) IC 
Bus 002 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port 
Bus 002 Device 002: ID 80ee:0021 
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 

$ udevadm info --name=ttyUSB0 --attribute-walk | grep num 
    ATTRS{port_number}=="0" 
    ATTRS{urbnum}=="812" 
    ATTRS{busnum}=="2" 
    ATTRS{devnum}=="5" 
    ATTRS{urbnum}=="115" 
    ATTRS{busnum}=="2" 
    ATTRS{devnum}=="1" 
    ATTRS{numa_node}=="-1" 

$ udevadm info --name=ttyUSB1 --attribute-walk | grep num 
    ATTRS{port_number}=="0" 
    ATTRS{urbnum}=="465" 
    ATTRS{busnum}=="2" 
    ATTRS{devnum}=="4" 
    ATTRS{urbnum}=="115" 
    ATTRS{busnum}=="2" 
    ATTRS{devnum}=="1" 
    ATTRS{numa_node}=="-1" 

Tak, w moim przypadku, ttyUSB0 jest powiązany z urządzeniem na bus2, device5, która jest przyszłością Urządzenia Technology International USB Serial Adapter; podobnie ttyUSB1 jest skojarzony z urządzeniem na bus2, device4, czyli na karcie Prolific Technology, Inc. USB na Serial.

A jak już wskazano, polecenie:

$ usb-devices 

będzie Ci same informacje w sposób jedno-line. Myślałam, że pisać szczegółów, które pomogły mi nauczyć rzeczy pracował za kulisami ...

nadzieję, że był pomocny :)

1

Mam wiele USB do urządzeń szeregowych z każdy wielu portów i Wymienione wyżej rozwiązania nie zrobiły tego za mnie.

USB "KERNEL" nie wystarczał w moim przypadku, ale znalazłem numer portu.

Zdaję sobie sprawę, że to co ja proponuje teraz może być uznane za szaleństwo hack, ale działa dla mnie ..
do teraz ..

bym faktycznie być zadowolony z bardziej elegancki sugestię że osiągnąć coś podobnego ..

Więc ... Na podstawie poprzedniej formie odpowiedzi Ilya Matveychikov

pliku/etc/udev/rules .d/usb-parse-devpath.sh

#!/bin/bash 

DEVNUM=$(echo "${1}" | rev | cut -d'/' -f4 | rev | tr -d '-' | tr -d '.' | tr -d ':') 
PORTNUM=$(/sbin/udevadm info -a --path=${1} | grep "ATTRS{port_number}" | head -1 | cut -d'"' -f2) 
PRODUCT=$(/sbin/udevadm info -a --path=${1} | grep "ATTRS{product}" | head -1 | cut -d'"' -f2 | tr -d '/' | tr ' ' '_') 

NEWID="ttyUSB_${PRODUCT}_${DEVNUM}${PORTNUM}" 

#echo "${NEWID} :: $1" >> /tmp/DEBUG_udev.txt 

echo "$NEWID" 

i plik: /etc/udev/rules.d/99-usb-serial.rules

ACTION=="add", KERNEL=="ttyUSB[0-9]*", PROGRAM="/etc/udev/rules.d/usb-parse-devpath.sh %p", SYMLINK+="TTYUSBs/%c" 

Wynik wyglądać tak:

# ls -l /dev/TTYUSBs 

lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435100 -> ../ttyUSB20 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435101 -> ../ttyUSB21 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435102 -> ../ttyUSB22 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435103 -> ../ttyUSB23 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435104 -> ../ttyUSB24 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435105 -> ../ttyUSB25 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435106 -> ../ttyUSB26 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435107 -> ../ttyUSB27 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436100 -> ../ttyUSB28 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436101 -> ../ttyUSB29 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436102 -> ../ttyUSB30 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436103 -> ../ttyUSB31 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436104 -> ../ttyUSB32 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436105 -> ../ttyUSB33 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436106 -> ../ttyUSB34 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436107 -> ../ttyUSB35 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport4_4341100 -> ../ttyUSB38 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport4_4341101 -> ../ttyUSB39 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport4_4342100 -> ../ttyUSB36 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport4_4342101 -> ../ttyUSB37 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Edgeport8_421100 -> ../ttyUSB2 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Edgeport8_421101 -> ../ttyUSB3 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Edgeport8_422100 -> ../ttyUSB4 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Edgeport8_422101 -> ../ttyUSB5 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport8_423100 -> ../ttyUSB18 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport8_423101 -> ../ttyUSB19 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Edgeport8_424100 -> ../ttyUSB0 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Edgeport8_424101 -> ../ttyUSB1 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_431100 -> ../ttyUSB6 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_431101 -> ../ttyUSB7 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_431102 -> ../ttyUSB8 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_431103 -> ../ttyUSB9 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_0 -> ../ttyUSB10 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_1 -> ../ttyUSB11 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_2 -> ../ttyUSB12 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_3 -> ../ttyUSB13 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_433100 -> ../ttyUSB14 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_433101 -> ../ttyUSB15 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_433102 -> ../ttyUSB16 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_433103 -> ../ttyUSB17