WSL2에서 USB 디바이스 연결하기

참고링크: https://github.com/dorssel/usbipd-win, https://learn.microsoft.com/ko-kr/windows/wsl/connect-usb

WSL2는 윈도우에서 실행되는 일종의 가상머신입니다. 실제 윈도우에 연결된 USB 디바이스 (아두이노보드, 웹캠 등)를 WSL2에서 사용하기 위해서는 USB/IP 오픈소스 프로젝트에서 제공하는 usb-ipd를 사용하면 됩니다.

[v] 윈도우에서 usbipd 설치

먼저 설치를 위해서, 커맨드 창을 관리자 권한으로 실행합니다.

> winget install usbipd  
Microsoft Windows [Version 10.0.22621.1194] 
(c) Microsoft Corporation. All rights reserved.        
                                                                                                                                                                                         C:\Windows\System32> winget install usbipd  
The `msstore` source requires that you view the following agreements before using.
Terms of Transaction: https://aka.ms/microsoft-store-terms-of-transaction
The source requires the current machine's 2-letter geographic region to be sent to the backend
service to function properly (ex. "US").
Do you agree to all the source agreements terms?
[Y] Yes  [N] No: y

Found usbipd-win [dorssel.usbipd-win] Version 2.4.1 
This application is licensed to you by its owner. 
Microsoft is not responsible for, nor does it grant any licenses to, third-party packages.
Downloading https://github.com/dorssel/usbipd-win/releases/download/v2.4.1/usbipd-win_2.4.1.msi
██████████████████████████████  9.99 MB / 9.99 MB 
Successfully verified installer hash 
Starting package install...  
Successfully installed  

winget은 윈도우에서 사용할 수 있는 패키지 매니저입니다. 위와 같이 명령을 입력하고 나면 자동으로 설치가 진행됩니다.

[v] Linux 머신에서 USBIP 도구 및 하드웨어 데이터베이스 설치

WSL2를 실행하고, Ubuntu 머신에서 다음과 같이 입력하여 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

이제 설치가 완료되었습니다. 본격적으로 사용해보도록 합니다.


예시로, 노트북에 연결되어 있는 USB Serial 컨버터를 연결해봅니다.

먼저 디바이스를 WSL2 머신에 attach 해줘야 합니다. 커맨드창을 관리자 권한을 실행한 다음, 다음과 같이 입력하여 usb 디바이스를 확인해봅니다.

>usbipd wsl list 
BUSID  VID:PID    DEVICE                                                        STATE  
2-1    27c6:533c  Goodix fingerprint                                            Not attached  
2-2    1a86:7523  USB-SERIAL CH340 (COM6)                                       Not attached  
2-5    0c45:6a0c  Integrated Webcam                                             Not attached  
2-14   8087:0026  Intel(R) Wireless Bluetooth(R)                                Not attached  
6-2    0bda:8153  Realtek USB GbE Family Controller                             Not attached  
7-1    05ac:024f  USB Input Device                                              Not attached  
7-3    046d:c539  USB Input Device                                              Not attached  
7-4    0bda:49a7  Realtek USB2.0 Audio, USB Input Device                        Not attached 

제 노트북에서 USB Serial 컨버터가 버스 아이디 2-2에 연결되어 있습니다. 현재는 Not attached 상태로 되어 있습니다. 이제 이 디바이스를 WSL2에 연결해봅니다.

> usbipd wsl attach -b 2-2
> usbipd wsl list
BUSID  VID:PID    DEVICE                                                        STATE 
2-1    27c6:533c  Goodix fingerprint                                            Not attached 
2-2    1a86:7523  USB-SERIAL CH340 (COM6)                                       Attached - Ubuntu 
2-5    0c45:6a0c  Integrated Webcam                                             Not attached 
2-14   8087:0026  Intel(R) Wireless Bluetooth(R)                                Not attached
6-2    0bda:8153  Realtek USB GbE Family Controller                             Not attached 
7-1    05ac:024f  USB Input Device                                              Not attached 
7-3    046d:c539  USB Input Device                                              Not attached 
7-4    0bda:49a7  Realtek USB2.0 Audio, USB Input Device                        Not attached 

Attach한 이후 디바이스 리스트를 확인해보면 다음과 같이 Ubuntu에 Attached 된 상태로 확인이 됩니다.

이제 Ubuntu 머신으로 이동해서, dmesg로 연결이 되었는지 확인해봅니다.

$ sudo dmesg
...

[  827.577688] vhci_hcd vhci_hcd.0: pdev(0) rhport(0) sockfd(3)
[  827.578223] vhci_hcd vhci_hcd.0: devid(131074) speed(2) speed_str(full-speed)
[  827.578767] vhci_hcd vhci_hcd.0: Device attached
[  827.850429] vhci_hcd: vhci_device speed not set
[  827.920445] usb 1-1: new high-speed USB device number 3 using vhci_hcd
[  828.000576] vhci_hcd: vhci_device speed not set
[  828.150453] vhci_hcd: vhci_device speed not set
[  828.220264] usb 1-1: new full-speed USB device number 4 using vhci_hcd
[  828.300294] vhci_hcd: vhci_device speed not set
[  828.370303] usb 1-1: SetAddress Request (4) to port 0
[  828.410565] usb 1-1: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.63
[  828.412926] usb 1-1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[  828.413663] usb 1-1: Product: USB2.0-Serial
[  828.415868] ch341 1-1:1.0: ch341-uart converter detected
[  828.419568] usb 1-1: ch341-uart converter now attached to ttyUSB0

실제로 디바이스가 Ubuntu에 연결된 것을 확인할 수 있습니다.


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *