직접 USB를 통해 Linux 장치를 직렬 장치로 사용할 수 있습니까?

직접 USB를 통해 Linux 장치를 직렬 장치로 사용할 수 있습니까?

나는 다음과 같은 내용을 읽었습니다.직렬 콘솔. 내가 Android 휴대폰을 가지고 있고 내 컴퓨터에서 직렬 출력을 읽고 싶다고 가정해 보겠습니다. 문제 없이 휴대폰용 커널을 컴파일할 수 있습니다.

기사에서 /dev/ttyUSB0과 같은 것을 보았습니다. 내 컴퓨터에서 콘솔을 보려면 장치에 대한 드라이버를 직접 작성해야 합니까?

답변1

내가 Android 휴대폰을 가지고 있고 내 컴퓨터에서 직렬 출력을 읽고 싶다고 가정해 보겠습니다.

이렇게 하려면 휴대폰에 직렬 하드웨어를 지원하는 커널 드라이버가 필요합니다(찾을 가능성이 거의 없거나, 있는 경우 휴대폰을 열고 마더보드에 와이어를 납땜해야 합니다). 또는

기사에서 /dev/ttyUSB0과 같은 것을 봤습니다.

커널은 USB 포트를 호스트 모드로 설정해야 하며 USB 직렬 장치를 클라이언트로 연결해야 합니다. (그런 다음 해당 장치의 직렬 포트를 다른 직렬 포트에 연결해야 합니다).

콘솔이 컴퓨터에 표시됩니까?

netconsole을 사용하는 등 더 쉬운 방법이 있습니다(이 경우 네트워크용 USB를 구성해야 함).

답변2

USB를 통해 Android 장치의 콘솔에 액세스할 수 있는 세 가지 옵션이 있습니다. USB-OTG, USB-C 이중 역할 포트 및 USB 3.x 호스트 간 통신.

USB-OTG는 USB-C 및 USB 3.x의 사용으로 인해 대부분 중복되고 더 이상 사용되지 않는 사양입니다. 하지만 일부 Android 시스템에서는 여전히 인기가 있는 것 같습니다. 기술적으로 USB-OTG는 USB micro-AB 포트를 사용해야 하는데, 많은 안드로이드 기기 제조사들이 이 부분의 규격을 위반하고 micro-B 포트에서 USB-OTG를 지원하고 있는 것으로 보입니다. 이 접근 방식은 Android 휴대폰/태블릿/모든 장치에 전원을 공급하는 "액세서리 충전 어댑터"를 사용할 수 있고 표준 USB 주변 장치에 연결할 수 있는 표준 USB-A 포트를 제공하기 때문에 널리 사용됩니다. USB-직렬 어댑터와 같은 표준 USB 주변 장치는 콘솔 디버그 포트를 제공합니다. 장치 설명서에는 Android 장치가 USB-OTG를 지원하는지 여부가 명시되어 있어야 합니다.

USB-C 이중 역할 포트는 포트가 호스트 또는 주변 장치 모드에서 작동할 수 있음을 의미합니다. USB-C가 탑재된 모든 Android 휴대폰에는 이중 역할 포트가 있을 것이라고 생각합니다. 컴퓨터에 대한 물리적 연결은 간단합니다. 모든 USB-C-USB-C 케이블 또는 USB-A-USB-C 케이블이 작동합니다. Android 장치가 컴퓨터에 직렬 장치로 표시되려면 올바른 드라이버와 구성이 필요합니다. 직접 시도해본 적은 없지만 인터넷에서 검색해 보니 다음과 같은 내용이 눈에 띄었습니다.https://android.googlesource.com/kernel/msm/+/android-7.1.0_r0.2/drivers/usb/gadget/function/u_serial.c 독자가 이를 작동시키는 방법에 대한 세부 사항을 발견할 수 있도록 연습용으로 남겨두겠습니다.

USB 3.x는 호스트 간 통신을 허용합니다. 이 기능은 한동안 Linux에서 지원되었습니다. 제가 직접 해본 적은 없지만 가능하다는 것은 알고 있습니다. 링크를 다시 제공하고 작동 방식에 대한 몇 가지 힌트를 제공하며 자세한 내용은 독자에게 맡기겠습니다.https://docs.kernel.org/driver-api/usb/usb3-debug-port.html

참고: USB 호스트-호스트 옵션을 사용하는 경우 사용되는 케이블 유형에 주의하십시오. USB 3.x 사양을 준수하지 않는 USB-A-USB-A 케이블이 많이 있습니다. 호환 케이블은 Vbus를 연결하지 않으며 USB 2.0 D+/D- 라인도 연결되지 않은 상태로 둡니다. 마찬가지로 혼란스러운 것은 USB-A-USB-A 케이블입니다. 이 케이블에는 케이블을 연속적으로 연결된 두 개의 직렬 또는 네트워크 어댑터처럼 보이게 만드는 전자 장치가 포함되어 있습니다. 기술적으로 이는 USB 케이블이 아니라 USB 장치입니다. Android 직렬 콘솔을 다른 컴퓨터에 연결하는 데 도움이 되지만 호스트 간 USB 3.x 디버그 케이블과는 다른 설정이 필요합니다. 올바른 유형의 케이블을 사용하고 있는지 어떻게 알 수 있습니까? 이는 복잡하고 설명하는 데 많은 시간이 걸리며 이 질문의 범위를 벗어나므로 별도로 논의할 가치가 있습니다.

여기에는 USB 직렬 콘솔 사용이 포함되지만 다른 옵션도 있습니다. DisplayPort를 사용하여 Bluetooth 가상 직렬 포트(내장 Bluetooth 사용 또는 USB를 통해 추가), 네트워크 콘솔(내장 Wi-Fi, USB-Wi-Fi 어댑터 또는 USB-이더넷 어댑터를 통해) 중에서 선택하세요. USB-C 도킹 스테이션, 콘솔 등을 위한 USB-A 포트입니다.

어쩌면 대답보다 더 많은 질문이 남아 있을 수도 있다는 것을 깨달았습니다. 여기에서는 각 방법의 작동 방식을 설명하기 위한 공간이 제한되어 있으며 초기 질문은 이것이 가능한지 여부입니다. 예, 가능합니다. 가능한 방법에 대한 몇 가지 옵션을 제공했습니다. 어떻게 작동하게 만드는지는 또 다른 질문입니다.

관련 정보