nvidia TX2 使用 SDK Manager工具刷机记录

本文为使用 nvidia 提供的 SDK Manager(本文称 sdkmanager) 工具下载、烧写 TX2 的记录。本文根据笔者长时间的摸索经历,以有限的经验对刷机过程及要点进行描述,不涉及 TX2 特性或功能或深度学习方面内容。

一、要点

一些基础要点或要注意的事在此节说明。

  • TX2只支持HDMI接口,只有一个 usb 接口(要用 usbhub扩展)。使用 nvidia 原装 usb 线连接烧写。
  • TX2有四个红色并排的按钮,开机按钮标注有POWER BTN,由其向左分别是Force Recovery Button、User Defined Button和Reset Button。在手动刷机情况下,要分别操作 Force Recovery Button 和 POWER BTN。见后文。
  • sdkmanager 目前只有 Linux 版本,支持 ubuntu16.04 和 ubuntu18.04。使用大屏幕、大内存的好的机器,最好是物理机安装 ubuntu。如是虚拟机,连 usb 线时需要让虚拟机识别到 TX2。
  • sdkmanager 集下载(系统镜像,软件包)、烧写(系统镜像,软件包)、卸载(软件包)、修复(软件包)功能。
  • sdkmanager 下载需要使用 nvidia 开发者账号,(免费)注册即可。
  • sdkmanager 有 HOST 端和 TARGET 端之分,可按需下载烧写。如只烧写系统镜像或只安装软件。
  • 烧写 Linux 镜像后,需要在板子上做一些设置,如设置账号密码,连接WiFi等,进入系统后,有一网络设备默认IP为 192.168.55.1,该IP在 sdkmanager 中被使用。。

二、过程

2.1 环境准备

sdkmanager 目前只有 Linux 版本。可用 ubuntu16.04 和 ubuntu18.04 发行版。内存最低为8GB,屏幕分辨率 1440x900 以上。内存过小会卡,分辨率过低则界面显示不完整,经测试,在 ubuntu16.04 系统中运行时可点击”View”->”Zoom Out”缩小界面。
需要联网,因为要从 nvidia 官网下载软件包。
如果要烧写,则需要使用原装 usb 线连接板子和PC。

2.2 注册账号

下载软件需要注册,地址:https://developer.nvidia.com/login
注:登录时需要输入账号密码,并点击符合要求的图案(如飞机,车之类的),以证明登录者是人类。

2.3 安装运行 sdkmanager

之前使用 jetpack 工具下载烧写的,目前是使用 sdkmanager,下载地址为:https://developer.nvidia.com/embedded/jetpack 。安装方式有两种,一是用 SD 卡镜像,二是使用 sdkmanager,即NVIDIA SDK Manager method,TX2 使用方法二。
本文使用的文件为sdkmanager_1.4.0-7363_amd64.deb,md5为535b9b2b41248e89b839b6f5a3acb185。安装命令如下:

1
$ sudo apt install ./sdkmanager_1.4.0-7363_amd64.deb 

sdkmanager 必须使用普通用户运行:

1
$ sdkmanager

稍等片刻即可看到启动界面。如系统系统不满足最低要求会弹出提示框,如图1所示。
图1
点击Yes进入登录界面。如图2所示。
图2
第三个页面为离线包方式,适用已下载软件包情况,不用登录。第一页面为即本文所用的方式。点击Login,在自动打开的浏览器中输入账号,再输入密码,点击图案验证。建议保存密码减少操作。图3为已经验证即将登录的界面。
图3

登录过程中,可能会遇到一些问题,如下:
1、提示no SDKs available for your account,网上有说法执行sudo updatedb可解决,笔者验证未成功。
2、提示Failed to get client token,重试多次未能解决,未知原因。
3、卡在Loading and processing available products...,重试多次可解决。

2.4 下载软件

