Identyfikacja portów szeregowych RS232/USB w Linux

Linux jako system PC i Embedded
Regulamin forum
Aby łatwiej poruszać się w zagadnieniach to prosimy aby w temacie, na samym początku, w nawiasach prostokątnych umieszczać hasło wiodące dla opisywanego problemu np. [Debian], [System embedded], [Linux Mint] itp.
Awatar użytkownika
tasza
Expert
Expert
Posty: 571
Rejestracja: czwartek 12 sty 2017, 10:24
Lokalizacja: Ostrowiec Św. / Warszawa
Kontaktowanie:

Identyfikacja portów szeregowych RS232/USB w Linux

Postautor: tasza » sobota 23 wrz 2017, 21:51

#slowanawiatr

Żadna to nowość, że wszelkiej maści przelotki-konwertery USB/RS232 oparte na kostkach PL2303 firmy Prolific czy FT232R od FTDI niezmiernie ułatwiają nam życie gdy potrzeba zrealizować klasyczną komunikację szeregową z właśnie budowanym urządzonkiem.

IMG_9081.JPG


Od strony systemu uP mamy wtenczas zwykły UART z liniami TxD, RxD od strony komputera osobistego - wirtualny port szeregowy, z poziomu naszej aplikacji obsługiwany na takich samych zasadach co wbudowane trwale w maszynę peryferia.

Z przelotkami USB jest tylko jeden, niewielki kłopot - nie za bardzo wiadomo, jaką nazwę świeżo wetkniętemu konwerterowi przydzieli system operacyjny, a istotne jest to niezmiernie, ponieważ nazwę portu szeregowego podajemy przecież w konfiguracji naszej aplikacji: COM1, albo COM2, albo /dev/ttyUSB3 albo... no właśnie, co?

Smaczku sprawie dodaje fakt, że często posługujemy się różnej maści hubami USB, czy jak tam nazwać te replikatory portów, koncentratory lub inne rozgałęziacze. System przydziela nazwy w/g swoich zasad, myślę, że warto chwilę czasu poświęcić na odcyfrowanie jakimi prawidłami rządzi się nasz 'ekosystem USB'.

Wyobraźmy sobie plątaninę jak na zdjęciu poniżej.

IMG_9084.JPG


To zakupiony dziś na naszym lokalnym bazarku hubik USB renomowanej firmy Manta z fajnym ledzikiem i czterema portami, jak za piątak to jest całkiem w porządku.

IMG_9080.JPG
IMG_9082.JPG


W dwa gniazda wetknięte konwertery-kabelki na bazie PL2303 oraz w kaskadę - kolejny hub (śliczny gifcik) Connec'style, a do niego kolejna przelotka USB/RS232.

IMG_9083.JPG


I tu powstaje pytanie - jakie nazwy urządzeń przypisane są do poszczególnych 'wtyczek'.

Zaczynamy od wylistowania dostępnych portów szeregowych, ale tylko tych emulowanych przez USB, typowo są to `ttyUSBnnn`, zatem popatrzmy na wynik polecenia:

ls /dev/ttyUSB* pisze:

Kod: Zaznacz cały

otoja@icequeen:~ > ls /dev/ttyUSB*
/dev/ttyUSB0  /dev/ttyUSB1  /dev/ttyUSB2
otoja@icequeen:~ >


Jak można się było spodziewać - dostaliśmy trzy nazwy portów szeregowych, no super wręcz, ale wciąż nie wiemy, który jest który.

Zatem teraz spróbujemy sobie wylistować wszystko, co mamy zapięte na USB w naszym komputerze.

Płaska lista - taki inwentarz jakby, pokazuje na sztuki:
lsusb pisze:

Kod: Zaznacz cały

otoja@icequeen:~ > lsusb
Bus 001 Device 038: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 035: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 037: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 036: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 010: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 034: ID 1908:2311 GEMBIRD
Bus 001 Device 005: ID 1bcf:0007 Sunplus Innovation Technology Inc. Optical Mouse
Bus 001 Device 008: ID 049f:0051 Compaq Computer Corp. KU-0133 Easy Access Interner Keyboard
Bus 001 Device 007: ID 0b97:7732 O2 Micro, Inc. Smart Card Reader
Bus 001 Device 006: ID 0b97:7731 O2 Micro, Inc.
Bus 001 Device 004: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
otoja@icequeen:~ >


