Install & Run Xilinx Vivado within the native WSL2 (WSLg) #3, USB connection

이글은, WSL2 Ubuntu-22.04 linux 내에서, Xilinx Vivado tool 사용시,

USB Driver 설치, USB jtag 연결, 설정법을 설명합니다.

usbipd 를 이용하는 방법 및 주의 사항들입니다.


WSL2 의 Virtual Machine 환경에서는,

일반 VM( VirtualBox 등)에 비해서 지원되지 않는 부분들이 있습니다.


Xilinx Vivado 사용시 문제가 되는 것은 USB port 의 직접연결입니다.

즉, target device/board 와 연결이 되지 않아

BitStream ( synthesis 결과 file ) 의 upload, SDK 에서 debug 등이 안됩니다.


이러한, WSL의 USB 장치 문제를 해결하는 OpenSource usbipd-win 가 있습니다.

MS 또한, USB 연결문제가 중요사항이므로, 아래 주소에서 안내하고 있습니다.

   Microsoft, connect-usb in wsl




Xilinx USB Driver 설치와, usbipd-win 의 실행에 필요한 과정은 다음과 같습니다.


1. Xilinx Cable Driver 설치

   linux Vivado를 설치할 경우, 설치 옵션에서, cable driver 가 선택되지 않습니다.

   별도로 설치해 주어야 합니다. 최근의 버전도 별도 설치해야 합니다.

   2018.3 버전의 경우, wsl Ubuntu-22.04 terminal에서 다음과 같이 입력합니다.

cd /tools/Xilinx/Vivado/2018.3/data/xicom/cable_drivers/lin64/install_script/install_drivers
sudo ./install_drivers

   Xilinx USB를 연결하지 말고 설치하도록 권고하고 있으나,

   설치 후, 물리적 연결을 끊었다가 다시 연결하면 대부분 잘 됩니다.


2. Windows 에서 usbipd-win 설치

   linux driver가 설치되었으면, Host(Windows) 에서 guest(WSL Ubuntu-22.04) 로

   USB 제어를 넘겨주는, usbipd-win 을 설치합니다.


   첫번째 방법 : Windows terminal에서 winget 명령으로 설치 ( 유저 계정 실행 )

PS C:\Users\gildong> winget install --interactive --exact dorssel.usbipd-win


   두번째 방법 : 설치 파일을 받아 실행

    https://github.com/dorssel/usbipd-win/releases

   위 site에서, usbipd-win 의 windows 설치 file을 받습니다.

   현재(2023.7.13) 3.0.0 이 latest 입니다.


   download한 usbipd-win_3.0.0.msi file을 실행(double click), 설치해 줍니다.


   참고로, Windows Terminal이 실행중인 상태에서, 설치한 경우,

   Windows terminal을 재시작해야, usbipd 명령이 실행됩니다. (path 적용)


3. usbipd 사용에 필요한 Ubuntu-22.04 package 설치와 설정

   WSL Ubuntu-22.04 terminal 에서, 필요한 package설치와 usbip설정을 해줍니다.

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


   위 과정은, MS site의 기준이며, usbipd github 의 설명과 조금 다릅니다.

   linux-tools-generic 과 linux-tools-virtual은, 사실상 같은 package입니다.

   USB 사용에 문제가 있을 때는 아래의 site를 참고하세요.

    https://github.com/dorssel/usbipd-win/wiki/WSL-support


   첫번째 line에서, linux-tools-generic 과 hwdata package를 설치하는 명령이며,

      배포판에 따라 다를 수 있습니다.

   두번째 line은, Ubuntu-22.04에서 usbip 를 default 로 등록하는 명령입니다.


   이로서 usbipd 사용을 위한 설치과정은 끝났습니다.



usbipd 의 사용 및 Xilinx USB jtag/debugger 연결 법 입니다.


1. usbipd wsl list 명령으로, 연결할 usb장치의 BUSID를 확인


   연결할 USB 장치의  BUSID 확인이 어려우면,

   USB 장치를 뺀 상태와 연결상태를 비교하면, 쉽게 알 수 있습니다.

PS C:\Users\gildong> usbipd wsl list
BUSID  VID:PID    DEVICE               STATE
3-3    046e:5542  USB 입력 장치        Not attached
3-4    046d:c077  USB 입력 장치        Not attached
5-2    0403:6010  JTAG+Serial          Not attached

   위 list중, BUSID 5-2 ( vid:pid 가 0403:6010 ) 인 장치가 Xilinx USB device 입니다. 

   device 이름이 JTAG+Serial 인데, 이 이름은 바뀔 수 있습니다.

   (예: USB Serial Converter A, USB Serial Converter B)


   우측 끝부분의 STATE 는, WSL의 접속여부를 알려줍니다.

   Not attached 는, WSL 로 연결되지 않은 상태입니다.


2. usbpid wsl attach명령으로, USB 장치를 WSL 에 접속(붙이기)

   아래의 명령은, 관리자 계정으로 해야 합니다.

   USB 장치도 연결되어 있어야 합니다.

   또한, WSL2 Ubuntu-22.04 가 Running 상태여야 합니다.

PS C:\Users\gildong> usbipd wsl attach --busid 5-2


   1. 의 과정에서 확인된 Xilinx USB device는 5-2 이므로, 위와 같이 적어줍니다.

   --busid 옵션은 -b 옵션으로 대치해도 됩니다.

   다음은, 실행 결과의 예입니다.

