Jetson TX1刷机教程(解决Auvidea carrier boards(2x USB3.0)+ 源码编译安装opencv3.2存储空间不足问题)

最近一周感觉都是在给Jetson TX1刷机,然而每次都得各种查资料,然后从师兄那得到启示(养成记录的好习惯),感觉是时候写下刷机的心路历程了。

Jetson TX1刷机不难,直接跟着官方教程走就行Download and Install JetPack L4T(这里不难是指当你的载板(carrier boards)是官方载板的时候)。在第六步的地方,如果不需要在Target-Jetson TX1上安装samples的话,可以点一下右上角的clear actions,以取消在host上安装那一堆东西,这样会给刷机节约不少时间。

Jetson TX1刷机教程(解决Auvidea carrier boards(2x USB3.0)+ 源码编译安装opencv3.2存储空间不足问题)_第1张图片

下文将进入正题。

1、Auvidea载板带来的坑及解决办法

当你的载板是Auvidea载板时(图1中这货),直接照着NVIDIA官方教程走就会带来不少问题,例如如果你下载的是Jetpack 3.1的话,刷完机后就只有一个USB3.0可以使用(图2中插着无线鼠标接收器的位置),另外一个USB是不能使用的(插上任何USB设备都没有反应的),而且micro USB也可能不能使用。
图1Jetson TX1刷机教程(解决Auvidea carrier boards(2x USB3.0)+ 源码编译安装opencv3.2存储空间不足问题)_第2张图片 图2Jetson TX1刷机教程(解决Auvidea carrier boards(2x USB3.0)+ 源码编译安装opencv3.2存储空间不足问题)_第3张图片

当然,这个问题还是比较好解决的,下载Jetpack 3.0进行刷机就能解决另一个USB与micro USB不能使用的问题,但是还有一个问题,这个USB是2.0,这不是期望的结果,这很鸡肋。这是载板不是官方载板的缘故,一旦安装官方教程刷机,会Aauvidea的固件覆盖掉,解决方法就是重新把固件刷回来。

首先到Avidea官网下载固件,如下图,可以看到2.1版本已经支持2个USB3.0,所以2.2肯定也是支持的,同时2.2还修复了WIFI,所以直接下载2.2版本即可。安装方法依然是安装按照2.1版本的教程走。你可能会想用lsusb命令来查看一下TX1是不是真的有两个USB3.0了,但是不好意思,你仍然只会看到一个USB3.0,但是不要失望,因为两个USB都确实能当3.0使用了(经过项目实测)。
Jetson TX1刷机教程(解决Auvidea carrier boards(2x USB3.0)+ 源码编译安装opencv3.2存储空间不足问题)_第4张图片

注意:刷机的时候host和target应该用网线连接在同一个路由器上(当然target也可以通过host连接到网络,但是我没有试过),同时要求能连接到网络,所以如果要通过认证才能连接网络的话,请自行想办法让target能连上网。另外Jetpack3.0刷机之后,target系统中是不会有浏览器的,建议安装火狐浏览器(没有坑),sudo apt-get install firefox,当然可以不用着急安装它,因为如果你也要使用openCV3.2的话,你还需要再卸载掉的。

2、TX1源码编译安装opencCV3.2

TX1刷完机之后安装上的是openCV2.4.13(即使是使用目前最新的Jetpack),由于项目的原因不得不使用openCV3.2,所以只能硬着头皮源码编译安装openCV3.2。为什么这么说了。因为刷完机后如果安装了samples的话,TX1的16G存储空间就只剩下4.8G左右了。但是如果你关注过openCV编译时对存储空间的占用的话,你就会发现这点存储是肯定不够编译openCV3.2的。但是千万不要以为可以在扩展的SD卡或者其他介质上编译,因为这样会碰到权限问题,而且不好解决。所以要做的是想办法腾出尽量多的存储空间来。

1、首先删除home目录下的几个samples文件夹,然后另外几个几十兆的文件夹,这里大概可以多出2G左右的存储空间来,但是还是不够的,computer目录下的文件又不敢随意删除,如果你刷机时选择了安装openCV2.4.13的话,倒是可以到/computer/usr/lib/下把openCV2.4相关的所有库文件全部删除(其余最好别动,我也不知道那些库的用处),这里大概能抠出300M左右的存储。