Tu widoczna jest struktura instalacji, w szczególności pokazane są zależności pomiędzy urządzeniami:

lsusb --tree pisze:
tree_skan-karta-530.png



No wiem, na bogato wyszło, więc już wyjaśniam co do czego, bo komplikacja jest tu celowa.
Moja maszyna ma na zadku cztery wolne gniazda USB do wykorzystania. Jedno jest na stałe przeznaczone na kamerkę USB, ze względu na wymagany transfer przejście przez hub było nie do przyjęcia. Do kolejnego gniazdka zapięta została ta plątanina z testowej fotografii powyżej. Na kolejnym gniazdku wisi siedmioportowy hub f-my Belkin, do którego podłączona jest mysza oraz klawiatura z czytnikiem kart chipowych i kilka kabelków do wykorzystania a-hoc (aparat, programator isp, etc)

IMG_9079.JPG


Tu dygresja odnośnie >4 portowych hubów z kolorowym ledzikiem. Ten mój niebieskoświecący Belkin to tak naprawdę wewnątrz zapięte w kaskadę dwa czteroportowe układy. Z pierwszego układu dostępne dla mnie są trzy porty USB, czwarty pracuje jako master/host dla kolejnego (wewnętrznego) huba, który już udostępnia wszystkie swoje 4 porty.

Ograniczmy pole widzenia to plataniny z szeregowymi przelotkami.

Kod: Zaznacz cały

    |__ Port 8: Dev 10, If 0, Class=Hub, Driver=hub/4p, 480M           <----- to jest rozgałęziacz Manta
        |__ Port 1: Dev 36, If 0, Class=Hub, Driver=hub/4p, 480M       <----- to jest rozgałęziacz Connec'style
            |__ Port 2: Dev 37, If 0, Class=Vendor Specific Class, Driver=pl2303, 12M <-- to jest gruby RS232 zapięt w hub Connec-a
        |__ Port 2: Dev 35, If 0, Class=Vendor Specific Class, Driver=pl2303, 12M <-- to jest pierwszy kabelek szeregowy z Manty
        |__ Port 3: Dev 38, If 0, Class=Vendor Specific Class, Driver=pl2303, 12M <-- a to drugi tez z Manty


Fajnie, ale dalej nie znamy nazw systemowych przydzielonych dla kolejnych wtyczek. Tu z pomocą przyjdzie nam programik udevadm.
Zawołamy go dla każdej z pozyskanych poleceniem ls nazw urządzeń szeregowych, przekierowując wyniki do plików, czyli tak:

Kod: Zaznacz cały

otoja@icequeen:~ >
otoja@icequeen:~ > udevadm info -a -n /dev/ttyUSB0 > usb0.txt
otoja@icequeen:~ > udevadm info -a -n /dev/ttyUSB1 > usb1.txt
otoja@icequeen:~ > udevadm info -a -n /dev/ttyUSB2 > usb2.txt
otoja@icequeen:~ >


usb2.txt
usb0.txt
usb1.txt

Pliczki w załączniku, a teraz zobaczmy czym one sie od siebie różnią, ot usb0 od usb1 na przykład...

skan-karta-529.png


Widać spore różnice przy w pełni rozwiniętej nazwie urządzenia, ale tymi robaczkami nie będziemy się zajmować, bo wygadają zbyt skomplikowanie. Za to zwróćmy uwagę na wartości kluczy "ATTRS{devpath}". Wylistujmy sobie owe atrybuty urządzeń, najlepiej hurtem, dla wszystkich przelotek USB co je mamy w systemie:

Kod: Zaznacz cały

for wtyczka in `ls /dev/ttyUSB*`; do echo $wtyczka; udevadm info -a -n $wtyczka | grep "devpath"; done;


