总所周知,使用emmc作为内部存储的jetson设备,烧录系统是需要Linux设备作为主机(Host)的,这意味着你要么需要一台Linux主机、要么需要在Windows系统上安装虚拟机。
但是都2022年了,作为最强虚拟机的WSL应当成为主流,因此介绍如下方法:
- 一个jetson设备,我使用的是jetson TX2 NX,比NANO稍贵,但是整体性能比NANO强很多,性价比不错,搭配了微雪扩展板
- WSL强烈建议使用Windows 11的电脑,Windows 11的WSL兼容性比10要好很多。而Windows 10很可能会因为缺少 Linux GUI 等而出错
- 确保已安装WSL 2,且对应的Ubuntu要和你的jetson匹配!!!
这一点十分重要,是新手最容易犯的错误,要仔细看厂商提供的烧录资料,例如我的Jetson TX2 NX就只能用18.04才能烧录,WSL Ubuntu版本高了(20.04、22.04)就是不行,没办法向下兼容,
英伟达,fxxk you,我之前就在这里绕了弯路,大家一定要注意看你需要的烧录系统版本:
如果不匹配,就去Microsoft store重下一个,里面各种版本都有,安装也还是很快的。
下载并安装 SDK manager
准备工作
更新很重要,有的时候一些奇奇怪怪的报错,很可能是由于没更新系统导致的...
先更新WSL内核,进入Windows PowerShell,运行:
wsl --update
再更新ubuntu,进入WSL的Ubuntu系统,运行:
sudo apt update
sudo apt list --upgradable
sudo apt upgrade
更新ubuntu的时候,别闲着:
在Windows上到英伟达官网下载.deb安装包NVIDIA SDK manager ,注册账号下载即可。
在WSL中切换到下载目录
cd /mnt/c/Users/PeepYXB/Downloads
注意要把其中的PeepYXB
替换成你自己的系统用户名
安装sdkmanager
sudo apt install ./sdkmanager_1.9.0-10816_amd64.deb
同样要把1.9.0-10816
替换成你自己下载的SDK manager安装包版本
运行sdkmanager
运行
sdkmanager
这时大概率会报错,提示缺失关键文件,无法运行,解决办法就是google,缺什么就装什么:
例如,我遇到的问题提示
/opt/nvidia/sdkmanager/sdkmanager-gui: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory
查到是解决办法是执行如下指令:
sudo apt install libgconf-2-4 libatk1.0-0 libatk-bridge2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm-dev libnss3-dev libxss-dev
再次运行sdkmanager
,成功:
需要注意的是:WSL的登录过程和传统Linux Host略有不同 —— 如果你没有安装WSL版浏览器的话,是不会自动跳出网站的。
这个时候要点这个二维码标志,然后选择copy login URL
再手动把链接粘贴到电脑的浏览器,实现登录。
运行 usbipd-win
这时,你会发现SDK manager找不到你的设备:
这是因为默认情况下,WSL 2没有办法直接识别插在Windows计算机上的USB设备,说白了就是:你点的外卖被门口保安给截胡了
这个时候就需要用到开源工具usbipd-win来构建桥梁,参考微软官方教程:(连接 USB 设备 | Microsoft Learn)以及视频教程WSL 2: Connect USB devices - YouTube进行如下操作:
确定在Windows系统下可以找到jetson设备
将jetson的FC rec与GND短接,进入恢复模式,连接圆口直流电源后再与计算机通过USB连接,打开计算机的设备管理器,监视被识别到的设备,然后记住设备名。
例如我这里,APX是在连接电脑后识别到的,也就是“APX”是我的jetson TX2 NX在Windows下的设备名称,只需要将其导入到WSL即可:
安装并使用usbipd-win工具
下面开始下载并安装usbipd-win
Releases · dorssel/usbipd-win (github.com)下载并安装其中的.msi文件
在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
不要关闭WSL窗口,然后用管理员权限运行Windows PowerShell,运行指令:
usbipd wsl list
如图Not attached
代表未同步给WSL,我需要将APX同步到WSL,该设备在我的电脑上的BUSID是3-2
,遂运行指令:
usbipd wsl attach --busid 3-2 --auto-attach
注意,结尾的这个--auto-attach
是一定要加的,因为在烧录过程中,jetson会反复重启,如果没有自动重连,就会导致烧录失败。
验证jetson已被WSL识别
在Windows PowerShell,运行usbipd wsl list
:
可以看到,APX的设备状态已经变成了Attached - Ubuntu
在WSL,运行lsusb
:
此时运行SDK manager,可正确识别我的Jetson TX2 NX
开始烧录
保持Windows PowerShell窗口开启,操作NVIDIA sdkmanager进行烧录,
烧录过程和虚拟机下没有任何区别:
下载固件:我的Windows电脑端后台开启了代理,所以整体的下载速度还算可观...
刷写固件,这个过程如果出现问题,例如“与设备断开”、“设备未在恢复模式”、“无法识别设备主板”等问题,就回头看一下,是不是在Windows PowerShell里的usbipd命令结尾没有加--auto-attach
烧录完成
此时Windows会自动识别并弹出L4T
的设备,代表jetson已经完全可用,且能被电脑识别,记得拔去rec短接线。