为什么“ 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

但没有输出,只是挂起。即使,当我按遥控器上的任何按钮时,红外接收器设备的LED也会闪烁,这似乎可以正常工作。

为什么会这样呢?


笔记:

  • 当我从USB端口移除设备并打印“ cat:ttyUSB0:No such device”时,以上命令退出,并且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端口也一样

2
试一试stty raw -echo < /dev/ttyUSB0; cat -vte /dev/ttyUSB0
斯特凡Chazelas

@ Stephane Chazelas:类似地什么也没发生
nlognfan 2014年


如果您没有得到任何输出,那么我怀疑它是驱动程序问题,或者未正确检测/识别硬件。这可能也被证明是有帮助的:help.ubuntu.com/community/Lirc_USB-UIRT
slm

请注意,将红外收发器与USB到串行桥接器配合使用通常不起作用。
groxxda 2014年

Answers:


3

我认为对于串行设备,您必须先设置波特率,然后再进行任何操作。我不确定如何从命令行执行cat此操作以使它正常工作,但是您可以使用可以解决此问题的终端模拟器。

尝试minicomscreen(即screen /dev/ttyUSB0 115200-用您的IR接收器的波特率替换115200。)


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'ing the device file' 看不到它。幸运的是,内核具有名为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窃听USB设备更有用的方法/dev

祝好运 :)


1

对我来说,波特率太低了。一旦我将系统(设备和端口)重新配置为使用300而不是150,就会出现输出。


-1

我似乎还记得USB是一种协议,它要求计算机启动通信。不允许自己说话。因此,驱动程序实际上与原始设备进行对话,然后捕获输出。但是,这只是预感,我也将等待其他答案来确认我的怀疑。


但这是有关串行端口的问题。串行端口与USB连接的事实不在此地。
Celada 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.