Dostaniemy coś takiego:
w bash to co powyżej pisze:

Kod: Zaznacz cały

otoja@icequeen:~ > for wtyczka in `ls /dev/ttyUSB*`; do echo $wtyczka; udevadm info -a -n $wtyczka | grep "devpath"; done;
/dev/ttyUSB0
Udevadm info starts with the device specified by the devpath and then
    ATTRS{devpath}=="8.2"
    ATTRS{devpath}=="8"
    ATTRS{devpath}=="0"
/dev/ttyUSB1
Udevadm info starts with the device specified by the devpath and then
    ATTRS{devpath}=="8.1.2"
    ATTRS{devpath}=="8.1"
    ATTRS{devpath}=="8"
    ATTRS{devpath}=="0"
/dev/ttyUSB2
Udevadm info starts with the device specified by the devpath and then
    ATTRS{devpath}=="8.3"
    ATTRS{devpath}=="8"
    ATTRS{devpath}=="0"
otoja@icequeen:~ >


Jeżeli dostrzeżemy korelację pomiędzy powyższym wynikiem a tym co pokazało nam `lsusb --tree` to mamy:

/dev/ttyUSB0 jest przypisane do wtyczki na pierwszym hubie (Port 8), do gniazdka numer 2 (Port 2)
/dev/ttyUSB1 jest przypisane do wtyczki na drugim hubie, wpięto ją w gniazdo 2 (Port 2), a hub pośredniczący (Connec) w gniazdo 1 (Port 1) tego głównego (Manta)
/dev/ttyUSB2 jest przypisane do wtyczki na pierwszym hubie (Port 8), do gniazdka numer 3 (Port 3)

Tu dobrze zauważyć, że pomimo wielkiej dynamiki numeracji urządzeń i przypisywanych im nazw każdy koncentrator ma gniazdka na stałe identyfikowalne w systemie. Włączając i wyłączając kolejne przelotki usb i sprawdzając poleceniem dmesg co system przypisał urządzeniu, można łatwo dojść do prawdy objawionej, że numeracja dla np. Manty z warzywnego bazarku jest jak poniżej:

numeracja_IMG_9080.JPG


Mając na uwadze tę trwałą numerację możemy skonfrontować wyniki naszych przemyśleń z pierwszą fotografią wystawki - zgadza się.

numeracja_all_IMG_9084.JPG


Kolejny krok, to napisanie jakiegoś skryptu czy gadgetu na desktop, który pokaże nam 'po ludzku' co gdzie mamy wetknięte.
No, ale to już temat na później...
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
eyes wide open but still blind to see what really matters...
#slowanawiatr ♫ ♥ ☕ ☘ ♌ ♫
pzdr,
Natasza

Awatar użytkownika
wojtek
Geek
Geek
Posty: 1584
Rejestracja: piątek 04 wrz 2015, 09:03

Re: Identyfikacja portów szeregowych RS232/USB w Linux

Postautor: wojtek » niedziela 24 wrz 2017, 06:53

Jak czytam takie materiały dotyczące linuksa to mówię: "o super, fajna sprawa", a jak sam zaczynam po raz kolejny od ponad chyba 25 lat mierzyć się z linuksem " to mówię: " .... ", a nie, nie powiem co mówię :D
Tak czy tak fajna porcja informacji i będę czytał mimo wszystko następny odcinek .
Wojtek

Awatar użytkownika
j23
User
User
Posty: 239
Rejestracja: czwartek 08 paź 2015, 18:40

Re: Identyfikacja portów szeregowych RS232/USB w Linux

Postautor: j23 » niedziela 24 wrz 2017, 17:09

Dzięki Tasza za kolejny ciekawy i bardzo przydatny artykuł. Temat konfiguracji portów USB pod linuxem nie jest błahy. Sam miałem okazję przekonać się co to znaczy mieć źle ustawiony odczyt/ładowanie urządzeń (w sensie bootowania) w trakcie odpalania systemu Raspbian, gdzie (nie wiem czemu) Raspberry widział tylko 4 USB, a niczego poza HUBem nie. Zapewne do tego tematu ustawiania portów pod Raspbianem wkrótce wrócę, a póki co dzięki za fajny artykuł! :)

