使用SDK Manager对Jetson Xavier NX(eMMC)刷机的过程
前言
本文介绍如何使用SDK Manager对NVIDIA Xavier NX(eMMC)刷机。
使用SDK Manager刷机,要先在一个带有Linux系统的主机上安装该工具包,然后使用数据线连接NX设备,之后烧录Jetson Linux(NX的操作系统)和Jetson SDK Components(CUDA、Computer Vision等组件)。SDK Manager是一个工具包,相关信息参考官网NVIDIA SDK Manager Documentation,在NVIDIA SDK Manager->System Requirements
条目中查看运行它的软硬件要求,在Download and Install->Download and Run SDK Manager
条目中查看它的下载方式和运行它的首次配置,在Download and Install->Install Jetson Software with SDK Manager
条目中查看刷机步骤。
本文分为以下几个部分:
(1)刷机前的准备
(2)安装Ubuntu虚拟机
(3)安装SDK Manager
(4)烧录系统
(5)设置SSD启动项
(6)烧录SDK组件
1.刷机前的准备
软硬件:虚拟机VMware Workstation 16 Pro,版本16.1.1。两根杜邦线、原装数据线、键盘、鼠标、显示器。
版本对应:使用Pytorch框架运行深度学习模型,要找好NX、JetPack、CUDA、cuDNN、Pytorch、torchvision、Python之间的版本对应关系,有一对关系不匹配就可能导致模型无法运行,所以要先确定好各自的版本。不同的Jetson设备支持不同的JetPack、同一NX可支持不同的JetPack、不同的JetPack包含不同的CUDA、cuDNN,不同的CUDA、cuDNN支持不同的Pytorch版本、不同的Pytorch版本支持不同的torchvision和Python。Jetson设备和JetPack的版本对应关系可在JetPack Archive | NVIDIA Developer中查看,JetPack和CUDA、cuDNN的版本对应关系可在JetPack Archive | NVIDIA Developer中点击相关JetPack版本查看,JetPack、Python、Pytorch的版本对应关系可在Jetson Zoo - eLinux.org、PyTorch for Jetson - Jetson & Embedded Systems / Jetson Nano - NVIDIA Developer Forums中查看,Python、Pytorch、torchvision的版本对应关系可在pytorch/vision: Datasets, Transforms and Models specific to Computer Vision (github.com)中查看。
2.安装Ubuntu虚拟机
(1)下载Ubuntu系统
本次刷机主机使用ubuntu-20.04.5-desktop-amd64.iso
。
(2)创建虚拟机
打开VMware,点击文件>新建虚拟机
,按下列图选择。
点击下一步,选择自定义硬件,选择‘新CD/DVD(SATA)’,右侧‘连接’选择‘使用ISO映像文件’,选择下载的Ubuntu.iso文件。
(3)配置Ubuntu
创建完虚拟机后启动它,然后按下图配置。
(4)安装VMware Tools
如果发现Ubuntu桌面只在VMware中间显示,那就要安装VMware Tools。点击虚拟机->安装VMware Tools(T)
。
然后会在Ubuntu桌面左边看到一个光盘DVD的图标,鼠标放到上面显示VMware Tools。
点击光盘,或者打开文件,也会显示VMware Tools。
在Terminal中执行命令tar -xzvf <VMware Tools***.tar.gz>
。
解压之后使用ls
命令可以看到vmware-install.pl
文件。
执行命令sudo ./vmware-install.pl
安装,reboot
重启。
(5)Ubuntu系统换apt源
通过图形界面换源,在设置中找到Software & Updates
,按下图选择,在里面选择清华源或者其他国内源。
(6)遇到的问题
如果出现System program problem detected
问题,则在Terminal中输入sudo gedit /etc/default/apport
,把里面的enabled=1
改为0。
3.安装SDK Manager
打开Ubuntu,在NVIDIA SDK Manager | NVIDIA Developer下载.deb
。
下载完成Ctrl+T
打开Terminal,执行命令sudo apt install ./sdkmanager_[version]-[build#]_amd64.deb
安装SDK Manager。
4.烧录系统
(1)启动SDK Manager
在Terminal中执行sdkmanager
,首次使用要使用NVIDIA的账号登录,也可以扫描二维码登录。
(2)连接NX和电脑
用杜邦线短接GND和FC REC使NX进入恢复模式,再使用自带的USB线连接NX和电脑,然后给NX连上鼠标、键盘、显示器,最后插上电源。
(3)STEPS
连上数据线之后,选择USB接入虚拟机,在Terminal中执行lsusb
命令,如果出现‘NVIDIA Corp. APX’,则表示NX连接上了虚拟机。连上数据线之后会自动跳出来设备选项,如果没有就在SDK Manager STEP 01Target Hardware
选择设备。Host Machine
不要选(选了表示在主机上安装),在TARGET OPERATING SYSTEM
选择Linux JetPack版本,然后continue
。
在STEP 02,选择Jetson Linux
,下面的Jetson SDK Components
之后安装。因为此时是安装在emmc中,emmc的容量不够。先烧录系统,把系统设置成SSD启动之后再安装Jetson SDK Components。可以点击CUDA
等查看版本信息。
在STEP 03,进行烧录。等到烧录过程完成差不多一半时,出现下图,1.选项选择Manual Setup - Jetson Xavier NX[developer kit version]
,8.选项设置NX中系统的用户名和密码,然后点击Flash
继续烧录,这时NX的显示器会出现相关界面,在NX上设置就可以了。等走到STEP 04时操作系统就烧录完成了。
(4)NX中Ubuntu系统换apt源
可按照虚拟机中Ubuntu的换源方式,也可以按下面方式。
备份源:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bat
编辑新源文件:sudo gedit /etc/apt/sources.list
注释新源文件原来的内容,在ubuntu-ports | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror中找到适合Ubuntu 20.04LTS的源,复制到新源文件。
执行sudo apt-get update
、sudo apt-get upgrade
更新。
5.设置SSD启动项
(1)格式化SSD
烧录完成后,拔掉杜邦线和USB线,在NX上格式化安装的SSD。打开菜单,找到Disk。
启动磁盘应用程序,可以看到SSD,点击右上角三条杠选择Format Disk
,进行格式化。
点击Format
,选择EXT4格式。
格式化完成之后全部变成了Free Space。
选择主分区大小,Free Space Following
选择16GB。
起个名字给卷,create
。
完成之后如下图。
(2)把系统文件从emmc复制到SSD
克隆GitHub项目,依次执行命令
git clone https://github.com/jetsonhacks/rootOnNVMe.git
cd rootOnNVMe
./copy-rootfs-ssd.sh
(3)设置从SSD启动
./setup-service.sh
,重启,执行df -h
,看到SSD设备使用率大于零。
6.烧录SDK组件
(1)安装CUDA、cuDNN
烧录SDK时不用插杜邦线,运行SDK Manager,在SETP02中只选择第二项Jetson SDK Components
,其余不变,继续安装,等到安装完毕。安装时失败了,更换了NX的软件源就安装成功了。
(2)配置CUDA、cuDNN
依次执行以下命令:
sudo ln -sf /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudnn_cnn_infer.so.8.4.1 /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudnn_cnn_infer.so.8
sudo ln -sf /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudnn_cnn_train.so.8.4.1 /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudnn_cnn_train.so.8
sudo ln -sf /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudnn_ops_infer.so.8.4.1 /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudnn_ops_infer.so.8
sudo ln -sf /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudnn_ops_train.so.8.4.1 /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudnn_ops_train.so.8
sudo ln -sf /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudnn_adv_infer.so.8.4.1 /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudnn_adv_infer.so.8
sudo ln -sf /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudnn_adv_train.so.8.4.1 /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudnn_adv_train.so.8
sudo ln -sf /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudnn.so.8.4.1 /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudnn.so.8
如果出现以下问题,执行上面命令。
/sbin/ldconfig.real: /usr/local/cuda/targets/aarch64-linux/lib/libcudnn_cnn_infe r.so.8 is not a symbolic link
/sbin/ldconfig.real: /usr/local/cuda/targets/aarch64-linux/lib/libcudnn_cnn_trai n.so.8 is not a symbolic link
/sbin/ldconfig.real: /usr/local/cuda/targets/aarch64-linux/lib/libcudnn_ops_infe r.so.8 is not a symbolic link
/sbin/ldconfig.real: /usr/local/cuda/targets/aarch64-linux/lib/libcudnn_ops_trai n.so.8 is not a symbolic link
/sbin/ldconfig.real: /usr/local/cuda/targets/aarch64-linux/lib/libcudnn_adv_infe r.so.8 is not a symbolic link
/sbin/ldconfig.real: /usr/local/cuda/targets/aarch64-linux/lib/libcudnn_adv_trai n.so.8 is not a symbolic link
/sbin/ldconfig.real: /usr/local/cuda/targets/aarch64-linux/lib/libcudnn.so.8 is not a symbolic link