PS C:\Users\gildong> usbipd wsl attach -b 5-2
PS C:\Users\gildong> usbipd wsl list
BUSID  VID:PID    DEVICE                                            STATE
3-3    046e:5542  USB 입력 장치                                     Not attached
3-4    046d:c077  USB 입력 장치                                     Not attached
5-2    0403:6010  USB Serial Converter A, USB Serial Converter B    Attached - Ubuntu-22.04

   STATE 위치에, Attached - Ubuntu-22.04 로 보여집니다.


   Ubuntu 내에서 usb 장치를 확인할 때는, lsusb 명령을 사용합니다.

gildong@DESKTOP-F0TGKBV:~$ 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

gildong@DESKTOP-F0TGKBV:~$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 0403:6010 Future Technology Devices International, Ltd FT2232C/D/H Dual UART/FIFO IC
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

   첫번째 lsusb는 attach 전, 두번째 lsusb는 attach 후 결과입니다.

   VID:PID가 0403:0610 인 장치가 추가되었음을 볼 수 있습니다.


3. Windows 와 WSL Ubuntu 간 USB 장치 공유사용 및

      Windows Driver 선점 동작문제로 인한, usbipd fail 해결


   usbipd 는, 능동적 또는 지능적으로, USB 연결을 관리할 수 없습니다.

   즉, Windows 또는 Linux App의 usb device request 를 분석하여,

   자동 접속을 해줄 수 없습니다.


   또한, WSL 에 접속된 장치는, WSL 에서 detach 되지 않는 한,

   Windows 에서 사용할 수 없게 됩니다.


   그래서, Ubuntu linux 에서 사용할 때 usbipd로 attach 시키고,

   Windows 측에서 사용하려면, detach 해야 합니다.


   usbipd 로 attach/detach 하려면, 해당 USB device는 유휴상태여야합니다.

   동작중(busy) 상태에서는, 다음처럼 attach/detach 가 되지 않습니다.

PS C:\Users\gildong> usbipd wsl attach -b 5-2
usbip: error: Attach Request for 5-2 failed - Device busy (exported)


   Windows Xilinx Vivado 의 경우, upload, debugger 동작중이 아니면,

   USB 장치를 점유하지 않으므로, usbipd 로 attach/detach 는 잘 됩니다.

   또한, 일반적인 USB 장치들, 역시, 동작중이 아니면 USB 장치를 점유하지 않습니다.


   그런데, USB 장치중에는, 물리적인 연결시, Windows USB driver 와 App 에 의해

   선점되고, 계속 busy 상태를 유지하는 장치가 있습니다.

   이러한 busy 상태에서는, WSL 에 attach 할 수가 없습니다. 


   이 경우의 해결 방법은, 아래처럼 usbpid bind --force를 사용하는 것입니다.

PS C:\Users\gildong> usbipd bind --force -b 5-2
PS C:\Users\gildong> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                            STATE
3-3    046e:5542  USB 입력 장치                                     Not shared
4-3    090c:1000  USB 대용량 저장 장치                              shared
5-2    0403:6010  USB Serial Converter A, USB Serial Converter B    Shared (forced)

PS C:\Users\gildong> usbipd wsl attach -b 5-2

   위의 실행 예에서,

   맨위의 usbipd bind --force 명령으로, 5-2 장치를, WSL 로 예약하여

   Windows 측의 장치 선점을 막고, 실행되지 않게 합니다. 


   이러한 차이는, usbipd list 명령으로 확인 할 수 있습니다.

   위의 실행 예에서, 출력 message 의 우측 STATE 위치에 (forced) 가 있습니다.

   (usbipd wsl list는 접속현황만 보여줍니다.)


   이렇게 bind 방법을 바꿔준 후, attach 해 주면 됩니다.


4. Xilinx Vivado 에서 USB jtag 사용

   WSL에 Xilinx USB 가 attach 되면, hardware manager 에서 연결할 수 있습니다

vivado hardware manager, usb jtag auto connect

   hardware manager 를 실행하면, 상단에, Open Target 이 나옵니다.

   Open Target 을 클릭후, context menu의 Auto Connect를 클릭하면 연결됩니다.

   다른 방법으로, title menu 중 Tools 에서 Auto connect 로도 연결할 수 있습니다.


Xilinx vivado hardware manager, usb jtag connected 
   위 그림은, USB jtag으로 Xilinx device에 연결된 후의 예시입니다.



5. USB 장치 WSL 연결 끊기 및 bind --forced 원상복구

PS C:\Users\gildong> usbipd wsl detach -b 5-2

   위 코드는, WSL에 연결된 USBID 5-2 장치를 끊는(detach) 명령입니다.

   물론 관리자 계정에서 해야 합니다.


PS C:\Users\gildong> usbipd unbind -b 5-2

   위 코드는, bind --forced 된 장치를 해제합니다.


   usbipd 를 제거하려면, 윈도우 설정 -> 앱 -> 설치된 앱 에서

   usbipd-win 을 찾아서 제거하면 됩니다.

   (winget 으로 설치된 경우도 똑같습니다.)




* 참고사항

    Xilinx USB 장치가 사용중이 아니라면, 언제든 attach/detach 할 수 있습니다.


    WSL에 attach 된 USB 장치를, 물리적으로 제거하면, 다시 attach 해야 합니다.


    usbipd list와 usbipd wsl list 는 물리적으로 연결된 장치들만 보여줍니다.


    한번 이라도 attach된 device는, usbipd list 에서 shared 로 나옵니다.

    PC를 껏다 켜도, 그대로 남아 있습니다.


    usbipd bind --force 가 적용된 device는, PC를 껏다 켜도,

    shared ( forced ) 를 유지합니다.

댓글 쓰기

0 댓글