"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 포트를 나타내며 앞에 0이 붙은 숫자는 모든 USB 포트의 총 출력을 나타냅니다. 예를 들어 Run은 파일 입력에 아무 것도 표시 cat /sys/kernel/debug/usb/usbmon/0u되지 않는 경우에도 장치가 수행 중인 작업을 정확하게 표시 할 수 있습니다 .cat/dev

이것이 문제를 해결하는지 여부에 관계없이 일반적으로 /dev.

행운을 빌어요:)

답변3

나는 같은 문제에 직면했다

반면에 내 장치는 데이터 스트림만 보내고 줄 끝은 전송하지 않습니다.

한 번에 한 바이트씩 스트림을 처리하도록 /dev/ttyUSB0을 raw로 설정해야 합니다.

stty -F dev/ttyUSB0 원본

(물론 속도를 올바르게 설정했는지 확인하고 행 끝에 전송 값을 추가하면 됩니다.)

답변4

나에게는 전송 속도가 너무 낮습니다. 150 대신 300을 사용하도록 시스템(장치 및 포트)을 재구성했을 때 출력이 나타났습니다.

관련 정보