「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代わりに試してください。
ステファンシャゼル14年

同様に何も起こらない:ステファンChazelas @
nlognfan


出力が得られない場合は、ドライバーの問題か、ハードウェアが正しく検出/識別されていないと思われます。これも役立つかもしれません:help.ubuntu.com/community/Lirc_USB-UIRT
slm

通常、USBからシリアルブリッジへの赤外線トランシーバーの使用は機能しません。
groxxda 14

回答:


3

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

試してみてくださいminicomまたはscreen(すなわち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、デバイスファイルを取得しても表示されません。幸いなことに、カーネルには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

幸運を :)


1

私にとっては、ボーレートが低すぎました。150ではなく300を使用するようにシステム(デバイスとポート)を再構成すると、出力が表示されました。


-1

USBはコンピューターが通信を開始することを必要とするプロトコルであることを思い出すようです。自分で話すことは許可されていません。そのため、ドライバーは実際にrawデバイスと通信し、出力をキャプチャします。ただし、これは単なる予言です。また、一時停止を確認するために別の回答を待ちます。


しかし、これはシリアルポートに関する質問です。シリアルポートがUSBで接続されているという事実は、ここにもそこにもありません。
セラダ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.