web-dev-qa-db-ja.com

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

赤外線レシーバーを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ポートでも同じことが起こります
13
nlognfan

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

minicomまたはscreenを試してください(つまり、screen /dev/ttyUSB0 115200-115200をIRレシーバーのボーレートに置き換えます。)

3
LawrenceC

USB接続を開始する必要性についての回答は無視してください。デバイスを接続したときにすでに開始されています。

機能しているかどうかを確認するだけであれば、dd if=/dev/ttyUSB0。これらの文字を実際に読み取るには、シリアル端末が必要です。 minicom(CLI、マニュアルが必要)、picocom(ご自分で理解できるかもしれません)、cutecom(素敵なグラフィカルインターフェイス、簡単)またはscreenを使用してください(CLI、しかし本当に簡単です)。ボーレートを知る必要があります。90%は115200または9600ですが、57600、38400または19200も同様です。

ところで、どんなレシーバーを使っていますか?製品ページまたは説明へのリンクを教えていただけますか?

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

1
Raigedas

これは役に立たないかもしれませんが、これは私が過去に経験した同様の問題です。マウスのデバイスファイルを直接catすると(つまり、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を実行すると、/devcatを実行してもファイルに何も表示されなかった場合でも、デバイスの動作が正確に表示されます。

これで問題が解決するかどうかにかかわらず、USBデバイスを盗聴するのに/devよりも役立つことが多いため、将来的に役立つ可能性があります。

幸運を :)

1