Awatar użytkownika
tasza
Expert
Expert
Posty: 571
Rejestracja: czwartek 12 sty 2017, 10:24
Lokalizacja: Ostrowiec Św. / Warszawa
Kontaktowanie:

Re: Identyfikacja portów szeregowych RS232/USB w Linux

Postautor: tasza » poniedziałek 25 wrz 2017, 06:32

Na zakończenie tematu taki mój skryptowy przydaś, który potrafi wypisać nazwy portów i ich skojarzenia z gniazdkami zadanego koncentratora USB, założenie jest takie, że raz zapięty rozgałęziacz pozostaje na dłużej i jego numer jest w miarę niezmienny, no i u mnie tak właśnie jest.
Jeżeli potrzeba obsługi więcej podrzędnych rozgałęziaczy, zmienną hubId w skrypcie należałoby traktować nie jako skalar ale jako wektor i po jego elementach dokonywać iteracji w nadrzędnej pętli, może kiedyś to dopiszę. A póki co oto treść skrypciku:
checkPorts.sh pisze:

Kod: Zaznacz cały

#!/bin/bash
#ustawic hubId zaleznie gdzie wpiety jest rozgaleznik
hubId=8
serialPorts=`ls /dev/ttyUSB*`
for onePlug in $serialPorts; do
  oneSlot=`udevadm info -a -n $onePlug | grep "ATTRS{devpath}==\"$hubId\."`;
  toDel="ATTRS{devpath}==\"$hubId\."
  oneSlot=$(echo $oneSlot | sed 's/'$toDel'//g') 
  toDel="\""
  oneSlot=$(echo $oneSlot | sed 's/'$toDel'//g') 
  if [[ $oneSlot != *[[:punct:]]* ]]; then
    echo ▢ $oneSlot"   ➫" $onePlug
  else
    for otherSlot in $oneSlot; do     
      if [[ $otherSlot = *[[:punct:]]* ]]; then
   echo ▢ $otherSlot" ➫" $onePlug
      fi
    done;
  fi
done;


Można to zrobić na kilka innych sposobów, można pewnie o wiele zgrabniej, no ale jest tak i u mnie po dodaniu do Conky
.conkyrc pisze:

Kod: Zaznacz cały

${font Arial:bold:size=10}${color White}SERIAL ${color DarkSlateGray}${hr 2}${font :size=11}${color White}
${exec /home/otoja/SCRIPTS/checkPorts.sh}


działa następująco gdy przekłada się wtyczki USB pomiędzy gniazdkami rozgałęziacza:

https://youtu.be/4E9ms9sAeMk
eyes wide open but still blind to see what really matters...
#slowanawiatr ♫ ♥ ☕ ☘ ♌ ♫
pzdr,
Natasza

Awatar użytkownika
squeez
User
User
Posty: 154
Rejestracja: czwartek 04 lut 2016, 10:13

Re: Identyfikacja portów szeregowych RS232/USB w Linux

Postautor: squeez » poniedziałek 25 wrz 2017, 08:37

Nieco inne podejście, ja zawsze sobie radziłem tak, że w udev tworzyłem reguły, które przypisują odpowiednie pliki urządzeń w /dev w zależności od tego co zostało podłączone. wówczas też wiadomo jaki będzie plik urządzenia po podłączeniu.

Awatar użytkownika
xor
Newb
Newb
Posty: 81
Rejestracja: poniedziałek 05 wrz 2016, 21:44

Re: Identyfikacja portów szeregowych RS232/USB w Linux

Postautor: xor » poniedziałek 25 wrz 2017, 09:25

Ta. A urządzenie jest zawsze pod tą samą nazwą niezależnie od tego w który port wetknięte i w jakiej kolejności.

Awatar użytkownika
tasza
Expert
Expert
Posty: 571
Rejestracja: czwartek 12 sty 2017, 10:24
Lokalizacja: Ostrowiec Św. / Warszawa
Kontaktowanie:

