NVIDIA JETSON AGX Xavier- WSL2에서 설치하기

NVIDIA JETSON SDK는 현재 Ubuntu 20.04를 지원하지만 펌웨어  설치 한번을 위해서 Ubuntu를 설치하는 것 역시 상당히 번거로운 일이다. 그러기에 AGX Xavier의 Jetpack을 WSL2에서 설치하는 방법을 기록해둔다.


WSL2 설치하기

WSL 설치
wsl --install 명령을 사용하여 Linux용 Windows 하위 시스템을 설치합니다. Ubuntu, Debian, SUSE, Kali, Fedora, Pengwin, Alpine 등 원하는 Linux 배포판에서 실행되는 Windows 머신에서 Bash 터미널을 사용할 수 있습니다.

Windows 11(22H2) 기준으로, Windows Terminal에서 설치가 가능하다.

wsl --install
WSL2 설치 터미널

해당 명령줄을 입력하면, WSL2 관련 기능이 자동으로 켜지며 우분투가 설치된다.

WSL USB 패스스루 설치

USB 디바이스 연결
usbipd-win을 사용하여 USB 디바이스를 WSL 2 Linux 배포판에 연결하는 방법을 알아봅니다.

WSL2는 기본적으로 윈도우상에 연결된 USB 디바이스를 인식하지 못한다. 그러기에 추가적으로 프로그램을 설치하여 WSL로 연결할 수 있도록 해야한다.

Releases · dorssel/usbipd-win
Windows software for sharing locally connected USB devices to other machines, including Hyper-V guests and WSL 2. - dorssel/usbipd-win

usbipd-win 릴리즈 페이지에서 .msi 파일을 다운로드 받아 설치한다.

WSL와 Windows 사이에서 USBIP통신을 하기 위해서는 WSL에도 설치해야하는 패키지가 있다.

sudo apt install linux-tools-5.4.0-77-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20
기본 설치(20.04)
sudo apt install linux-tools-5.15.0-25-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.15.0-25-generic/usbip 20
22.04일 경우

이후 연결을 위해 AGX Xavier의 리커버리 모드에 진입한다.  강제 리커버리(2번째 버튼)을 누른 상태로 전원(1번째 버튼)을 누르고 동시에 떼서 진입한다.

AGX Xavier의 BUSID를 확인하고 설치하기 위해 AGX Xavier의 USB-C를 컴퓨터와 연결하고, 터미널에 해당 명령을 입력한다.

실패할 경우, 일반 직렬 장치로 표시된다. 이럴 경우, 전원 버튼을 길게 눌러서 AGX Xavier를 종료하면 된다.

성공할 경우, APX로 표시된다. 필자의 AGX XAVIER의 BUSID는 2-3이다.

usbipd wsl attach --busid <BUSID>

해당 명령어를 입력해 WSL에 USB 장치를 연결한다.

NVIDIA SDK MANAGER 설치

NVIDIA SDK Manager
Everything You Need to Set Up Your Development Environment NVIDIA SDK Manager provides an end-to-end development environment setup solution for NVIDIA’s DRIVE, Jetson, Holoscan, Rivermax, DOCA and Ethernet Switch SDKs for both host and target devices. .deb Ubuntu .rpm CentOS/RHEL Docker ImageUbuntu…

해당 링크에서 Ubuntu용 deb파일을 다운받는다.

SFTP를 이용해 옮기고, 설치한다.

sudo apt install sdkmanager_*

SDK Manager(GUI 기반 프로그램)를 실행하기 위해서는  X-Server가 필요한데, 필자는 MobaXterm을 사용하였다. SFTP, SSH, X-11이 전부 지원되는 강력한 프로그램이다.

MobaXterm free Xserver and tabbed SSH client for Windows
The ultimate toolbox for remote computing - includes X server, enhanced SSH client and much more!

MobaXterm으로 WSL에 접속한 후, sdkmanager를 실행하려고 하면 에러가 발생한다(The futex facility returned an unexpected error code.)

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0

X11 DISPLAY의 주소를 DISPLAY 환경 변수로 적용하면 된다.

이후 sdkmanager를 사용하기 위한 필수 패키지를 설치한다.

sudo apt install libxml2-utils libgtk-3-0
sudo apt install qemu-user-static binfmt-support
sudo dpkg-reconfigure qemu-user-static

자신의 우분투 버전이 22.04라면 /etc/os-release의 VERSION_ID를 변경한다.

#VERSION_ID="22.04"
VERSION_ID="20.04"

NVIDIA SDK MANAGER 실행

SDK Manager를 실행한다.

sdkmanager

SDK Manager에 로그인 한 후AGX Xavier가 연결되어 있다면 해당 창이 뜬다. AGX Xavier DevKit의 경우, 3번째를 선택해준다.

이후 CONTINUE를 누른다.

Target HW image folder에 필요한 파일들이 들어간다. 폴더를 지정하고 CONTINUE를 눌러 다운로드를 진행한다.

이후 USB가 끊기며 설치에 실패한다.

Target HW image folder로 지정해둔 폴더에 들어간후, JetPack_5.0.2_Linux_JETSON_AGX_XAVIER_TARGETS/Linux_for_Tegra에 들어간다.

sudo ./apply_binaries.sh

해당 명령을 입력해 설치준비를 한다.

flash.sh에서 get_fuse_level() 함수를 찾아, 맨 앞에 sleep 5;를 추가해준다. 이 함수에 들어가기 직전에 USB 연결이 끊기는데, 이로 인해 설치가 실패한다. sleep 함수를 이용해 잠깐 동안 USB를 연결할 시간을 벌 수 있다.

sudo ./nvsdkmanager_flash.sh

설치를 시작한다.

usbipd wsl attach --busid <BUSID>

해당 명령어를 실행해 설치를 시작하던 도중, USB가 끊기면 usbipd 명령어를 이용해 다시 연결해준다.

약 20분정도 있으면 eMMC에 Jetson Linux가 설치된다.

참조

WSL2からJetPack5.0.1DPをセットアップ - Qiita
1. はじめに 普通であればSDKmanagerをUbuntu18.04機に展開して実行するのですが、魔が差したのか環境が無かったのでWSL2からやってみたらどうなると試してみました。 -先に結論を述べると 普通の手順(Ubun...