[Linux] WSL2에서 USB 시리얼 포트 사용 방법

pikamon·2023년 2월 24일
1

Linux

목록 보기
6/7
post-custom-banner

아래 글을 참고하여 직접 해보면서 나름대로 작성하였다.
https://lucidmaj7.tistory.com/388
(좋은 글 감사합니다!)


1. WSL Update

PowerShell를 실행하여 아래 명령어를 입력하여 WSL2를 업데이트한다.

wsl --update

2. USBIPD-WIN 설치

USBIPD라고, Hyper-V나 WSL2 게스트 머신에서 호스트 윈도우의 USB 디바이스를 제어할 수 있도록 오픈소스 프로젝트를 진행했다고 한다.

자세한 설치 방법이나 사용법은 아래 링크의 Readme 파일에 잘 나와있다.
https://github.com/dorssel/usbipd-win

우선은 아래의 release 페이지에 들어가서 msi 파일을 클릭하여 다운받는다.
https://github.com/dorssel/usbipd-win/releases

다운받은 후 설치한다. 설치하고 나면 PC를 재부팅해야 한다고 나오는데, 번거롭겠지만 재부팅을 해주자.

3. USBIPD 테스트

재부팅 후 PowerShell을 열어서 usbipd 명령어가 동작하는지 확인한다.

usbipd

정상 설치되었다면 명령어 입력 시 아래와 같은 화면을 볼 수 있다.

4. WSL2 리눅스 설정

WSL2 게스트 리눅스에서 아래 명령어를 입력하여 linux-tools-generic과 hwdata를 설치해준다.

sudo apt update
sudo apt install -y linux-tools-5.4.0-77-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip $(ls /usr/lib/linux-tools/*/usbip) 20

5. USB 연결 명령어 입력

PowerShell을 관리자 모드로 열어서 아래 명령어를 입력한다.

usbipd wsl list

그러면 아래와 같이 장치 목록이 출력된다.

여기서 WSL2 게스트 리눅스에 붙이고 싶은 장치를 선택하면 된다.

예를 들어 USB Serial Converter A, USB Serial Converter B 장치를 붙인다면 이 장치의 Bus ID는 1-1이므로, 아래와 같이 입력한다.

usbipd wsl attach --busid 1-1

그러면 아래와 같이 에러 없이 정상 실행되는 것을 볼 수 있다.

※ 주의. WSL2 게스트 리눅스 콘솔을 켜놓지 않고 명령어를 입력하면 아래와 같이 에러가 출력되므로, 콘솔을 켜놓고 실행해야 한다.

usbipd: error: The selected WSL distribution is not running; keep a command prompt to the distribution open to leave it running.

※ 주의. 위의 update-alternatives 명령을 실행하지 않으면 아래와 같이 에러가 출력되므로, 꼭 먼저 실행한다. (참고)

usbipd: error: WSL 'usbip' client not correctly installed. See https://github.com/dorssel/usbipd-win/wiki/WSL-support for the latest instructions.

만약 연결을 해제하고 싶으면 아래 명령어를 입력하면 된다.

usbipd wsl detach --busid 1-1

아래와 같이 에러 없이 실행되면 정상 연결 해제된 것이다.

6. WSL2에서 연결 정보 확인

dmesg를 입력하면 연결에 대한 정보를 볼 수 있다.

dmesg

usb 1-1에 대한 연결과 그에 대한 정보를 볼 수 있다.
대충 Digilent 사의 제품이 FTDI USB 케이블로 연결되었다는 뜻이다.
/dev/ttyUSB0에 붙었다가 /dev/ttyUSB1로 옮겨붙는 것처럼 보이는데, 왜 그런진 잘 모르겠다.

7. 통신 테스트

필자가 연결한 디바이스는 FPGA 보드이다. 보드를 USB-UART로 연결하고 터미널을 열면 Baudrate 115200으로 특정 로그를 출력하도록 FPGA 안에 프로그램 해놓았다.

WSL2 리눅스에서 시리얼 포트를 열어서 해당 로그가 콘솔에 잘 출력되는지 확인해보자.

먼저 리눅스에 minicom을 설치한다.

sudo apt install -y minicom

그리고 디바이스 노드를 /dev/ttyUSB1로, Baudrate를 115200으로 하여 포트를 연다.

sudo minicom -D /dev/ttyUSB1 -b 115200

그러면 아래와 같이 로그가 출력되는 것을 볼 수 있다!

Ctrl + A, C 를 입력하여 버퍼를 비우고, FPGA 보드를 한 번 리셋해주었더니 아래와 같이 좀 더 깨끗하게 출력되었다.

이렇게 하여 WSL2 리눅스에서 윈도우에 붙은 USB 시리얼 포트를 제어할 수 있다는 사실을 알게 되었다!

빠져나오려면 Ctrl + A, X 를 입력하면 된다.

profile
개발자입니당 *^^* 깃허브 https://github.com/pikamonvvs
post-custom-banner

2개의 댓글

comment-user-thumbnail
2024년 3월 15일

usbipd wsl list 는 usbipd list로 명령어가 바뀌었습니다.
참고 : https://learn.microsoft.com/windows/wsl/connect-usb#attach-a-usb-device.

1개의 답글