Re: Identyfikacja portów szeregowych RS232/USB w Linux

Postautor: tasza » poniedziałek 25 wrz 2017, 10:12

Sztuka z regułami udev uda się, jeżeli wetknięte konwertery czymkolwiek się różnią, np jak w opisie tu:
http://hintshop.ludvig.co.nz/show/persi ... l-devices/
układziki ftdi mają swój unikalny numer seryjny, można do zatem regułami jakoś skojarzyć z nazwą ttyUSBx i wtedy nawet flamastrem wtyczkę podpisać. Konwerterki-kabelki z Prolific co je pokazałam w pierwszym poście są wszystkie identyczne, zgłaszają się tak samo na szynie, jedyne co je odróżnia po zauważeniu przez system to lokalizacja gniazda (lub huba i gniazda). Zatem ewentualne reguły mogłyby przypisywać na sztywno nazwy ttyUSBx nie tyle do ciągle przekładanych wtyczek co do gniazdek danego huba, cokolwiek tam wetkniemy i jest portem szeregowym - dostanie trwałą nazwę, zgodnie z nalepka na obudowie koncentratora na przykład.
eyes wide open but still blind to see what really matters...
#slowanawiatr ♫ ♥ ☕ ☘ ♌ ♫
pzdr,
Natasza

Awatar użytkownika
xor
Newb
Newb
Posty: 81
Rejestracja: poniedziałek 05 wrz 2016, 21:44

Re: Identyfikacja portów szeregowych RS232/USB w Linux

Postautor: xor » poniedziałek 25 wrz 2017, 11:02

Też prawda. Aczkolwiek istnieje teoretyczna możliwość zaprogramowania sobie unikalnego np. numeru seryjnego urządzenia:
https://sites.google.com/site/klaasdc/m ... 03-pid-vid
https://sourceforge.net/projects/cp210x-program/

Awatar użytkownika
tasza
Expert
Expert
Posty: 571
Rejestracja: czwartek 12 sty 2017, 10:24
Lokalizacja: Ostrowiec Św. / Warszawa
Kontaktowanie:

Re: Identyfikacja portów szeregowych RS232/USB w Linux

Postautor: tasza » poniedziałek 25 wrz 2017, 11:16

Ale tylko wtedy, gdy do kostki podłączony jest zewnętrzny EEPROM, wtedy sygnatury rzeczywiście można nadpisać, podobnie jest w FTDI, ja nie sądzę, aby w tych moich konwerterkach z warzywniaka za 6zł było cokolwiek poza podstawowym układem...
eyes wide open but still blind to see what really matters...
#slowanawiatr ♫ ♥ ☕ ☘ ♌ ♫
pzdr,
Natasza

Awatar użytkownika
xor
Newb
Newb
Posty: 81
Rejestracja: poniedziałek 05 wrz 2016, 21:44

Re: Identyfikacja portów szeregowych RS232/USB w Linux

Postautor: xor » poniedziałek 25 wrz 2017, 11:52

W CP2102 jest wewnętrzny EEPROM, a w CP2109 i niektórych PL2303 wewnętrzny OTP EPROM.

Nie żebym się czepiał czy coś. Przedstawiłaś bardzo fajne rozwiązanie, ale np. w mojej sytuacji raczej nieprzydatne. No ale ja jestem całkowitym amatorem, nie mam tylu gratów, i tak wyrafinowanych ;-). Nie mam nawet swojego stałego miejsca na zabawki i właściwie nie powinienem się odzywać :-)

Awatar użytkownika
tasza
Expert
Expert
Posty: 571
Rejestracja: czwartek 12 sty 2017, 10:24
Lokalizacja: Ostrowiec Św. / Warszawa
Kontaktowanie:

Re: Identyfikacja portów szeregowych RS232/USB w Linux

Postautor: tasza » poniedziałek 25 wrz 2017, 22:23

Nie odbieram tego jako czepianie się, wręcz przeciwnie, bo w sumie z tym udev podsunęliście mi pomysł na dalsze testy.