成功登录后进入第一步骤配置,如图4所示。
图4
主要有四项内容,第一为产品目录,即 Jetson,第二为硬件配置,分为主机端和目标板端,本文不使用主机端配置(目前没有需要在主机做开发),由于笔者连接了板子,故图4中已检测到 TX2。也可以手动点击右下角的...选择实际板子型号。第三为系统版本,目前为 4.5 版本。最后是 deepstream,版本为5.0,为可选项,笔者不想在后续单独安装,因此也选上了。

点击“CONTINUE”进入第二步骤。如图5所示。
图5
软件包括了系统镜像和SDK两大类软件,默认全选,也可分别安装。页面底部有默认下载和安装目录,也可手动指定,默认目录不存在,会提示创建目录。勾选接受协议。如果只希望下载软件,则勾选Download now, Install later.。笔者建议勾选。因为下载十分耗时,且容易出错。
点击“CONTINUE”进入第三步骤。图6为即将下载的界面。
图6

此时可在 TERMINAL 中查看日志,如图7所示。也可查看~/.nvsdkm/sdkm.log文件(~/.nvsdkm是 sdkmanager 日志所在目录)。
图7

经过十分漫长的等待,完成下载,如图8所示。点击 FINISH 退出。如果下载、安装一并进行,下载完成后进入安装步骤,FINISH 表示最终的完成
图8

注:
1、下载十分耗时,而且容易出错,所以板子不用开机,也不用连接PC。
2、sdkmanager 下载速度与网络有关。
3、关于下载失败的终极解决方法:重试,多重试,多次重试,换台电脑试,换个网络再试,隔一段时间重试。
4、笔者经过多次尝试,在 sdkmanager 中均无法完整下载,后想到一种笨方法。当 sdkmanager 下载失败时,在默认的下载目录 /home/latelee/Downloads/nvidia/sdkm_downloads
中查看下载的软件包(有deb包、zip包等,未下载完成的以mtd结尾),再在 sdkmanager 日志中查看软件包的下载地址,一一列出。然后在 Windows 的浏览器中登录 nvidia官网,再粘贴下载地址下载(运行了某种工具以保证官方网站连接畅通)。共63个文件,大的有1.8GB,小的有数十KB。

另外,在不同时候下载,个别软件包的版本不同,如

1
2
3
4
5
NsightSystems-linux-public-2020.5.3.17-0256620.deb
NsightSystems-linux-public-2020.4.2.18-f0b18f6.deb

nvidia-l4t-jetson-multimedia-api_32.4.4-20201016123640_arm64.deb
nvidia-l4t-jetson-multimedia-api_32.5.0-20210115151051_arm64.deb

从软件包日期也可看到笔者进行较长时间的尝试。

如有兴趣,可到附3:提示及日志部分下载失败日志处查看失败日志。

2.5 安装软件

这里的“软件”包括了系统(和驱动)以及 sdk 软件。对于系统而言,实际应该是“烧写”而不是安装。
系统镜像(OS镜像)和sdk可分开安装,如果在安装sdk出错,下次重试时,可取消系统的安装,节省时间。本文完全刷机,所以两者均安装。
烧写镜像前, sdkmanager 会创建OS镜像,默认位于~/nvidia/nvidia_sdk目录,如图9所示,第一进度条表示正在创建 Jetson OS 镜像。
图9
在此过程,也可点击 TERMINAL 查看日志,如图10所示。
图10
注意,从图10可看到下载目录为非默认目录,该目录就是笔者手动下载并拷贝到 Linux 虚拟机中的目录。
当 OS 镜像准备完毕后,出现烧写提示。方式有二,图11所示为自动方式,TX2 板子要开机,并且联网,输入 TX2 正在使用的账号密码,注意,IP地址不需要修改。
图11
当系统损坏无法启动时,可选择手动模式,如图12所示。
图12
本文选择自动方式(实际也尝试了手动方式),烧写过程比较耗时。如果超过时间,sdkmanager 会提示,如图13所示。
图13
烧写结束之后 TX2 会关机。如果使用虚拟机,此过程要保持鼠标在虚拟机内,以保证 TX2 总能被虚拟机识别。
TX2 重新启动后板子显示器出现系统配置界面,第一个界面为接受协议,如图14所示。
图14

