Dlaczego „cat ttyUSB0” nie wytwarza danych wyjściowych?

13

Podłączyłem odbiornik podczerwieni do portu USB ... (ostatnia linia dmesg mówi o pliku urządzenia)

$ dmesg
[10496.596063] usb 7-2: new full-speed USB device number 2 using uhci_hcd
[10496.751112] usb 7-2: New USB device found, idVendor=0df7, idProduct=0620
[10496.751117] usb 7-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[10496.751120] usb 7-2: Product: USB-Serial Controller
[10496.751124] usb 7-2: Manufacturer: Prolific Technology Inc.
[10496.787441] usbcore: registered new interface driver usbserial
[10496.787467] usbcore: registered new interface driver usbserial_generic
[10496.787483] usbserial: USB Serial support registered for generic
[10496.795104] usbcore: registered new interface driver pl2303
[10496.795129] usbserial: USB Serial support registered for pl2303
[10496.795160] pl2303 7-2:1.0: pl2303 converter detected
[10496.807238] usb 7-2: pl2303 converter now attached to ttyUSB0

Potem poszedłem spróbować ...

$ sudo cat /dev/ttyUSB0

ale brak danych wyjściowych, po prostu zawiesza się. Mimo że po naciśnięciu dowolnego przycisku na pilocie dioda LED odbiornika podczerwieni miga, więc wydaje się, że działa.

Dlaczego tak może być?


uwagi:

  • powyższe polecenie kończy działanie, gdy usuwam urządzenie z portu USB i wypisuje „cat: ttyUSB0: Brak takiego urządzenia”, a dmesg drukuje 3 linie:

     [13707.264086] usb 7-2: USB disconnect, device number 2 
     [13707.264894] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0
     [13707.264915] pl2303 7-2:1.0: device disconnected)
    
  • w przypadku plików urządzeń dla klawiatury działa to np .:

     $ sudo cat /dev/input/by-id/usb-USB_USB_Keykoard-event-kbd 
    

    produkuje wiele dziwnych znaków na konsoli, gdy naciskam dowolny klawisz na klawiaturze

  • to samo dzieje się na innych portach USB
nlognfan
źródło
2
spróbuj stty raw -echo < /dev/ttyUSB0; cat -vte /dev/ttyUSB0zamiast tego.
Stéphane Chazelas
@ Stephane Chazelas: podobnie nic się nie dzieje
nlognfan
Jeśli nie otrzymujesz żadnych wyników, podejrzewam, że jest to problem ze sterownikiem lub że sprzęt nie został poprawnie wykryty / zidentyfikowany. Może to również okazać się pomocne: help.ubuntu.com/community/Lirc_USB-UIRT
slm
Należy pamiętać, że korzystanie z nadajników-odbiorników podczerwieni z mostkami USB-szeregowy zwykle nie działa.
groxxda

Odpowiedzi:

3

Myślę, że w przypadku urządzeń szeregowych musisz ustawić prędkość transmisji, zanim cokolwiek zrobią. Nie jestem pewien, jak to zrobić z wiersza poleceń, aby zabrać się catdo pracy, ale możesz użyć emulatora terminali, który się tym zajmie.

Spróbuj minicomlub screen(tj. screen /dev/ttyUSB0 115200- zamień 115200 na szybkość transmisji twojego odbiornika IR).

LawrenceC
źródło
1

Zignoruj ​​odpowiedź dotyczącą potrzeby zainicjowania połączenia USB - zostało już zainicjowane po podłączeniu urządzenia.

Jeśli chcesz tylko sprawdzić, czy działa, użyj dd if=/dev/ttyUSB0. Jeśli chcesz odczytać te znaki, potrzebujesz terminalu szeregowego. Użyj minicom(CLI, potrzebujesz instrukcji), picocom(może sam to wymyślić), cutecom(ładny interfejs graficzny, łatwy) lub screen(CLI, ale naprawdę łatwy). Musisz znać szybkość transmisji. 90% to albo 115200, albo 9600, równie dobrze 57600, 38400 lub 19200.

Przy okazji, jakiego odbiornika używasz? Czy możesz podać nam link do strony produktu lub opisu?

Арсений Пичугин
źródło
1

To może nie pomóc, ale oto podobny problem, który miałem w przeszłości. Kiedy przechwytuję plik urządzenia dla mojej myszy bezpośrednio (tj. Za pomocą cat /dev/input/by-id/usb-<mymouse>), otrzymuję dane wyjściowe podobne do tego, co otrzymujesz za pomocą klawiatury (tj. Bełkot). Jednak niektóre ruchy myszy, takie jak kliknięcie lewym przyciskiem, nie generują żadnych znaków do wydrukowania, więc terminal nic nie pokazuje.

Oczywiście, mysz nadal coś robi, po prostu nie widzimy tego cat, pobierając plik urządzenia. Na szczęście jądro ma ciekawą funkcję o nazwie usbmon, która jest pomocna w podsłuchiwaniu surowego wyjścia binarnego urządzeń usb. Korzystając z tego, możemy dokładnie zobaczyć, co się dzieje, gdy wykonujemy (powiedzmy) lewy przycisk myszy, podczas gdy robienie tego samego poprzez /devczęsto nie pokazuje niczego.

Ponownie może to nie pomóc, ale oto jak korzystać z usbmon:

  1. Upewnij się, że twoje jądro ma włączoną usbmon. Wyjście:
    zcat /proc/config.gz | grep USB_MON
    powinno mieć albo jedno =malbo drugie =y.

  2. Jeśli tak =m, to załaduj modułsudo modprobe usbmon

  3. Aby upewnić się, że wszystkie gniazda USB są wyświetlane w odpowiednim miejscu, uruchom:
    ls /sys/kernel/debug/usb/usbmon
    Powinieneś zobaczyć coś takiego:
    0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u

Różne liczby odnoszą się do różnych portów USB, a te z 0 na początku dają zagregowane dane wyjściowe wszystkich portów USB. Na przykład uruchamianie cat /sys/kernel/debug/usb/usbmon/0upokazuje dokładnie to, co robi urządzenie, nawet w przypadkach cat, gdy plik w nim /devnic nie pokazał.

Niezależnie od tego, czy to rozwiąże problem, czy nie, może być pomocny w przyszłości, ponieważ często jest to bardziej pomocny sposób podsłuchiwania na urządzeniach USB niż /dev.

Powodzenia :)

lethaveanadventure
źródło
1

Dla mnie była to zbyt niska prędkość transmisji. Dane wyjściowe pojawiły się, gdy ponownie skonfigurowałem system (urządzenie i port) do użycia 300 zamiast 150.

Raigedas
źródło
-1

Wydaje mi się, że pamiętam, że USB jest protokołem, który wymaga komunikacji komputera z komputerem. Nie wolno mówić samodzielnie. Więc sterownik faktycznie mówi do surowego urządzenia, a następnie przechwytuje dane wyjściowe. Jednak to tylko przeczucie, będę też czekał na kolejną odpowiedź, aby potwierdzić moje podejrzenia.

orion
źródło
Ale to pytanie o port szeregowy. Fakt, że port szeregowy jest podłączony do USB, nie jest ani tu, ani tam.
Celada,