Tak więc teraz zabieramy się za modułowy cudaczny hub Xircom przywleczony wczoraj z bazarku Wolumen.
O samym urządzeniu więcej w Retro (viewtopic.php?f=82&t=1343), a tu bawimy się USB.

I jest tak - po zapięciu kabelka połączone pudełka meldują się w logu systemowym następująco:
dmesg pisze:

Kod: Zaznacz cały

[ 1609.072329] usb 1-5.3.1: new full-speed USB device number 11 using ehci-pci
[ 1609.164455] usb 1-5.3.1: New USB device found, idVendor=0451, idProduct=1446
[ 1609.164463] usb 1-5.3.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 1609.164884] hub 1-5.3.1:1.0: USB hub found
[ 1609.165149] hub 1-5.3.1:1.0: 7 ports detected
[ 1609.436212] usb 1-5.3.1.1: new full-speed USB device number 12 using ehci-pci
[ 1609.528444] usb 1-5.3.1.1: New USB device found, idVendor=0451, idProduct=1428
[ 1609.528450] usb 1-5.3.1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 1609.528893] hub 1-5.3.1.1:1.0: USB hub found
[ 1609.529069] hub 1-5.3.1.1:1.0: 4 ports detected
[ 1609.600199] usb 1-5.3.1.2: new full-speed USB device number 13 using ehci-pci
[ 1609.692441] usb 1-5.3.1.2: New USB device found, idVendor=0451, idProduct=1428
[ 1609.692448] usb 1-5.3.1.2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 1609.692893] hub 1-5.3.1.2:1.0: USB hub found
[ 1609.693067] hub 1-5.3.1.2:1.0: 4 ports detected
[ 1609.764196] usb 1-5.3.1.3: new full-speed USB device number 14 using ehci-pci
[ 1614.862224] usb 1-5.3.1.3: New USB device found, idVendor=085a, idProduct=0009
[ 1614.862232] usb 1-5.3.1.3: New USB device strings: Mfr=2, Product=3, SerialNumber=1
[ 1614.862599] usb 1-5.3.1.3: can't set config #1, error -32
[ 1614.932107] usb 1-5.3.1.4: new full-speed USB device number 15 using ehci-pci
[ 1615.027722] usb 1-5.3.1.4: New USB device found, idVendor=085a, idProduct=0003
[ 1615.027728] usb 1-5.3.1.4: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 1615.173833] usblp 1-5.3.1.4:1.0: usblp2: USB Bidirectional printer dev 15 if 0 alt 1 proto 2 vid 0x085A pid 0x0003
[ 1615.173872] usbcore: registered new interface driver usblp


Detaliczne informacje o nowym inwentarzu:
lsusb pisze:

Kod: Zaznacz cały

otoja@icequeen:~ > lsusb
Bus 001 Device 009: ID 1908:2311 GEMBIRD
Bus 001 Device 010: ID 1bcf:0007 Sunplus Innovation Technology Inc. Optical Mouse
Bus 001 Device 008: ID 049f:0051 Compaq Computer Corp. KU-0133 Easy Access Interner Keyboard
Bus 001 Device 007: ID 0b97:7732 O2 Micro, Inc. Smart Card Reader
Bus 001 Device 006: ID 0b97:7731 O2 Micro, Inc.
Bus 001 Device 015: ID 085a:0003 Xircom Portstation Paraller Port
Bus 001 Device 014: ID 085a:0009 Xircom Ethernet
Bus 001 Device 013: ID 0451:1428 Texas Instruments, Inc. Hub
Bus 001 Device 012: ID 0451:1428 Texas Instruments, Inc. Hub
Bus 001 Device 011: ID 0451:1446 Texas Instruments, Inc. TUSB2040/2070 Hub
Bus 001 Device 004: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
otoja@icequeen:~ >


Nooooo czad normalnie - huby f-my Texas Instruments a nie Biedronka, do tego Xircom Ethernet i port równoległy.
Wypisała się nazwa układu TUSB2040 zatem tak z ciekawości: https://dflund.se/~triad/krad/entrega/tusb2040.pdf USB 1.0, dokument z '97 czyli archeo totalne.

Hierarchię urządzeń z nowych pudełek nietrudno sobie wyobrazić:
lsusb --tree pisze:

Kod: Zaznacz cały

otoja@icequeen:~ > lsusb --tree
   Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/7p, 12M
        |__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/4p, 12M
        |__ Port 2: Dev 4, If 0, Class=Hub, Driver=hub/4p, 12M
        |__ Port 3: Dev 7, If 0, Class=(Defined at Interface level), Driver=kaweth, 12M
        |__ Port 4: Dev 6, If 0, Class=Printer, Driver=usblp, 12M
otoja@icequeen:~ >


Widać, że lewy boczek zawiera koncentrator do którego doczepione są: kolejne koncentratory lub osobne peryferia typu eth czy lpt.

No i ponowne kilka próbnych zapięć wtyczek Prolifica do kolejnych slotów w dwu połączonych ze sobą hubach.
I wyszło mi na to, że wtykając kolejno konwerterek w gniazdka dostaje wartości ATTRS{devpath} następujące:
"2.1.1" ... "2.1.4" dla pierwszego modułu huba
"2.2.1" ... "2.2.4" dla drugiego modułu huba

Oczywiście idVendor oraz idProduct pozostają niezmienne i są natywne dla moich kabelków-konwerterków z PL2303.

I tu nawiązując do wypowiedzi xor i squeez zmieniamy taktykę - teraz kolejne nazwy urządzeń zostaną przypisane do konkretnych gniazd Xircom-a. Są one ładnie opisane na froncie więc z identyfikacją na odwłoku też nie będzie problemów.

Na motywach artykułu z linka o ftdi i udev naszkicowałam dwa plki z regułami, dwa, bo wynikło mi tak, że każdy hub powinien mieć swój.
Pliczki z regułkami, które wgrywamy do foldera /etc/udev/rules.d/ wyglądają następująco:
98-usb-serial.rules pisze:

Kod: Zaznacz cały

# pierwszy (lewy) modulek xircoma
SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", ATTRS{devpath}=="2.1.1", SYMLINK+="COM11"
SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", ATTRS{devpath}=="2.1.2", SYMLINK+="COM12"
SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", ATTRS{devpath}=="2.1.3", SYMLINK+="COM13"
SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", ATTRS{devpath}=="2.1.4", SYMLINK+="COM14"


99-usb-serial.rules pisze:

Kod: Zaznacz cały

# drugi (prawy) modulek xircoma
SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", ATTRS{devpath}=="2.2.1", SYMLINK+="COM21"
SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", ATTRS{devpath}=="2.2.2", SYMLINK+="COM22"
SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", ATTRS{devpath}=="2.2.3", SYMLINK+="COM23"
SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", ATTRS{devpath}=="2.2.4", SYMLINK+="COM24"


Gdy demon udev zaczyta nową konfigurację, wtykanie prolificowych kabelków w złącza Xircoma zaowocuje nowymi, pojawiającymi się raz tu, a raz tam portami szeregowymi COM11...COM24.
ls -l /dev/COM* pisze:

Kod: Zaznacz cały

otoja@icequeen:~ > ls -l /dev/COM*
lrwxrwxrwx 1 root root 7 wrz 25 19:41 /dev/COM12 -> ttyUSB0
lrwxrwxrwx 1 root root 7 wrz 25 20:15 /dev/COM21 -> ttyUSB2
lrwxrwxrwx 1 root root 7 wrz 25 19:42 /dev/COM24 -> ttyUSB1
otoja@icequeen:~ >


Normalnie jak w Windows :)
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
eyes wide open but still blind to see what really matters...
#slowanawiatr ♫ ♥ ☕ ☘ ♌ ♫
pzdr,
Natasza

Awatar użytkownika
squeez
User
User
Posty: 154
Rejestracja: czwartek 04 lut 2016, 10:13

Re: Identyfikacja portów szeregowych RS232/USB w Linux

Postautor: squeez » wtorek 26 wrz 2017, 08:06

no i piknie i zgrabnie :)


Wróć do „GNU/Linux”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość