본문 바로가기
Development/Docker

WSL USB Serial port

by 드로니뚜벅이 2023. 9. 10.

WSL에서는 기본으로 USB 타입의 시리얼 통신 포트를 사용할 수 없는 것 같습니다. 여기서 말하는 시리얼 통신이라 함은 USB2Serial 과 같은 컨버터를 사용한 경우를 의미합니다.

다행히도 마이크로소프트에서 사용할 수 있는 방법을 제공하고 있습니다. (여기서는 Windows 11 기준으로 설명합니다.)

 

1. usbipd-win 설치

usbipd는 Hyper-V나 WSL2 게스트 머신에서 호스트 윈도우의 USB 디바이스를 제어하기 위한 오픈소스 프로젝트입니다.

 

먼저, Windows PowerShell를 실행하여 WSL2를 업데이트합니다.

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

새로운 기능 및 개선 사항에 대 한 최신 PowerShell을 설치 하세요! https://aka.ms/PSWindows

PS C:\Windows\system32> wsl --update
업데이트 확인 중입니다.
Linux용 Windows 하위 시스템 최신 버전이 이미 설치되어 있습니다.
PS C:\Windows\system32>

 

그런 다음, 아래 페이지에서 최신 usbipd 설치파일(예: usbipd-win_3.1.0.msi)을 다운로드해서 설치합니다.

정상적으로 설치가 완료되면 명령어를 실행해서 아래 화면처럼 출력되는지 확인합니다.

PS C:\Windows\system32> usbipd
usbipd-win 3.1.0

Description:
  Shares locally connected USB devices to other machines, including Hyper-V guests and WSL 2.

Usage:
  usbipd [command] [options]

Options:
  --version       Show version information
  -?, -h, --help  Show help and usage information

Commands:
  bind     Bind device
  license  Display license information
  list     List USB devices
  server   Run the server on the console
  state    Output state in JSON
  unbind   Unbind device
  wsl      Convenience commands for WSL

PS C:\Windows\system32>

 

2. Linux에서 USBIP 도구 및 하드웨어 데이터베이스 설치

사용자 공간 도구와 USB 하드웨어 식별자의 데이터베이스를 설치합니다. (여기서는 Ubuntu를 대상으로 설명합니다.)

$ sudo apt install linux-tools-generic hwdata
$ sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20

위 명령어를 실행하고 나면 USB 디바이스를 공유하기 위해 Windows에서 서비스가 실행되고 있으며 공유 디바이스에 연결하기 위해 필요한 도구가 WSL에 설치됩니다.

 

3. USB 디바이스 연결

관리자 모드로 PowerShell을 열고 아래 명령어(usbipd wsl list)를 실행합니다.

PS C:\Windows\system32> usbipd wsl list
BUSID  VID:PID    DEVICE                                                        STATE
2-5    1c7a:05a1  EgisTec Touch Fingerprint Sensor                              Not attached
2-10   8087:0033  인텔(R) 무선 Bluetooth(R)                                     Not attached
4-3    0403:6001  USB Serial Converter                                          Not attached

PS C:\Windows\system32>

 

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
yunny@ttagiya:~$

WSL 게스트 리눅스에 붙이고 싶은 장치(4-3)를 선택하여 아래처럼 실행합니다.

PS C:\Windows\system32> usbipd wsl attach --busid 4-3
usbipd: info: Using default WSL distribution 'Ubuntu-22.04'; specify the '--distribution' option to select a different one.
PS C:\Windows\system32> usbipd wsl list
BUSID  VID:PID    DEVICE                                                        STATE
2-5    1c7a:05a1  EgisTec Touch Fingerprint Sensor                              Not attached
2-10   8087:0033  인텔(R) 무선 Bluetooth(R)                                     Not attached
4-3    0403:6001  USB Serial Converter                                          Attached - WSL

PS C:\Windows\system32>

필요할 경우 리눅스 배포버전을 기술할 수도 있습니다.

> usbipd wsl attach --busid 4-3 --distribution Ubuntu-22.04

 

리눅스에 다시 확인해 보면 디바이스가 연결되어 있음을 확인할 수 있습니다.

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$

 

4. USB 디바이스 연결 끊기

디바이스 연결을 해제하고 싶으면 아래 명령어를 실행합니다.

PS C:\Windows\system32> usbipd wsl detach --busid 4-3
PS C:\Windows\system32> usbipd wsl list
BUSID  VID:PID    DEVICE                                                        STATE
2-5    1c7a:05a1  EgisTec Touch Fingerprint Sensor                              Not attached
2-10   8087:0033  인텔(R) 무선 Bluetooth(R)                                     Not attached
4-3    0403:6001  USB Serial Converter                                          Not attached

PS C:\Windows\system32>

 

yunny@ttagiya:~/work/projects/untact/anywhere/build/bin$ ls /dev/tty*
/dev/tty    /dev/tty15  /dev/tty22  /dev/tty3   /dev/tty37  /dev/tty44  /dev/tty51  /dev/tty59  /dev/tty9
/dev/tty0   /dev/tty16  /dev/tty23  /dev/tty30  /dev/tty38  /dev/tty45  /dev/tty52  /dev/tty6   /dev/ttyS0
/dev/tty1   /dev/tty17  /dev/tty24  /dev/tty31  /dev/tty39  /dev/tty46  /dev/tty53  /dev/tty60  /dev/ttyS1
/dev/tty10  /dev/tty18  /dev/tty25  /dev/tty32  /dev/tty4   /dev/tty47  /dev/tty54  /dev/tty61  /dev/ttyS2
/dev/tty11  /dev/tty19  /dev/tty26  /dev/tty33  /dev/tty40  /dev/tty48  /dev/tty55  /dev/tty62  /dev/ttyS3
/dev/tty12  /dev/tty2   /dev/tty27  /dev/tty34  /dev/tty41  /dev/tty49  /dev/tty56  /dev/tty63  /dev/ttyUSB0
/dev/tty13  /dev/tty20  /dev/tty28  /dev/tty35  /dev/tty42  /dev/tty5   /dev/tty57  /dev/tty7
/dev/tty14  /dev/tty21  /dev/tty29  /dev/tty36  /dev/tty43  /dev/tty50  /dev/tty58  /dev/tty8
yunny@ttagiya:~/work/projects/untact/anywhere/build/bin$

 

 

 

참고사이트

 

 

'Development > Docker' 카테고리의 다른 글

compinit:503: no such file or directory: /usr/share/zsh/vendor-completions/_docker  (0) 2024.03.12
도커 설치하기  (0) 2022.04.29
도커(docker)란?  (0) 2022.04.19