Jetson TX1/TX2配置教程

使用JetPack 2.3配置TX1 / 使用JetPack 3.0配置TX2

配置JetPack 2.3/JetPack 3.0

JetPack 系列是NVIDIA发布的在Jetson系列嵌入式平台上部署开发环境的开发包,目前最新版本是3.0,推荐用于TX2,它包含64bit的 Ubuntu16.04 操作系统,CUDA 8.0,cuDNN 5.1,以及用来加速CNN推断速度的TensorRT. 对于JetPack 3.0更详细的介绍参见JetPack介绍.
由于TX1与TX2的配置方法差别不大,因此以下教程基于JetPack 2.3配置TX1。

"da"

所需设备

1.一台装有Ubuntu64位操作系统的主机:由于JetPack是先在主机上下载并安装相关的包,然后刷到TX1上。
2.一根microUSB转USB线用于将主机中的系统镜像刷写至TX1中,一根网线连接TX1与路由器用于通过路由器传输cuda等包,注意这里若使用路由器方式传输文件速度较慢,强烈建议采用离线拷贝文件的方式,具体细节见下文。
3.USBHub,HDMI转VGA线,显示器,键鼠 等。

Nvidia Jetson面向无人智能化领域的嵌入式平台
附上前几天到货的TX2拆箱图!
"da"

下载JetPack2.3

在主机上通过 NVIDIA 官方链接 下载 JetPack 2.3,并新建一个文件夹存放下载下来的文件,文件名大概为 JetPack-L4T-2.3-Linux-x64.run,在/home/usrname/目录下新建文件夹,可以命名为 JetPack :

1
2
3
cd ~
mkdir JetPack
cp ~/Downloads/JetPack-L4T-2.3-linux-x64.run ~/JetPack

安装JetPack2.3

  1. 为 JetPack-L4T-2.3-linux-x64.run 增加执行权限

    1
    2
    cd ~/JetPack
    chmod +x JetPack-L4T-2.3-linux-x64.run
  2. 执行 JetPack-L4T-2.3-linux-x64.run ,点击 Next

    1
    ./JetPack-L4T-2.3-linux-x64.run
  3. 指明安装路径后选择部署的开发平台
    根据需求选择 Jetson TX1或者Jetson TX2,同样也支持 TK1的部署


    "da"
  4. 弹出JetPack L4T Component Manager对话框
    由于我已经安装好了所有的包,所以这边的Action一栏是no action,如果没有安装过的话,会显示install xxx。点击Next后,开始下载。
    JetPack 2.3下载界面


    "da"

    JetPack 3.0下载界面

    "da"

    这里大家可以选择不安装OpenCV for Tegra,因为这个版本是2.4.13,对于USB摄像头的读取支持不是很好,另外对于CUDA静态库的读取也有些问题,所以不推荐安装,稍后会提示大家安装OpenCV 3.1

  5. 网络配置和端口选择
    安装完成后进入网络配置选项,选择通过路由器连接互联网,同时将TX1连接到与主机同一个路由器上.
    选择eth0端口,点击Next

  6. 设置TX1为Force USB Recovery Mode(强制USB恢复模式)
    弹出如图所示终端窗口:


    "da"
  7. 按照提示,将TX1设置为强制USB恢复模式

    关闭设备,移除电源适配器
    用自带的Micro USB 转 USB 数据线连接主机与TX1
    连接电源适配器
    按下POWER按钮
    按住FORCE RECOVERY 按钮不放开,同时按一下RESET按钮,等待两秒钟,松开FORCE RECOVERY 按钮
    完成上述步骤后,可以在主机上通过 lsusb命令查看是否含有Nvidia Corp设备,确认存在后敲击Enter,开始将操作系统以及开发包拷贝到TX1,中途连接TX1的显示器会显示Ubuntu 16.04 桌面系统

至此,系统已经刷写完毕,下一步进行cuda,cudnn,opencv的配置,本教程采用效率更高的离线方式

拷贝离线安装包及安装脚本

若使用默认的路由器方式传输文件速度较慢,并且在传输过程中必须保证网络不被中断,否则需要从头再来,因此强烈建议采用稳定且快速的离线拷贝文件的方式。

拷贝cuda安装脚本


"da"

拷贝cuda、cudnn安装包

所有在JetPack中下载的安装包均存在JetPack/jetpack_download中,拷贝出cuda8.0安装包(cuda-repo-l4t-8-0-local_8.0.34-1_arm64.deb)以及cuda安装脚本(cuda-l4t.sh),cudnn安装包(cuDNN-v5.1.zip),若找不到文件可尝试在JetPack下搜索.


