Jetson TX2 完整刷机教程

Jetson TX2 刷机过程以及背后的原理叙述

Posted by Ethan on June 1, 2019

这里记录了完整的Jetson TX2刷机 踩坑 历程。

看了网上无数教程,但是大多数 “教程” 的问题在于没有简单介绍一下后面的原理,对于一些刷机新手而言十分不友好。而且相互抄袭, 盲听盲从的现象还是很严重的。

所以将自己的刷机过程以及背后的原理介绍写在这里,供其他开发者参考 😃

(Plus:这里多是直接盗图,实在不想自己再截图,为此感谢 long19960208 )

前言

先简单科普下 Jetson TX2

NVIDIA Jetson Tx2

简单的来说,它就是嵌入式领域的AI超级电脑

它是一台基于NVIDIA Pascal™架构的AI单模块超级计算机。它性能强大,外形小巧,节能高效,适合机器人、无人机、智能摄像机和便携医疗设备等智能终端设备。同时,它支持 Jetson TX1 模块的所有功能,并且可以铸就更大型、更复杂的深度神经网络。

其核心硬件参数如下所示。

除了TX2以外,Nvidia 的 Jetson 家族还有两个其他成员:Jetson TX1 , Jetson Nano。其中,新推出的 Jetson Nano 更是以其价格低廉(仅仅不到200刀!!!)和简单易用(烧录过程和树莓派相同,比 TX2 友好得多)而受到了不少开发者的青睐。

下面是 Jetson TX2 家族成员之间的性能对比。

废话不多说了,开始进入正文。

PreTasks

Requirement before installation

  1. 一台带有 Intel 或 AMDx86 架构的 Ubuntu 操作系统 的电脑作为 host 主机
  • Ubuntu 16.04 :然而我在网上看到有使用 Ubuntu 18.04 并且利用 16.04 安装包安装成功的样例。不过建议还是利用 16.04 版本比较保险一些。
  • 虚拟机 不是不可以,只是一般来说 flash OS 时可能会 慢一些 ,并且在网络连接上必须要设置为 桥接模式 。当然这也与个人电脑性能差异有关。
  • 物理空间:需要 至少40G 以上的物理空间。Jetpack和Jetpack 下载的安装包需要的空间十分庞大。如果是使用虚拟机在安装开始后还能重新创建一台虚拟机,但如果是双系统的同学那么就一定需要在一开始就注意这一点。
  1. Jetpack ** 下载(需要申请 Nvidia developer账号):我使用的是 **JetPack 3.3 ,如果需要使用更高版本的 JetPack ** ,需要注意的是下面的 **其他包版本号需要对应的修改 (包括TensorFlow,opencv等)。具体的版本号对应请参考 StackOverflow 上的这篇 ,为了保险还可以多找几篇帖子查看前人安装经验。

  2. [ 最为重要的一项 ] 一定要确保 开发板和 host 主机 都能上网 ,最好是在同一wifi / 路由器下,因为在安装过程中间出现了很多需要从网上下载依赖包的情况!!

Requirement during installation

  1. 在开始 Post Installation 时,需要给 Jetson 配备显示器(要求能连接上 TX2 的 HDMI 接口),键盘和鼠标。其中,由于 TX2 原生开发板上只有一个 USB 口,所以还需要一个分线器。

  2. 一个能连网的路由器 / WIFI。一般来说是不需要网线的,除非你嫌 TX2 的下载速度过慢才会用网线连接。(原因参考 踩坑实录 )。

Installing JetPack

开始运行 JetPack

host 上,cd 到 Jetpack 对应的目录。然后运行以下命令:

chmod +x ./JetPack-L4T-3.3-linux-x64_b39
./JetPack-L4T-3.3-linux-x64_b39

Jetpack 开始正常运行。

然后选择 Jetpack 安装位置,和我们之后下载的安装包的下载位置。数据收集协议选择 yes 或 no 都可以。

选择开发板

之后进入到安装包选择界面。

如果没能够进入到这个界面,而是在页面底部出现了Error的话,很可能是网络没有连接,导致 Jetpack 无法检查是否有更新包。请回到 Requirement before installation 处仔细检查是否满足安装要求。

下载安装包到 host 上

现在开始安装对应的安装包到你的host主机上

这里需要你选择一下你的安装选项。一般来说,如果你是第一次安装,我的建议是全部选中,即使不全部安装到 TX2 上,也先都下载到你的电脑上来。这样做能保证之后即使刷机出现了一些错误,你也能很快的重新安装包。

安装一般时间都比较漫长,请耐心等待。

肯定是接受所有协议

如果中间出现了一些安装错误,可以多尝试几次,因为 Jetsonpack 不会再次下载已经下载过的包,只会直接从下载停止的地方继续下载。

有时候如果出现如图所示的错误,则需要自己手动安装在电脑上安装对应的包,代码如下:

sudo apt-get install <packgename>

下载成功后,开始准备刷系统和其他安装包。

Flash OS

Flash OS 是指给TX2重新刷系统的过程。虽然 TX2 出厂时都会自带系统,但是为了和 Jetpack 里面其他软件包的版本配套与及时更新,我们还是选择重新刷系统( Reflash OS )。

