공식적으론 지원하지 않음. 하지만 오픈소스로 개발된 툴을 설치하면 윈도우에 연결된 USB 장치를 WSL2 내부에서 사용 가능.
과정 정리.
일단 WSL2는 설치하였고, 여기에선 Ubuntu 20.04.4 LTS를 설치하였음.
먼저 usbipd (https://github.com/dorssel/usbipd-win) 설치
https://github.com/dorssel/usbipd-win/releases/latest 에서 최신 버전의 설치 파일을 받아서 설치. 설치후 재부팅 필요.
윈도우에서 Power Shell을 관리자 권한으로 실행. 터미널 화면에서,
PS C:\WINDOWS\system32> usbipd wsl list
BUSID VID:PID DEVICE STATE
2-1 27c6:533c Goodix fingerprint Not attached
2-5 0c45:6a0c Integrated Webcam Not attached
2-13 10c4:ea60 Silicon Labs CP210x USB to UART Bridge (COM3) Not attached
2-14 8087:0026 Intel(R) Wireless Bluetooth(R) Not attached
3-2 2188:6533 CalDigit Thunderbolt 3 Audio, USB Input Device Not attached
4-2 0853:0148 USB Input Device Not attached
4-8 2188:0747 USB Mass Storage Device Not attached
9-1 046d:c539 USB Input Device Not attached
9-2 413c:b080 Dell DA20 Adapter Not attached
와 같이 현재 윈도우PC에 연결된 USB 장치 리스트들이 보임. 오른쪽에는 현재 WSL에 연결되어 있는지 여부가 표시됨.
WSL2의 Ubuntu 20.04를 실행하고, 다음과 같이 usbipd 클라이언트 패키지를 설치한다.
$ sudo apt install linux-tools-virtual hwdata
$ sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20
이제 다시 파워셀로 돌아가서, 다음과 같이 WSL2에 연결될 디바이스를 attach 해줌.
PS C:\WINDOWS\system32> usbipd wsl attach --busid=2-13
버스아이디 번호는 위 리스트에서 참고.
WSL2의 Ubuntu에서 dmesg로 연결을 확인해보면,
...
[ 981.156497] vhci_hcd vhci_hcd.0: pdev(0) rhport(0) sockfd(3)
[ 981.157731] vhci_hcd vhci_hcd.0: devid(131085) speed(2) speed_str(full-speed)
[ 981.159973] vhci_hcd vhci_hcd.0: Device attached
[ 981.438826] vhci_hcd: vhci_device speed not set
[ 981.508832] usb 1-1: new full-speed USB device number 3 using vhci_hcd
[ 981.588445] vhci_hcd: vhci_device speed not set
[ 981.658522] usb 1-1: SetAddress Request (3) to port 0
[ 981.730925] usb 1-1: New USB device found, idVendor=10c4, idProduct=ea60, bcdDevice= 1.00
[ 981.731956] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 981.732837] usb 1-1: Product: CP2102 USB to UART Bridge Controller
[ 981.733628] usb 1-1: Manufacturer: Silicon Labs
[ 981.734221] usb 1-1: SerialNumber: 0001
[ 981.744934] cp210x 1-1:1.0: cp210x converter detected
[ 981.751507] usb 1-1: cp210x converter now attached to ttyUSB0
와 같이 정상적으로 연결되고, /dev에 장치가 생성됨을 볼 수 있음. 연결을 해제하려면 파워쉘에서
PS C:\WINDOWS\system32> usbipd wsl detach --busid=2-13
를 입력하면,
[ 1048.211316] vhci_hcd: connection closed
[ 1048.211480] vhci_hcd: stop threads
[ 1048.212982] vhci_hcd: release socket
[ 1048.213452] vhci_hcd: disconnect device
[ 1048.214003] usb 1-1: USB disconnect, device number 3
[ 1048.214792] cp210x ttyUSB0: cp210x converter now disconnected from ttyUSB0
[ 1048.215669] cp210x 1-1:1.0: device disconnected
정상적으로 연결 해제.
이제 실제 리눅스 시스템에서와 마찬가지로 장치 사용 가능.
—
덧.
장치를 attach 하는 도중 다음과 같은 에러가 발생하면,
usbipd: error: WSL kernel is not USBIP capable; update with 'wsl --update'.
위에서 제시한 해결 방법대로, wsl를 업데이트 해주면 됨.
참고링크:
먼저 내용 감사합니다.
그런데 위의 “/dev에 장치가 생성됨을 볼 수 있음” 에서 /dev에 어떤 장치가 생기나요? 저는 안보여서요
usb 1-1 도 아니고 vhci_hcd 도 아니고