Physical Address:
ChongQing,China.
WebSite:


最近开始接触NVIDIA Orin系列的芯片,团队买了一块NVIDIA Jetson AGX Orin 64GB的开发板。我基于这块儿板子来搭建基础的开发环境,以便后续让其他开发同事进行模型部署等开发。
开发板本身是预装了Ubuntu 20,Jetpack SDK版本为5.1,而最新的Jetpack已经到了7.0,Jetson官方提供的很多开发示例与Docker镜像都依赖于Jetpack 6.1+,所以我第一件事情就是要更新Jetpack SDK为6.0之后的版本。
Jetpack 6.0+对应的系统版本为Ubuntu 22,无法从Ubuntu 20直接通过apt的方式进行升级,唯一的办法只能通过刷机的办法进行升级。
官方介绍可以通过sdkmanager进行刷写,于是我开始研究如何通过sdkmanager进行刷机。同时由于公司电脑不让使用VMWare等虚拟机,只有WSL环境,所以我需要在WSL环境下通过sdkmanager来进行刷机。
这应该是全网第一篇也是目前唯一一篇介绍如何在WSL环境下对NVIDIA Jetson AGX Orin进行刷机的教程了,希望对大家会有帮助。
整个刷写过程其实只需要准备好Jetson AGX Orin的电源线以及连接Jetson AGX Orin设备和PC电脑的USB线束就可以了。
1.找到40PIN附近的type-c类型的USB口,正常工作模式下其作为USB转Uart的调试口,Recovery模式下作为刷写口。

2.连接电源,电源口在RJ45网口旁,分为针孔类型与type-c类型的电源口

以上就连接好啦。
配置WSL环境,这里我们推荐用WSL2而非WSL1,Linux发行版为Ubuntu-22.04。具体配置过程可以参考我的另一篇博客。
当我们安装好WSL Ubuntu环境后,我们对WSL Ubuntu进行一些基础配置,如下所示:
sudo apt update && sudo apt install wslu -y
sudo apt install iputils-ping iproute2 netcat iptables dnsutils network-manager usbutils net-tools python3-yaml dosfstools libgetopt-complete-perl openssh-client binutils xxd cpio udev dmidecode -y
sudo apt install linux-tools-virtual hwdata
为了能让WSL环境下的Ubuntu可以访问到Windows宿主机下的USB设备,从而进行烧写,我们需要在Windows侧安装USBIPD,可以在Powershell中执行如下命令:
winget install --interactive --exact dorssel.usbipd-win
安装完USBIPD后,我们接下来要在WSL Ubuntu内安装sdkmananger,sdkmamager是NVIDIA官方推出的工具,可以端到端地帮助开发者设置Host Device与Target Device设备,以便加速开发。更多信息可以参考官方文档链接。
这里我们采用Network Repo的方式进行安装:
wget https://developer.download.nvidia.com/compute/cuda/repos/[distro]/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install sdkmanager
安装完成后我们可以通过sdkmanager命令行的形式进行交互。
现在我们开始进行软件刷写。
先对AGX Orin设备进行上电,并使其进入刷写模式,有两种办法让其进入刷写模式:
1.Orin处于未开机状态,此时长按住②键,再上电,白色指示灯亮起后即可
2.Orin处于开机状态,先长按②键,然后按下③键(Reset键);之后先松开③键,再松开②键

确认Windows Host可以访问到AGX硬件,这里我们在Powershell下通过usbipd进行查看:
usbipd.exe list

这里我们看到的0955:7023就是我们的AGX设备,接下来我们需要把USB设备暴露给WSL Ubuntu环境:
//usbipd.exe bind --busid <BUSID> --force,BUSID请依据实际情况进行选择
usbipd.exe bind --busid 1-8 --force
//usbipd.exe attach --wsl --busid=<BUSID> --auto-attach,BUSID请依据实际情况进行选择
usbipd.exe attach --wsl --busid 1-8 --auto-attach

接着我们打开WSL Ubuntu系统,查看是否有挂载USB设备:

这里显示挂载成功,可以进行刷写操作了。
由于我使用的是WSL Ubuntu,默认无桌面环境,这里我们通过cli模式进行刷写:
sdkmanager --cli

首先要选择登录类型,这里我们选择第一个就行。之后就是Host device(默认即可)、Target device(请根据设备类型进行选择)的选择,如下所示:


耐心等待刷写成功即可。这个过程期间会下载Host device与Target device相匹配的一些软件,对网络有一定要求。
Jetpack SDK严格来说分为三部分,Jetson Linux、Jetson AI SDK以及Jetson Platform Service,Jetson Linux包含BSP、Bootloader、驱动、Ubuntu桌面环境以及NVIDIA工具链等,我们上一个步骤更新的即是Jetson Linux的内容,这一部分是需要进行软件刷写的,这期间我们的开发板处于Recovery模式。
当我们更新完Jetson Linux,接下来就是更新Jetson AI SDK以及Jetson Platform Service,这部分更新也是通过sdkmanager完成,不过更新这部分软件时我们的开发板属于正常工作状态而非Recovery模式。
更新SDK时可以选择USB方式更新和Ethernet方式更新,这里推荐采用Ethernet方式更新,因为USB线缆接入后我的电脑貌似没法与其组成局域网。通过以太网方式更新,我可以让AGX Orin开发板连接至我电脑的热点,并获取到其对应的IP地址。