下面我们开始刷系统。如果你是第一次刷机,还没有刷完系统,请继续阅读下去。如果你已经刷完一次系统,请直接移步 Post Installation 部分,而不需要重刷一次。

连接方式选择

首先选择连接方式,如果你连什么是DHCP都不知道的话,可以直接选第一个。一般来说我们并不会用到第二个选项。

选择可以连接到 TX2 的网络接口。一般来说只有一个选项可以选择,如果有多个选项,就需要在其他命令行里面键入ifconfig 来查看哪一个是可以连接上网的网络接口 ( Internet Surface )。如果实在不清楚如何选择,建议先上网 Google 一下网络接口的基本概念。

连接正常,开始我们的下一步吧!

Begin Interaction with TX2

上述步骤都是在自己的电脑,也就是 host 主机 上完成。直到这时我们才开始真正和 TX2 进行互动。

和TX2的连接方法

在给TX2 上电,安装天线以后,需要首先和 TX2 建立物理连接( via USB )。

  • USB 连接:需要用一个 USB-micro 连接线连接电脑和 TX2。一般来说连接线开发板都会附带。在刷系统时,所有的系统文件都会通过 USB 口传输到TX2上。

Plus:这里我写的和网上一般的教程是不一样的,网上一般的教程还要求这时就有网线连接,但实际上并不需要(也最好不要)。具体原因我在 踩坑附录 里面详细叙述了。

然后开启TX2的 强制恢复模式 ,开启方式如下:

  • 断开电源,保证开发板断电
  • 确保 Micro USB 线连接了开发板和电脑
  • 接通电源,按下 power 键,开机
  • 刚开机时,迅速 按住 Recovery 键不放开,然后按一下 Reset 键,过 2s 以后再松开 Recovery 键。此时开发板应该处于强制恢复模式。

:paperclip: Hint : 一共四个按键都在 USB 端口的对侧,并且在板子上对应的标有英文缩写。

之后我们需要检查一下是否连接成功,新开一个终端 (快捷键 Ctrl+Alt+T ),然后输入

lsusb

检查 USB 端口是否有 TX2 连接。如果出现了类似下面的 Nvidia Corp 的字样,那么说明强制恢复模式启动成功。

ID 0955:7C18 NVidia Corp

Waiting

确认无误后,在刚才的窗口单击 Enter ,开始安装系统。

系统安装成功!

这时如果你的电脑是像下面这样的话,说明你的电脑是在寻找你的 TX2 的 IP。没关系,请直接 Ctrl + C 终止终端,然后从下面的 Restart Jetpack 章节继续。

JetPack is unable to determine the IP address  of the Jetson Developer Kit
Please select which action do you want: 
	1. Retry
	2. Manually enter IP address
Your Option is <1/2>:

Post Installation

Post Installation 是指在刷完系统以后,安装其他包的过程。

下面我们继续我们的安装

Restart Jetpack

我比较推荐的方式是不让 Jetpack 自动寻找 TX2 的IP。而是在 Flash OS 结束以后,先退出 Jetpack , 然后再次打开 Jetpack 并手动指定IP。当然,如果你直接通过自动寻找 IP 的方式能够继续安装,那么请跳过这一节

重新打开 Jetpack。 其他步骤都一样,需要注意的只有以下几个步骤:

  1. 选择安装包的时候,将 Flash OS 一项选择为 No Action

  1. 在确认安装以后,这一次并不会直接跳出来黑色界面( MobaXterm ),而是需要手动指定 Jetson IP。之所以需要手动指定 IP ,原因在于 Jetsonpack 后续包的安装过程中,需要 ssh 远程登录到 TX2 上,这时就需要用到 Jetson 的 IP 地址。

这时,需要我们将 TX2 连接显示屏、键盘、鼠标,连接到事先准备好的 WIFI / 路由器上。在 TX2 的终端里输入:

ifconfig 	

查看 TX2 的 IP 地址并输入对应的位置。

连接成功,next step !

Installing other packages

其实一般来说,如果你足够顺利的话(然而博主从未顺利过,总是踩坑😭),剩下的事情都是 Jetpack 的内置脚本帮你一键搞定的。你需要的只是等待1个小时 还能开把炉石 ,然后等待出现以下界面:

恭喜,刷机结束!

如果没有,请争取在下面的坑中对坑入座😶​。

下载速度过慢

这个是最容易解决的一个bug。因为 JetonPack 安装其他包的过程,本质上是一段脚本在执行以下动作:

  • scp 传输 host 中已经下载好的安装包到 TX2 上。
  • dpkg 进行对应包的安装。
  • 如果检查到缺少底层包支持 (unmet dependency),那么利用 Ubuntu 的 apt 包管理工具进行下载

而下载速度过慢的原因就在于 apt 管理工具的下载源在刚刷好机的时候,大多数选择的都是国外源,一般来说都只有几十 kb/s 的下载速度。这时就需要我们更换下载源。具体方法可以参考 Tuna

纯粹下载不了