2、为了编译能一次成功,我们还有一些工作需要做——卸载不会用到的软件。下面列举一些可以放心删除的软件,有些软件(例如对对碰)可能用下面的命令不能卸载,因为其全名不是mahjongg,你可以用命令dpgk -l | grep mahjongg来查找其全名,它的全名是gnome-mahjongg,所以卸载命令改为sudo apt-get -y purge gnome-mahjongg。建议不要卸载系统设置页面中的软件,这样会导致系统设置打不开的,当然如果不小心卸载了也不要着急,可以看一下卸载信息,看到底那些东西被卸载了,一一装回来就行。

sudo apt-get -y –auto-remove purge unity unity-2d*
sudo apt-get -y purge empathy
sudo apt-get -y purge nautilus-sendto-empathy
sudo apt-get -y purge empathy-common #即时通讯
sudo apt-get -y purge thunderbird* #邮件
sudo apt-get -y purge gwibber* #微博
sudo apt-get autoremove gcalctool #计算器
sudo apt-get -y purge gnome-power-manager #电源统计
sudo apt-get -y purge ubuntuone* #Ubuntu One
sudo apt-get -y purge deja-dup #备份
sudo apt-get -y purge simple-scan #扫描
sudo apt-get -y purge hplip* #打印
sudo apt-get -y purge printer-driver* #打印驱动
sudo apt-get -y purge rhythmbox* #音乐播放
sudo apt-get -y purge gedit* #文本编辑
sudo apt-get -y purge libreoffice* #办公套件
sudo apt-get -y purge gnome-orca #屏幕阅读
sudo apt-get -y purge onboard #屏幕键盘
sudo apt-get -y purge mahjongg #对对碰
sudo apt-get -y purge aisleriot #纸牌王
sudo apt-get -y purge gnome-sudoku #数独
sudo apt-get -y purge gnomine #扫雷
sudo apt-get -y purge wodim #命令刻碟

做完上述两步之后TX1的存储空间大概有7.3G左右了,安装一下依赖项之后还是够编译openCV的。

下面正式开始编译安装(参考自chenjiehua123456789的博客基于Jetson TX1的opencv3.2版本的安装和摄像头调用例程,另附英文原版教程):

1、首先先安装Opencv.3.2的依赖库

Baserequirements

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

Python support

sudo apt-get install python2.7-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

OpenGL support

sudo apt-get install libgtkglext1 libgtkglext1-dev
sudo apt-get install qtbase5-dev

video4linux2support (better handling of usb cameras modes)

sudo apt-get install libv4l-dev v4l-utils qv4l2 v4l2ucp

下载安装包

git clonehttps://github.com/opencv/opencv.git

也可以通过官网下载

curl -L https://github.com/opencv/opencv/archive/3.2.0.zip -o opencv-3.2.0.zip
unzip opencv-3.2.0.zip
cd opencv-3.2.0

实在不行也可以从其它电脑下载拷贝过来

2、编译

这是一个有用的cmake参数的列表,为您的OpenCV编译添加一些额外的功能,以使您的TX1工作。
required
CMAKE_BUILD_TYPE=RELEASE compiles the release version of OpenCV
CMAKE_INSTALL_PREFIX=/usr/local path where OpenCV will be installed
WITH_CUDA=ON
CUDA_ARCH_BIN=”5.3” check latest version in CUDA GPUs reference
CUDA_ARCH_PTX=””
optional
WITH_OPENGL=ON OpenGL compatibility, requires GTK+ OpenGL Extensions the QT backend. When this guide was write, compilation faild for the combination CUDA 8.0 + OpenGL support.
WITH_LIBV4L=ON will use video4linux2 libraries
CUDA_FAST_MATH=ON Mathematical operations will run faster but less precise. See intrinsic mathematical functions
ENABLE_PRECOMPILED_HEADERS=OFF your TX1 does not have enough disk space for pre-compiling everything but you can trade space required by compilation time with this flag. Other options is to cross compile from a desktop pc or to download & compile from an external device, an USB 3.0 external drive will do the work and is fast enough.
ENABLE_NEON=ON ref
BUILD_TESTS=OFF disable tests
BUILD_PERF_TESTS=OFF disable performance tests
BUILD_EXAMPLES=OFF disable examples

根据你的需求来修改下面的配置
mkdir release
cd release
cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN=”5.3” -D CUDA_ARCH_PTX=”” -D WITH_OPENGL=ON -DWITH_LIBV4L=ON -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

修改上面安装的路径,否则会和Opencv2.4冲突,建议在当前目录下将、/usr/local/ 修改为./opencvlib

