WSL에서 USB 사용하기 (ft. usbipd)
WSL2에서 USB 장치 직접 연결하기 (feat. usbipd-win)
WSL2는 정말 훌륭한 개발 환경이지만, 하드웨어 개발자나 임베디드 개발자에게는 치명적인 단점이 하나 있었습니다. 바로 USB 장치에 직접 접근할 수 없다는 점입니다. 하지만 마이크로소프트가 공식적으로 지원하는 오픈소스 프로젝트인 usbipd-win을 사용하면 이 문제를 해결할 수 있습니다.
이번 글에서는 Windows에 연결된 USB Serial Converter를 WSL2(Ubuntu)에 연결하여 /dev/ttyUSB0로 인식시키는 과정을 정리해 봅니다.

1. WSL 커널 버전 확인
USBIP를 사용하기 위해서는 WSL 커널 버전이 5.10.60.1 이상이어야 합니다. WSL 터미널에서 아래 명령어로 버전을 확인합니다.
Bash
$ uname -a
Linux TP-P14s-G4 5.15.153.1-microsoft-standard-WSL2 #1 SMP Fri Mar 29 23:14:13 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
만약 버전이 낮다면, Windows PowerShell(관리자)에서 업데이트를 진행해야 합니다. wsl --update
2. WSL(Linux) 측 필수 패키지 설치
WSL Ubuntu 내부에서 USB 하드웨어 식별자와 USBIP 도구를 사용하기 위해 패키지를 설치해야 합니다.
Bash
$ sudo apt install linux-tools-virtual hwdata
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
linux-tools-5.15.0-119 linux-tools-5.15.0-119-generic linux-tools-common
The following NEW packages will be installed:
hwdata linux-tools-5.15.0-119 linux-tools-5.15.0-119-generic linux-tools-common linux-tools-virtual
...
설치가 완료되면 update-alternatives를 통해 usbip 명령어 경로를 설정해 줍니다.
Bash
$ sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20
3. Windows 측 usbipd-win 설치
이제 Windows 호스트에 드라이버 역할을 할 usbipd-win을 설치합니다. PowerShell을 관리자 권한으로 실행하거나 일반 창에서 winget을 사용합니다.
PowerShell
PS> winget install --interactive --exact dorssel.usbipd-win
4. USB 장치 확인 및 바인딩 (Windows)
설치가 끝났다면 PowerShell에서 현재 연결된 USB 장치 목록을 확인합니다.
PowerShell
PS> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
2-2 17ef:30b0 ThinkPad USB-C Dock Audio, USB 입력 장치 Not shared
2-3 17ef:30a9 Billboard Device, Vendor Interface Not shared
4-1 0403:6001 USB Serial Converter Not shared
4-3 27c6:6594 Goodix MOC Fingerprint Not shared
...
목록 중에서 내가 WSL로 넘겨줄 장치를 찾습니다. 저는 **4-1 0403:6001 USB Serial Converter**를 연결할 예정입니다. 여기서 **BUSID (4-1)**를 기억해야 합니다.
먼저 해당 장치를 공유 가능하도록 bind 해줍니다. (최초 1회 필요, 관리자 권한 창에서 실행 권장)
PowerShell
PS> usbipd bind --busid 4-1
5. WSL로 장치 연결 (Attach)
바인딩이 되었다면, 이제 WSL에 해당 장치를 붙여줍니다(Attach). 이 명령어는 WSL을 사용할 때마다(장치를 뺐다 낄 때마다) 실행해 주어야 합니다.
PowerShell
PS> usbipd attach --wsl --busid 4-1
usbipd: info: Using WSL distribution 'Ubuntu' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Using IP address 172.27.240.1 to reach the host.
6. WSL에서 인식 확인
이제 WSL 터미널로 돌아와서 장치가 정상적으로 올라왔는지 확인합니다.
USB 장치 목록 확인 (lsusb)
Bash
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: 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
ID 0403:6001 장치가 정상적으로 보입니다.
TTY 장치 확인 시리얼 통신을 위해 /dev/ttyUSB* 장치가 생성되었는지 확인합니다.
Bash
$ ls -al /dev/tty*
...
crw-rw---- 1 root dialout 188, 0 Apr 2 10:00 /dev/ttyUSB0
/dev/ttyUSB0가 생성된 것을 확인할 수 있습니다. 이제 리눅스 환경에서 시리얼 통신 프로그램을 개발하거나 터미널을 열 수 있습니다.
요약
-
Windows:
usbipd-win설치 (winget install ...) -
WSL: 리눅스 툴 설치 (
apt install linux-tools-virtual hwdata) -
Windows PowerShell:
-
usbipd list(BUSID 확인) -
usbipd bind --busid <BUSID>(공유 설정) -
usbipd attach --wsl --busid <BUSID>(WSL로 연결)
-
-
WSL:
lsusb또는ls /dev/ttyUSB*확인