"da"

TX1中安装cuda

1.拷贝

1
2
3
cd ~
mkdir cuda-l4t
cp cuda-l4t.sh /home/usrname/cuda-l4t

2.查看cuda-l4t.sh脚本


"da"

3.安装命令(需联网)
1
bash cuda-l4t.sh cuda-repo-l4t-8-0-local_8.0.34-1_arm64.deb 8.0 8-0

4.完毕后导入环境变量

1
2
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH

TX1中安装cudnn

1.解压cuDNN-v5.1.zip,有三个deb安装包
2.使用sudo dpkg -i指令依次安装,但是默认安装路径是在usr/include和usr/lib下的,

1
2
sudo cp /usr/include/cudnn.h /usr/local/include/
sudo cp /usr/lib/aarch64-linux-gnu/libcudnn* /usr/local/lib/

TX1中配置opencv3.1

1.安装依赖库

1
2
3
4
5
6
7
sudo apt-add-repository universe
sudo apt-get update
sudo apt-get install -y build-essential make cmake cmake-curses-gui g++
sudo apt-get install -y libavformat-dev libavutil-dev libswscale-dev
sudo apt-get install -y libv4l-dev libeigen3-dev libglew1.6-dev libgtk2.0-dev
sudo apt-get install -y python-dev python-numpy

注意:为了方便,这里将opencv的所有依赖项与下面caffe工程所需依赖项的安装命令统一写入脚本,然后运行该脚本即可。以下是脚本内容
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
sudo apt-get update
sudo apt-get install -y build-essential make cmake cmake-curses-gui g++ \
libavformat-dev libavutil-dev libswscale-dev \
libv4l-dev libeigen3-dev libglew1.6-dev libgtk2.0-dev \
libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler \
--no-install-recommends libboost-all-dev \
libatlas-base-dev \
libgflags-dev libgoogle-glog-dev liblmdb-dev \
python-dev python-numpy

2.编译安装Opencv3.1
注意:
由于CUDA 8.0不支持OpenCV的 GraphCut 算法,可能出现以下错误:

1
2
3
4
5
6
7
8
9
/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState’ has not been declared
typedef NppStatus (*init_func_t)(NppiSize oSize, NppiGraphcutState** ppStat
^
/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:135:18: error: ‘NppiGraphcutState’ does not name a type
operator NppiGraphcutState*()
^
/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:141:9: error: ‘NppiGraphcutState’ does not name a type
NppiGraphcutState* pState;
.......

此时需要修改OpenCV源码,使其不编译graphcuts.cpp 即可
进入opencv-3.1.0/modules/cudalegacy/src/目录,修改graphcuts.cpp文件,将:

1
2
#include "precomp.hpp"
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

修改为

1
2
#include "precomp.hpp"
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)

然后开始编译!

1
2
3
4
5
6
7
8
Downloads opencv-3.1.0.zip
cd ~
unzip opencv-3.1.0.zip
cd opencv-3.1.0
mkdir build
cd build
cmake -DWITH_CUDA=ON -DCUDA_ARCH_BIN="5.3" -DCUDA_ARCH_PTX="" -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DCUDA_FAST_MATH=ON ..
sudo make -j4 install

编译好的OpenCV库会默认安装到 /usr/local/文件夹下

TX1中配置基于caffe的工程

基于caffe的工程可以是rcnn,ssd
1.安装依赖库

1
2
3
4
5
6
7
8
# General Dependencies
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev \
libhdf5-serial-dev protobuf-compiler -y
sudo apt-get install --no-install-recommends libboost-all-dev -y
# BLAS
sudo apt-get install libatlas-base-dev -y
# Remaining Dependencies
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev -y

2.编译caffe工程

1
2
3
Downloads ...
cd caffe
cp Makefile.config.example Makefile.config

修改Makefile.config:

1
2
3
4
5
6
7
8
# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1
# Uncomment if you're using OpenCV 3
OPENCV_VERSION := 3
# Uncomment to support layers written in Python (will link against Python libs)
WITH_PYTHON_LAYER := 1

由于hdf5库目录更改,所以需要单独添加:

1
2
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/aarch64-linux-gnu/hdf5/serial/

之后编辑即可

1
make -j4 all

为了更好地使用pycaffe ,建议安装:

1
2
sudo apt-get install python-numpy python-setuptools python-pip cython python-skimage python-protobuf
make pycaffe

此处感谢大神师兄Jalong_Ma的悉心教导!
大部分内容引自Jalong_Ma’s blog