「cat ttyUSB0」が出力を生成しないのはなぜですか?

「cat ttyUSB0」が出力を生成しないのはなぜですか?

IRレシーバーを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

ところで出力ができず、ただ停止します。それでもリモコンのいずれかのボタンを押すとIR受信機の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ポートでも同様です。

答え1

シリアルデバイスの場合は、作業を実行する前にボーレートを設定する必要があると思います。コマンドラインでこれを実行して動作させる方法はわかりませんが、cat端末エミュレータを使用して処理できます。

minicomまたは試してみてくださいscreen(例:screen /dev/ttyUSB0 115200115200をIRレシーバーの転送速度に置き換えます)。

答え2

役に立たないかもしれませんが、これは私が経験したのと同じ問題です。マウス用のデバイスファイルを直接キャプチャすると(たとえば、を使用してcat /dev/input/by-id/usb-<mymouse>)、キーボードを使用して得られたものと同様の出力が表示されます(たとえば、横説説)。ただし、一部のマウス動作(左クリックなど)では印刷可能な文字が生成されないため、端末には何も表示されません。

もちろん、マウスはまだ何かをしていますが、catデバイスファイルを通してそれを見ることはできません。幸いなことに、カーネルにはUSBデバイスの生のバイナリ出力を盗聴するのに役立つusbmonというきちんとした機能があります。これを使用すると(たとえば)左クリックを実行したときに何が起こるのかを正確に確認できますが、通常は同じことをすると/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ポートを表し、前にゼロが付いた数字はすべてのUSBポートの合計出力を表します。たとえば、Runはファイル入力に何も表示されcat /sys/kernel/debug/usb/usbmon/0uない場合でも、デバイスが実行している操作を正確に表示できます。cat/dev

これが問題を解決するかどうかにかかわらず、一般的に/dev

頑張ってください:)

答え3

私は同じ問題に直面しました

一方、私のデバイスはデータストリームのみを送信し、行末は送信しません。

一度に1バイトずつストリームを処理するように/ dev / ttyUSB0をrawに設定する必要があります。

stty -F dev/ttyUSB0 オリジナル

(もちろん、速度が正しく設定されていることを確認し、行の末尾に転送値を追加するだけです。)

答え4

私にとっては、転送速度が低すぎます。 150の代わりに300を使用するようにシステム(デバイスとポート)を再構成すると、出力が表示されました。

関連情報