make -j4 # 用4核编译,但是如果存储没到7G以上不建议-j4,因为会多线程会同时产生大量中间文件导致存储不足;)
sudo make install

如果到这里没有任何错误,那恭喜你顺利完成编译安装了,可以删除release文件夹了(节约存储空间——6个G呢)

但是很不幸的是我在cmake的时候遇到问题了

[ 36%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/opengl.cpp.o
In file included from /home/ubuntu/opencv/modules/core/src/opengl.cpp:48:0:
/usr/local/cuda-8.0/include/cuda_gl_interop.h:64:2: error: #error Please include the appropriate gl headers before including cuda_gl_interop.h
 #error Please include the appropriate gl headers before including cuda_gl_interop.h[u][/u]
  ^
modules/core/CMakeFiles/opencv_core.dir/build.make:241: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/src/opengl.cpp.o' failed
make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/src/opengl.cpp.o] Error 1

上面没有给出解决办法,这个错误显然是openGL带来的,在NVIDIA的这个topic的12楼有人也碰到了一样的问题,13楼给出了解决办法:

For compiling with opengl, you have to patch file opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp by replacing:
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
with
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)  || (CUDART_VERSION >= 8000)

[EDIT1: I copy/pasted that from a previous post related to opencv-3.1.0, but the same should apply to opencv-3.2.0]

[EDIT2: Reading this today, I suppose I was very tired when posting this.
What I wanted to advise was to modify file /usr/local/cuda/samples/common/inc/helper_gl.h :
line105: --- #if !defined(GLX_EXTENSION_NAME) || defined(__arm__) || defined(__aarch64__)
line105: +++ #if !defined(GLX_EXTENSION_NAME) || !defined(GL_VERSION_1_3)]

[EDIT3: read this for a more efficient way: https://devtalk.nvidia.com/default/topic/1007290/jetson-tx2/building-opencv-with-opengl-support-/post/5141945/#5141945]

其中EDIT1在openCV3.2中已经不用再改了,EDIT2我并没有找到一致的内容所以也没管,EDIT3比较有用,是开发人员给出的解决办法:

Please apply this patch.
In ‘/usr/local/cuda-8.0/include/cuda_gl_interop.h’

diff --git a/cuda_gl_interop.h b/cuda_gl_interop.h
index 0f4aa17..e8c538c 100644
--- a/cuda_gl_interop.h
+++ b/cuda_gl_interop.h
@@ -59,13 +59,13 @@

 #else /* __APPLE__ */

-#if defined(__arm__) || defined(__aarch64__)
-#ifndef GL_VERSION
-#error Please include the appropriate gl headers before including cuda_gl_interop.h
-#endif
-#else
+//#if defined(__arm__) || defined(__aarch64__)
+//#ifndef GL_VERSION
+//#error Please include the appropriate gl headers before including cuda_gl_interop.h
+//#endif
+//#else
 #include 
-#endif
+//#endif

如果遇到

/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmFreeDevice'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmGetDevice'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmFreeDevices'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmMap'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmCloseOnce'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmUnmap'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmOpenOnce'
/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/libGL.so: undefined reference to `drmGetDevices'
collect2: error: ld returned 1 exit status
apps/annotation/CMakeFiles/opencv_annotation.dir/build.make:102: recipe for target 'bin/opencv_annotation' failed
make[2]: *** [bin/opencv_annotation] Error 1
CMakeFiles/Makefile2:11508: recipe for target 'apps/annotation/CMakeFiles/opencv_annotation.dir/all' failed
make[1]: *** [apps/annotation/CMakeFiles/opencv_annotation.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

那么解决方法,把链接重新指向:
cd /usr/lib/aarch64-linux-gnu
sudo rm libGL.so
sudo ln -s /usr/lib/aarch-linux-gnu/tegra/libGL.so libGL.so

到此问题完美解决,同时开发人员还给出了其他一些问题的解决方法。

如果手边有SSD的话,解决存储不足的问题就不用那么麻烦了,可以尝试在SSD挂载编译,把install_prefix设置在tx1目录,编译速度还挺快,然后把编译好的都放在SSD,有了新板子直接插上SSD,一句sudo make install,新板子就装好opencv了(来自师兄的建议,移动硬盘是不是可以我觉得也可以试试)

转载请注明出处http://blog.csdn.net/Pjq_Pjq/article/details/78345421

你可能感兴趣的:(系统安装,TX1)