额,建议你 Ping 一下自己的 IP,以及百度的IP试试。这个说明你上不了网,一般来说原因在于你没有满足 PreTasks 章节里面的要求。当然也有个例情况,像博主就是 DNS 服务器错误,手动更改DNS才解决了上网问题。

Unmet dependency will not be installed

哈哈哈哈,你以为能正常下载包就ok了吗?在底层 dependency 下载后还能出现这样的错误:

Hit:5 http://us.archive.ubuntu.com/ubuntu xenial InRelease
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
cuda-cross-aarch64-9-0 : Depends: g++-aarch64-linux-gnu but it is not going to be installed
cuda-toolkit-9-0 : Depends: cuda-samples-9-0 (>= 9.0.252) but it is not going to be installed
Depends: cuda-documentation-9-0 (>= 9.0.252) but it is not going to be installed

这说明你和博主一样,TX2 系统底下出了很大的问题。网上很少有解答,只有在 Nvidia 官方论坛上有对应的解决方式,但是并不推荐,原因是解决方式过于复杂。


想知道解决方式吗?

和博主一样,简单粗暴的重刷系统吧!

哈哈哈哈哈

哈哈哈哈

哈哈哈

哈哈…

哈…

呜…😭

(为什么别人都遇不到的坑我都能踩到…自闭.jpg)

补充:Install Tensorflow

身为一个AI平台,TX2 怎么能不装深度学习框架呢?我以我安装的 Tensorflow 为例,简单说一下 TX2 上 Tensorflow 安装流程。

方式一:直接利用 Nvidia 官方提供的脚本

第一种方式十分简单,直接利用 Nvidia 官方提供的脚本就可以。

原文传送门 ,其中需要的命令如下:

$ pip install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp33 tensorflow-gpu

在安装完成以后需要在命令行中打开python,直接输入

>>> import tensorflow

如果需要确定 Tensorflow 的版本号,只需要

>>> print(tensorflow.__version__)

相比自己配置而言却是方便了很多

如果发现版本不对需要卸载:

$ pip uninstall -y tensorflow-gpu

方式二:手动安装

如果需要的话,那么就直接手动安装,安装教程可以参考https://blog.csdn.net/Code_Mart/article/details/82260271

需要注意的是安装的 TensorFlow 版本一定需要和自己的 JetPack ,CUDA ,cuDNN 版本相匹配。

补充:Install OpenCV

除了深度学习框架,一般来说开发者还需要安装的另外一个包就是十分 easy-to-use 的 OpenCV 。

关于安装 OpenCV 的详细过程,由于 这篇博客 写的十分详尽,在此就不再拾人牙慧了。

需要注意的是,由于在 Jetpack 安装过程中已经安装过一次 OpenCV (然而我们并不能直接使用),需要将原有的 CV 包 purge 掉才能开始安装。

踩坑附录

这次底层环境配置的过程真的可谓是踩坑无数。关键还大坑不少,小坑不断。

由于篇幅所限,在这里只将一些比较大的,网上不好找到解决方式的坑分享出来。

1.最大的坑:非要网线连接路由器,不能连接 WIFI ?

这个纯属无稽之谈。

关键最恐怖的是,自己第一篇看的中文博客就是这么写的,然后后面搜到的中文教程都是这么写…

真真切切的感受到了这些博客之间的亲属关系….

然后导致自己在第一次刷的时候,满世界的找一个能用的路由器。

路由器找到了,然后又满世界找自己的上网账号….

实际上不就是想 ssh ,远程登录,scp 传输个文件嘛

这种小事,WIFI 2M/s 的传输速度还慢?

嫌慢为什么不直接把文件拷过去?然后直接手动安装?

真的是搞不懂…

2.需不需要重新装系统?

实际上很多人的刷机就像前面所谈,一般是很难一次刷完,很多时候都是卡在了自动确定 IP 的那步。

即使是连接在同一个局域网下,也不一定能一次性确定 IP。

所以博主还是建议分成两次。

第一次通过 Micro USB 线先把系统刷完。

第二次通过 WIFI 来让 Jetsonpack ssh 到 TX2 上,不刷机直接安装需要的包。

3.找不到 IP,即使点击 Retry N 次也没有效果?

建议同2.,还是自己直接手动输入 IP 吧,这样更稳一些。

4.在 Post Installation 中遇到的那些坑

博主在 Post Installation 环节遇到的主要的坑都在对应章节已经提到了,在此不再重复。

后记

写一篇原创博客着实不易。

4000多字一个一个手码上去,更不用说需要重新收集自己踩坑历程中浏览过的那些关键网站,遇到过的关键步骤。

但是个人认为,合理的记录自己的成长历程,并及时与其他人分享,不仅有利于开发者本人的迅速成长,还能够形成圈子里面的良性循环,你帮我,我帮你,共同建立一个开放,分享的环境。

博主并不介意其他人转载这篇放在 Github 上的文章,但是麻烦请署一下作者名称。

尊重别人的劳动成果才是对开发者最好的保护。

谢谢~

(Plus:喜欢的话记得 ⭐️ star 一下 ~ )