Почему «cat ttyUSB0» не производит вывод?

13

Я подключил инфракрасный приемник к 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
nlognfan
источник
2
попробуйте stty raw -echo < /dev/ttyUSB0; cat -vte /dev/ttyUSB0вместо.
Стефан Шазелас
@ Стефан Chazelas: так же ничего не происходит
nlognfan
Если вы не получаете никакого вывода, то я подозреваю, что это проблема с драйвером или что оборудование не было правильно обнаружено / идентифицировано. Это может оказаться полезным также: help.ubuntu.com/community/Lirc_USB-UIRT
ОДС
Обратите внимание, что использование инфракрасных трансиверов с мостами USB-to-serial обычно не работает.
Groxxda

Ответы:

3

Я думаю, что для последовательных устройств вы должны установить скорость передачи данных, прежде чем они что-то делают. Я не уверен, как это сделать из командной строки, чтобы начать catработу, но вы могли бы использовать эмулятор терминала, который позаботится об этом.

Попробуйте minicomили screen(т.е. screen /dev/ttyUSB0 115200- замените 115200 на скорость передачи вашего ИК-приемника.)

LawrenceC
источник
1

Не обращайте внимания на ответ о необходимости инициировать USB-соединение - оно уже было инициировано, когда вы подключили устройство.

Если вы просто хотите проверить, работает ли он, используйте dd if=/dev/ttyUSB0. Если вы действительно хотите прочитать эти символы, вам нужен последовательный терминал. Используйте minicom(CLI, нужно руководство), picocom(может разобраться самостоятельно), cutecom(хороший графический интерфейс, просто) или screen(CLI, но очень легко). Вам нужно знать скорость передачи данных. 90% это либо 115200, либо 9600, а также 57600, 38400 или 19200.

Кстати, какой приемник вы используете? Не могли бы вы дать нам ссылку на страницу продукта или описание?

Арсений Пичугин
источник
1

Это может не помочь, но вот похожая проблема, с которой я столкнулся в прошлом. Когда я непосредственно отслеживаю файл устройства для моей мыши (то есть, использую cat /dev/input/by-id/usb-<mymouse>), я получаю вывод, аналогичный тому, который вы получаете с помощью клавиатуры (то есть, бред). Однако некоторые движения мыши, такие как щелчок левой кнопкой мыши, не генерируют печатных символов, поэтому терминал ничего не показывает.

Конечно, мышь все еще что-то делает, мы просто не можем увидеть это, catиспользуя файл устройства. К счастью, в ядре есть удобная функция, называемая usbmon, которая полезна для прослушивания необработанного двоичного вывода usb-устройств. Используя это, мы можем точно видеть, что происходит, когда мы выполняем (скажем) щелчок левой кнопкой мыши, тогда как выполнение того же действия с помощью /devчасто ничего не показывает.

Опять же, это может не помочь, но вот как использовать usbmon:

  1. Убедитесь, что в вашем ядре включена поддержка usbmon. Вывод:
    zcat /proc/config.gz | grep USB_MON
    должен иметь либо =mили =yв нем.

  2. Если это так =m, то загрузите модуль сsudo modprobe usbmon

  3. Чтобы убедиться, что все 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.

Удачи :)

letshaveanadventure
источник
1

Для меня это была слишком низкая скорость. Вывод появился, когда я перенастроил систему (устройство и порт) на использование 300 вместо 150.

Raigedas
источник
-1

Кажется, я помню, что USB - это протокол, который требует, чтобы компьютер инициировал связь. Нельзя говорить самостоятельно. Таким образом, драйвер фактически обращается к необработанному устройству, а затем записывает вывод. Тем не менее, это только догадка, я также буду ждать другого ответа, чтобы подтвердить мои подозрения.

Орион
источник
Но это вопрос о последовательном порте. Тот факт, что последовательный порт связан с USB, не здесь и не там.
Селада