Я подключил инфракрасный приемник к USB-порту ... (последняя строка dmesg сообщает об устройстве)
$ 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
Затем я попробовал ...
$ sudo cat /dev/ttyUSB0
но нет выхода, просто зависает. Несмотря на то, что при нажатии любой кнопки на пульте дистанционного управления светодиод устройства инфракрасного приемника мигает, и это, похоже, работает.
Почему это может быть?
Примечания:
вышеприведенная команда завершается, когда я удаляю устройство из USB-порта, и печатает «cat: ttyUSB0: Нет такого устройства», а dmesg печатает 3 строки:
[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)
с файлами устройств для клавиатуры это работает, например:
$ sudo cat /dev/input/by-id/usb-USB_USB_Keykoard-event-kbd
выдает много странных символов на консоли, когда я нажимаю любую клавишу на клавиатуре
- то же самое происходит и на других портах USB
stty raw -echo < /dev/ttyUSB0; cat -vte /dev/ttyUSB0
вместо.Ответы:
Я думаю, что для последовательных устройств вы должны установить скорость передачи данных, прежде чем они что-то делают. Я не уверен, как это сделать из командной строки, чтобы начать
cat
работу, но вы могли бы использовать эмулятор терминала, который позаботится об этом.Попробуйте
minicom
илиscreen
(т.е.screen /dev/ttyUSB0 115200
- замените 115200 на скорость передачи вашего ИК-приемника.)источник
Не обращайте внимания на ответ о необходимости инициировать USB-соединение - оно уже было инициировано, когда вы подключили устройство.
Если вы просто хотите проверить, работает ли он, используйте
dd if=/dev/ttyUSB0
. Если вы действительно хотите прочитать эти символы, вам нужен последовательный терминал. Используйтеminicom
(CLI, нужно руководство),picocom
(может разобраться самостоятельно),cutecom
(хороший графический интерфейс, просто) илиscreen
(CLI, но очень легко). Вам нужно знать скорость передачи данных. 90% это либо 115200, либо 9600, а также 57600, 38400 или 19200.Кстати, какой приемник вы используете? Не могли бы вы дать нам ссылку на страницу продукта или описание?
источник
Это может не помочь, но вот похожая проблема, с которой я столкнулся в прошлом. Когда я непосредственно отслеживаю файл устройства для моей мыши (то есть, использую
cat /dev/input/by-id/usb-<mymouse>
), я получаю вывод, аналогичный тому, который вы получаете с помощью клавиатуры (то есть, бред). Однако некоторые движения мыши, такие как щелчок левой кнопкой мыши, не генерируют печатных символов, поэтому терминал ничего не показывает.Конечно, мышь все еще что-то делает, мы просто не можем увидеть это,
cat
используя файл устройства. К счастью, в ядре есть удобная функция, называемая usbmon, которая полезна для прослушивания необработанного двоичного вывода usb-устройств. Используя это, мы можем точно видеть, что происходит, когда мы выполняем (скажем) щелчок левой кнопкой мыши, тогда как выполнение того же действия с помощью/dev
часто ничего не показывает.Опять же, это может не помочь, но вот как использовать usbmon:
Убедитесь, что в вашем ядре включена поддержка usbmon. Вывод:
zcat /proc/config.gz | grep USB_MON
должен иметь либо
=m
или=y
в нем.Если это так
=m
, то загрузите модуль сsudo modprobe usbmon
Чтобы убедиться, что все usb-сокеты отображаются в нужном месте, запустите:
ls /sys/kernel/debug/usb/usbmon
Вы должны увидеть что-то вроде:
0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u
Разные цифры относятся к разным USB-портам, а те, у которых спереди 0, дают суммарный выход всех USB-портов. Например, запуск
cat /sys/kernel/debug/usb/usbmon/0u
показывает, что именно делает устройство, даже в тех случаях, когдаcat
в файле/dev
ничего не отображается .Решает ли это вашу проблему или нет, это может быть полезно в будущем, поскольку зачастую это более полезный способ прослушивания на устройствах USB, чем
/dev
.Удачи :)
источник
Для меня это была слишком низкая скорость. Вывод появился, когда я перенастроил систему (устройство и порт) на использование 300 вместо 150.
источник
Кажется, я помню, что USB - это протокол, который требует, чтобы компьютер инициировал связь. Нельзя говорить самостоятельно. Таким образом, драйвер фактически обращается к необработанному устройству, а затем записывает вывод. Тем не менее, это только догадка, я также буду ждать другого ответа, чтобы подтвердить мои подозрения.
источник