后续界面依次为:选择语言,选择键盘,连接WiFi(笔者手上没有多余网线,只能用WiFi),选择时区,账号密码(可选自动登录),Nvpmodel模式,除WiFi和账号密码要输入信息外,其它用默认即可。等待片刻自动重启,之后进入系统,此时已经有了基本可用的系统(当然还用不了cuda)。

此时可在 TX2 系统中查看板子IP,网络设备 l4tbr0 的 IP 为 192.168.55.1,对应的,PC端网络设备 ens35u1i5 IP 为 192.168.55.100。两系统可互相 ping 通。

系统镜像烧写成功后,sdkmanager 进入安装 sdk 阶段(sdk 可单独安装,过程相同)。如图15所示。
图15

输入刚才设置的账号和密码。图16为正在安装sdk包界面。
图16

再经过一段时间等待,安装成功,如图17所示,点击 FINISH 完成任务。
图17

TX2 系统默认桌面如图18所示。
图18

注:
本节步骤不一定反映实际情况,因为会经常中断。
烧写系统镜像过程如果断开,会从头开始,如果已经进行一半,此时系统可能会损坏,如是则要用手动模式。
耗时:在下载好软件包情况下,晚8点开始,至12点前结束,期间中断了3次。

2.6 验证程序

前面刷机已经勾选了 DeepStream,可直接使用。进入 TX2 系统,查看 DeepStream 版本信息:

1
2
3
4
5
6
7
8
9
$ deepstream-app --version-all
2021-02-04 23:51:41.044864: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.2
deepstream-app version 5.0.0
DeepStreamSDK 5.0.0
CUDA Driver Version: 10.2
CUDA Runtime Version: 10.2
TensorRT Version: 7.1
cuDNN Version: 8.0
libNVWarp360 Version: 2.0.1d3

可用如下命令查看和nvidia有关的插件:

1
gst-inspect-1.0 -a | grep -i nvidia

编译、运行自带的示例工程:

1
2
3
cd /opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-test1
make
./deepstream-test1-app /opt/nvidia/deepstream/deepstream/samples/streams/sample_720p.h264

输出日志:

1
2
3
4
5
6
Now playing: /opt/nvidia/deepstream/deepstream/samples/streams/sample_720p.h264

Using winsys: x11
Opening in BLOCKING MODE
Opening in BLOCKING MODE
...

效果如图19所示。
图19

三、参考资源

sdkmanager官方使用说明: https://docs.nvidia.com/sdk-manager/install-with-sdkm-jetson/index.html
sdkmanager配置:https://docs.nvidia.com/sdk-manager/sdkm-settings/index.html
NVIDIA Jetson TX2 上手指南:https://blog.csdn.net/qq_36782182/article/details/91488284

附1:尝试

本节记录个人的尝试,流行话叫“踩坑”。
无物理机,故使用虚拟机,但内存不够大,屏幕不够大(本本是7、8年前买的),分辨率和内存满足不了 sdkmanager 最低要求。
先安装使用ubuntu18.04,但 sdkmanager 无法缩小,操作不便,找不到同意协议选项,无法执行。
改用之前在 VirtualBox 上安装的 lubuntu1604,其资源占用稍少,但亦无缩小,多次重启,提示The virtual machine 'lubuntu1604' has terminated unexpectedly during startup with exit code 1,所有 VirtualBox 虚拟机系统损坏无法使用。
最后用 ubuntu16.04,点击标题View中进行缩小。可顺利进行。

附2:成果

1、刷机过程生成的日志已存放 github 备份。
2、下载的软件包只在 TX2 测试通过,约6GB,已整合为 docker 镜像,并上传至阿里云仓库备份。

