Ich habe einen Infrarotempfänger an einen USB-Anschluss angeschlossen ... (die letzte Zeile von dmesg gibt Auskunft über die Gerätedatei)
$ 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
Dann probierte ich es weiter ...
$ sudo cat /dev/ttyUSB0
aber keine Ausgabe, hängt einfach. Obwohl die LED des Infrarotempfängers blinkt, wenn ich eine beliebige Taste auf meiner Fernbedienung drücke, scheint dies zu funktionieren.
Warum könnte das so sein?
Anmerkungen:
Der obige Befehl wird beendet, wenn ich das Gerät vom USB-Anschluss entferne und "cat: ttyUSB0: No such device" drucke und dmesg 3 Zeilen druckt:
[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)
mit den gerätedateien für tastatur funktioniert das zB:
$ sudo cat /dev/input/by-id/usb-USB_USB_Keykoard-event-kbd
erzeugt viele seltsame Zeichen auf der Konsole, wenn ich eine beliebige Taste auf der Tastatur drücke
- Gleiches gilt auch für andere USB-Anschlüsse
stty raw -echo < /dev/ttyUSB0; cat -vte /dev/ttyUSB0
stattdessen.Antworten:
Ich denke, für serielle Geräte muss man die Baudrate einstellen, bevor sie etwas tun. Ich bin nicht sicher, wie ich das von der Kommandozeile aus machen soll, um
cat
an die Arbeit zu kommen, aber Sie könnten einen Terminal-Emulator verwenden, der sich darum kümmert.Versuchen Sie
minicom
oderscreen
(dhscreen /dev/ttyUSB0 115200
ersetzen Sie 115200 durch die Baudrate Ihres IR-Empfängers.)quelle
Ignorieren Sie die Antwort, dass eine USB-Verbindung hergestellt werden muss. Diese wurde bereits beim Anschließen des Geräts hergestellt.
Wenn Sie nur prüfen möchten, ob es funktioniert, verwenden Sie
dd if=/dev/ttyUSB0
. Wenn Sie diese Zeichen tatsächlich lesen möchten, benötigen Sie ein serielles Terminal. Verwenden Sieminicom
(CLI, brauchen Handbuch),picocom
(können Sie selbst herausfinden),cutecom
(schöne grafische Oberfläche, einfach) oderscreen
(CLI, aber sehr einfach). Sie müssen die Baudrate kennen. 90% ist es entweder 115200 oder 9600, könnte auch 57600, 38400 oder 19200 sein.Übrigens, welche Art von Empfänger verwenden Sie? Können Sie uns einen Link zu einer Produktseite oder Beschreibung geben?
quelle
Dies kann nicht helfen, aber hier ist ein ähnliches Problem, das ich in der Vergangenheit hatte. Wenn ich die Gerätedatei für meine Maus direkt öffne (dh benutze
cat /dev/input/by-id/usb-<mymouse>
), erhalte ich eine ähnliche Ausgabe wie mit Ihrer Tastatur (dh Kauderwelsch). Einige Mausbewegungen, wie das Klicken mit der linken Maustaste, generieren jedoch keine druckbaren Zeichen, sodass das Terminal nichts anzeigt.Natürlich macht die Maus immer noch etwas, wir können es einfach nicht sehen, indem wir
cat
die Gerätedatei öffnen. Glücklicherweise hat der Kernel eine nette Funktion namens usbmon, die hilfreich ist, um den rohen Binärausgang von USB-Geräten zu belauschen. Auf diese Weise können wir genau sehen, was passiert, wenn wir einen Linksklick ausführen (sagen wir es), während das Gleiche über/dev
oft nichts anzeigt.Auch dies kann nicht helfen, aber hier ist, wie man Usbmon verwendet:
Stellen Sie sicher, dass auf Ihrem Kernel usbmon aktiviert ist. Die Ausgabe von:
zcat /proc/config.gz | grep USB_MON
sollte entweder
=m
oder=y
darin enthalten sein.Wenn ja
=m
, laden Sie das Modul mitsudo modprobe usbmon
Um sicherzustellen, dass alle USB-Buchsen an der richtigen Stelle angezeigt werden, führen
ls /sys/kernel/debug/usb/usbmon
Sie Folgendes aus:
0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u
Die verschiedenen Nummern beziehen sich auf verschiedene USB-Ports, und die mit einer 0 voran geben die aggregierte Ausgabe aller USB-Ports an. Wenn Sie beispielsweise ausführen
cat /sys/kernel/debug/usb/usbmon/0u
, wird genau angezeigt, was das Gerät gerade tut, auch wenncat
die Datei nicht angezeigt wird/dev
.Unabhängig davon, ob dies Ihr Problem löst oder nicht, kann es in Zukunft hilfreich sein, da es häufig eine hilfreichere Methode zum Abhören von USB-Geräten ist als
/dev
.Viel Glück :)
quelle
Für mich war die Baudrate zu niedrig. Die Ausgabe wurde angezeigt, nachdem ich das System (Gerät und Port) neu konfiguriert hatte, um 300 statt 150 zu verwenden.
quelle
Ich erinnere mich, dass USB ein Protokoll ist, bei dem der Computer die Kommunikation initiieren muss. Es ist nicht erlaubt, alleine zu sprechen. Der Treiber spricht also tatsächlich mit dem Raw-Gerät und erfasst dann die Ausgabe. Das ist jedoch nur eine Vermutung, ich werde auch auf eine andere Antwort warten, um meine Vermutungen zu bestätigen.
quelle