Mam pytanie dotyczące portów w systemie Linux. Jeśli podłączę urządzenie przez USB i chcę sprawdzić jego port, nie mogę tego zrobić za pomocą polecenia lsusb, który określa tylko numer magistrali i numer urządzenia na tej magistrali:
[ziga@Ziga-PC ~]$ lsusb
Bus 003 Device 007: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Czy istnieje polecenie, które mówi mi port, do którego urządzenie jest podłączone bezpośrednio? Jedynym sposobem na zrobienie tego do tej pory było rozłączenie i ponowne połączenie oraz użycie polecenia:
[ziga@Ziga-PC ~]$ dmesg | grep tty
[ 0.000000] console [tty0] enabled
[ 0.929510] 00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 4.378109] systemd[1]: Starting system-getty.slice.
[ 4.378543] systemd[1]: Created slice system-getty.slice.
[ 8.786474] usb 3-4.4: FTDI USB Serial Device converter now attached to ttyUSB0
W ostatnim wierszu widać, że moje urządzenie jest podłączone do / dev / ttyUSB0 .
usb
serial-port
dmesg
71GA
źródło
źródło
/dev
z wpisemlsusb
? A może chcesz wymienić wszystkie urządzenia/dev
, które pochodzą z fizycznego urządzenia USB? A może po prostu chceszls /dev/ttyUSB*
?ls /dev/ttyUSB*
wyświetli tylko 10 portów Maybee, ale z tej listy nie wiem, który jest przeznaczony dla mojego urządzenia.Odpowiedzi:
Nie jestem do końca pewien, o co pytasz. Wspominasz „port” kilka razy, ale w swoim przykładzie mówisz, że odpowiedź brzmi:
/dev/ttyUSB0
ścieżka urządzenia, a nie port. Więc ta odpowiedź dotyczy znalezienia ścieżki dla każdego urządzenia.Poniżej znajduje się szybki i brudny skrypt, który przegląda urządzenia w
/sys
poszukiwaniu urządzeń USB zID_SERIAL
atrybutem. Zwykle tylko prawdziwe urządzenia USB będą miały ten atrybut, więc możemy go filtrować. Jeśli nie, zobaczysz na liście wiele rzeczy, które nie są urządzeniami fizycznymi.W moim systemie powoduje to:
Wyjaśnienie:
Urządzenia, które się pojawią,
/dev
majądev
plik w swoim/sys
katalogu. Szukamy więc katalogów spełniających te kryteria.Chcemy ścieżki katalogu, więc usuwamy się
/dev
.To daje nam ścieżkę,
/dev
która odpowiada temu/sys
urządzeniu.To odfiltrowuje rzeczy, które nie są rzeczywistymi urządzeniami. W przeciwnym razie dostaniesz takie rzeczy jak kontrolery i huby USB.
W
udevadm info -q property --export
listuje wszystkie właściwości urządzenia w formacie, który może być analizowany przez powłokę do zmiennych. Po prostu wzywamyeval
to. Jest to również powód, dla którego zawijamy kod w nawiasie, abyśmy używali podpowłoki, a zmienne są usuwane w każdej pętli.Więcej filtrowania rzeczy, które nie są rzeczywistymi urządzeniami.
Mam nadzieję, że wiesz, co robi ta linia :-)
źródło
Możesz użyć tego polecenia, aby eksplorować urządzenie, jeśli jest podłączone do
usb0
:źródło
Możesz spróbować czegoś takiego poniżej.
źródło
dmesg | awk '/tty/ && /USB/ {print "/dev/"$1}'
(Równoważny, ale czysty ... ale wciąż dziwny kod; dlaczego nie po prostu razem ttyUSB? I po co było 2x rev?)rev
Służy więc ostatnie pole jest dostępne, to może być zastąpiony przez$NF
: dającdmesg | awk '/tty/ && /USB/ {print "/dev/"$NF}'
Być może chciałbyś poznać ścieżkę do adaptera szeregowego USB, który został podłączony jako ostatni?
źródło
Zakładając, że wiesz, jakie urządzenie jest podłączone, przynajmniej w 14.04 Ubuntu istnieje polecenie
usb-devices
, przez które możesz przejrzeć i znaleźć informacje:Pierwsza linia zawiera listę magistrali i portu, a także numer
lsusb
podanego urządzenia .źródło
/dev/*
ścieżki