1
2
docker build -t registry.cn-hangzhou.aliyuncs.com/latelee/deepstream:tx2 .
docker push registry.cn-hangzhou.aliyuncs.com/latelee/deepstream:tx2

镜像说明:包括 TAEGET 端所有的包以及部分 HOST 端的包。运行后在容器的 /nvidia 目录。

1
2
3
docker run -itd --name foobar registry.cn-hangzhou.aliyuncs.com/latelee/deepstream:tx2 sh
docker exec -it foobar sh
ls /nvidia

逐一拷贝:

1
2
3
4
mkdir my_download
docker cp foobar:/nvidia/Tegra_Linux_Sample-Root-Filesystem_R32.5.0_aarch64.tbz2 my_download
docker cp foobar:/nvidia/cuda-repo-l4t-10-2-local-10.2.89_1.0-1_arm64.deb my_download
其它文件类似

Dockerfile:

1
2
3
4
5
FROM latelee/busybox 
RUN mkdir /nvidia
COPY cuda-repo-cross-aarch64-10-2-local-10.2.89_1.0-1_all.deb /nvidia
COPY cuda-repo-l4t-10-2-local-10.2.89_1.0-1_arm64.deb /nvidia
其它文件类似

附3:提示及日志

启动显示系统最低要求:

1
2
3
4
5
6
Warning
Could not detect SDK Manager's minimal system requirement(s):
- Minimum of 7.5GB of RAM (4.74GB detected)
- Screen resolution equal or larger than 1440x900 (800x600 detected)

Do you wish to continue?

部分下载失败日志:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
未授权的(一般是之前已经登录,但过期了)
01:49:33 : CUDA on Host: download https://developer.nvidia.com/assets/embedded/secure/tools/files/jetpack-sdks/jetpack-4.4.1/JETPACK_441_b50/ubuntu1604/cuda-repo-ubuntu1604-10-2-local-10.2.89-440.40_1.0-1_amd64.deb failed, retrying 1...
01:49:33 INFO: CUDA on Host: start to download https://developer.nvidia.com/assets/embedded/secure/tools/files/jetpack-sdks/jetpack-4.4.1/JETPACK_441_b50/ubuntu1604/cuda-repo-ubuntu1604-10-2-local-10.2.89-440.40_1.0-1_amd64.deb to /home/ubuntu/Downloads/nvidia/sdkm_downloads/cuda-repo-ubuntu1604-10-2-local-10.2.89-440.40_1.0-1_amd64.deb
01:49:36 ERROR: CUDA on Host: DevZone get download url failed: HTTPError: Response code 401 (Unauthorized).
01:49:36 ERROR: CUDA on Host: Download 'CUDA on Host' failure
01:49:36 ERROR: CUDA on Host: DevZone get download url failed: HTTPError: Response code 401 (Unauthorized).
01:49:36 ERROR: CUDA on Host: Download 'CUDA on Host' failure
01:49:36 ERROR: CUDA on Host: download failed

网络断开的
22:02:21 : CUDA on Host: download https://developer.nvidia.com/assets/embedded/secure/tools/files/jetpack-sdks/jetpack-4.4.1/JETPACK_441_b50/ubuntu1604/cuda-repo-ubuntu1604-10-2-local-10.2.89-440.40_1.0-1_amd64.deb failed, retrying 1...
22:02:21 INFO: CUDA on Host: start to download https://developer.nvidia.com/assets/embedded/secure/tools/files/jetpack-sdks/jetpack-4.4.1/JETPACK_441_b50/ubuntu1604/cuda-repo-ubuntu1604-10-2-local-10.2.89-440.40_1.0-1_amd64.deb to /home/ubuntu/Downloads/nvidia/sdkm_downloads/cuda-repo-ubuntu1604-10-2-local-10.2.89-440.40_1.0-1_amd64.deb
22:02:37 ERROR: CUDA on Host: DevZone get download url failed: RequestError: Client network socket disconnected before secure TLS connection was established.
22:02:37 ERROR: CUDA on Host: Download 'CUDA on Host' failure
22:02:37 ERROR: CUDA on Host: DevZone get download url failed: RequestError: Client network socket disconnected before secure TLS connection was established.
22:02:37 ERROR: CUDA on Host: Download 'CUDA on Host' failure
22:02:37 ERROR: CUDA on Host: download failed

网络有问题的
22:42:24 INFO: DeepStream: start to download https://developer.nvidia.com/assets/embedded/secure/tools/files/jetpack-sdks/jetpack-4.4.1/JETPACK_441_b50_DEEPSTREAM/deepstream-5.0_5.0.1-1_arm64.deb to /home/ubuntu/Downloads/nvidia/sdkm_downloads/deepstream-5.0_5.0.1-1_arm64.deb
22:43:31 ERROR: DeepStream: Head request failed on host: ECONNRESET. Error: socket hang uphttps://developer.download.nvidia.com/assets/embedded/secure/tools/files/jetpack-sdks/jetpack-4.4.1/JETPACK_441_b50_DEEPSTREAM/deepstream-5.0_5.0.1-1_arm64.deb?IQOvXtJ6q2h7wEVW_SUReWVsdQk8i0duzlCSFmayyqE8duPuyZPhND_O1S6yd6hoXuobjaYpB8MKsg-8fadWWALJQBs8m_SAwYpFD9-XvCrw1tt1CCtlt7547_3c0P3GoXqi85jW_LogPq06flT9gCxtYNxjhENTzdQA80uZeV3ZEKh4PUJO9Gvtl1aqWzBugJ1W1T6PwrLIM-GWXQQR3p3idZlx-OltlatQEFGv2cyhXv-Ty2l8dg
22:43:31 ERROR: DeepStream: Download 'DeepStream' failure
22:43:31 ERROR: DeepStream: Head request failed on host: ECONNRESET. Error: socket hang uphttps://developer.download.nvidia.com/assets/embedded/secure/tools/files/jetpack-sdks/jetpack-4.4.1/JETPACK_441_b50_DEEPSTREAM/deepstream-5.0_5.0.1-1_arm64.deb?IQOvXtJ6q2h7wEVW_SUReWVsdQk8i0duzlCSFmayyqE8duPuyZPhND_O1S6yd6hoXuobjaYpB8MKsg-8fadWWALJQBs8m_SAwYpFD9-XvCrw1tt1CCtlt7547_3c0P3GoXqi85jW_LogPq06flT9gCxtYNxjhENTzdQA80uZeV3ZEKh4PUJO9Gvtl1aqWzBugJ1W1T6PwrLIM-GWXQQR3p3idZlx-OltlatQEFGv2cyhXv-Ty2l8dg
22:43:31 ERROR: DeepStream: Download 'DeepStream' failure
22:43:31 ERROR: DeepStream: download failed
22:43:31 ERROR: DeepStream: Download 'DeepStream' failure
22:43:31 ERROR: DeepStream: download failed

拒绝连接的
22:55:51 INFO: CUDA on Host: start to download https://developer.nvidia.com/assets/embedded/secure/tools/files/jetpack-sdks/jetpack-4.4.1/JETPACK_441_b50/ubuntu1604/cuda-repo-ubuntu1604-10-2-local-10.2.89-440.40_1.0-1_amd64.deb to /home/ubuntu/Downloads/nvidia/sdkm_downloads/cuda-repo-ubuntu1604-10-2-local-10.2.89-440.40_1.0-1_amd64.deb
22:55:51 ERROR: CUDA on Host: The .mtd file is corrupt. Start a new download.
22:55:51 ERROR: CUDA on Host: Download 'CUDA on Host' failure
22:55:51 ERROR: CUDA on Host: The .mtd file is corrupt. Start a new download.
22:55:51 ERROR: CUDA on Host: Download 'CUDA on Host' failure
22:55:51 ERROR: CUDA on Host: download failed

22:57:14 ERROR: DeepStream: DevZone get download url failed: RequestError: connect ECONNREFUSED 128.1.83.20:443.
22:57:14 ERROR: DeepStream: Download 'DeepStream' failure
22:57:14 ERROR: DeepStream: DevZone get download url failed: RequestError: connect ECONNREFUSED 128.1.83.20:443.
22:57:14 ERROR: DeepStream: Download 'DeepStream' failure
22:57:14 ERROR: DeepStream: download failed

连接重置的
00:05:35 ERROR: DeepStream: Head request failed on host: ECONNRESET. Error: read ECONNRESEThttps://developer.download.nvidia.com/assets/embedded/secure/tools/files/jetpack-sdks/jetpack-4.4.1/JETPACK_441_b50_DEEPSTREAM/deepstream-5.0_5.0.1-1_arm64.deb?FlpOvCmigTA5N-TqbXBm-hfRtR6pMsu_xxBikJ2lu_xusmVBC6WA4nupxDJwHA3jAjOiheJW8KuUzRs5xGE-u4HwBi98x5Xc_2pdtZURC-MmgH4a48ptyI0Xy9xkMayuLRdKXdK8hdINsiIlgUGf8uZbtkvFE_KJHO54WgiuyEPLdeoCE3K6AXPvQ0mdYjhMMYzGKrZR04YnZXJp_kZ5lH051Srg7VadNK1_X_g6UxPRuQWwId3cDQ
00:05:35 ERROR: DeepStream: Download 'DeepStream' failure
00:05:35 ERROR: DeepStream: download failed
00:05:35 : DeepStream: download https://developer.nvidia.com/assets/embedded/secure/tools/files/jetpack-sdks/jetpack-4.4.1/JETPACK_441_b50_DEEPSTREAM/deepstream-5.0_5.0.1-1_arm64.deb failed, retrying 1...

其它未列举的

烧写过程中出错,已有下载的包,且md5sum正确,但提示出错:

1
2
3
4
5
6
7
8
9
10
11
12
13
23:30:53 INFO: NVIDIA Container Runtime with Docker integration (Beta): verifying checksum of /home/latelee/Downloads/nvidia/my_download/nvidia-container-runtime_3.1.0-1_arm64.deb
23:30:53 INFO: NVIDIA Container Runtime with Docker integration (Beta): Found file /home/latelee/Downloads/nvidia/my_download/nvidia-container-runtime_3.1.0-1_arm64.deb with correct checksum, skip downloading.
23:30:53 INFO: NVIDIA Container Runtime with Docker integration (Beta): verifying checksum of /home/latelee/Downloads/nvidia/my_download/nvidia-docker2_2.2.0-1_all.deb
23:30:53 INFO: NVIDIA Container Runtime with Docker integration (Beta): Found file /home/latelee/Downloads/nvidia/my_download/nvidia-docker2_2.2.0-1_all.deb with correct checksum, skip downloading.
23:31:58 SUMMARY: NVIDIA Container Runtime with Docker integration (Beta): Depends on failed component
23:31:58 SUMMARY: NVIDIA Container Runtime with Docker integration (Beta): Depends on failed component
23:31:58 SUMMARY: NVIDIA Container Runtime with Docker integration (Beta): Depends on failed component

3:30:53 INFO: Multimedia API: verifying checksum of /home/latelee/Downloads/nvidia/my_download/nvidia-l4t-jetson-multimedia-api_32.5.0-20210115151051_arm64.deb
23:30:54 INFO: Multimedia API: Found file /home/latelee/Downloads/nvidia/my_download/nvidia-l4t-jetson-multimedia-api_32.5.0-20210115151051_arm64.deb with correct checksum, skip downloading.
23:31:58 SUMMARY: Multimedia API: Depends on failed component
23:31:58 SUMMARY: Multimedia API: Depends on failed component

个人猜测:没有完成所有包的检测,没有做标记,因此有些包的依赖没有记录,所以提示出错。多次从头重试可解决。