nvidia tx1使用记录--基本环境搭建

前言

  之前有专门写过一篇nvidia tk1使用记录--基本环境搭建,本以为自己有过tk1的经验后,在tx1上搭建和它一样的环境会轻车熟路,结果却是在nvidia tx1上花的时间居然比tk1还多.我自己也总结了下,一方面,因为tk1的时候,自己还没有知其所以然;另一方面,因为tx1硬件配置,系统环境都升级了导致.虽然遇到了更多的问题,但最后我发现,tx1的基本环境搭建是比tk1要简单的,只是我走了些弯路而已.下面记录了我搭建的过程(跳过了弯道^_^),目标还是和tk1那篇一样,搭建一个能够支持opengl而不是openes,且使能了opengl和cuda的opencv3.1.0的环境,至于为什么,可以去看我的nvidia tk1使用记录--基本环境搭建,它里面有说明.

注意,所有的安装顺序不要随意调整且下面的操作全部在tx1系统上完成!!!

安装cuda

下载cuda-repo-l4t-r23.1-7-0-local_7.0-73_armhf.deb,执行:

sudo dpkg -i cuda-repo-l4t-r23.1-7-0-local_7.0-73_armhf.deb

安装cuda仓库,然后执行:

sudo apt-get update
sudo apt-get install cuda-toolkit-7-0

更新系统并进行安装,安装完后,执行:

cat << END >> ~/.bashrc
# Add 32-bit CUDA library & binary paths:
export PATH=/usr/local/cuda-7.0/bin:\$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-7.0/lib:\$LD_LIBRARY_PATH
END

更新环境并执行:

source  ~/.bashrc

来让其生效,通过:

ubuntu@tegra-ubuntu:~$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Sun_Nov_15_11:52:02_CST_2015
Cuda compilation tools, release 7.0, V7.0.72

进行验证安装成功与否.

qt安装

下载qt安装包qt-everywhere-opensource-src-5.5.1,解压后,修改文件qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf,改成

#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

QMAKE_CFLAGS_RELEASE   += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = gcc
QMAKE_CXX               = g++
QMAKE_LINK              = g++
QMAKE_LINK_SHLIB        = g++

# modifications to linux.conf
QMAKE_AR                = ar cqs
QMAKE_OBJCOPY           = objcopy
QMAKE_NM                = nm -P
QMAKE_STRIP             = strip
load(qt_config)

修改qt.pro,去掉文件最后部分的一些不想编译的模块,比如我的是:

addModule(qtbase)
addModule(qtandroidextras, qtbase)
addModule(qtmacextras, qtbase)
addModule(qtx11extras, qtbase)
addModule(qtsvg, qtbase)
addModule(qtxmlpatterns, qtbase)
addModule(qtdeclarative, qtbase, qtsvg qtxmlpatterns)
addModule(qtquickcontrols, qtdeclarative, qtgraphicaleffects)
addModule(qtmultimedia, qtbase, qtdeclarative)
addModule(qtwinextras, qtbase, qtdeclarative qtmultimedia)
addModule(qtactiveqt, qtbase)
addModule(qtsystems, qtbase, qtdeclarative)
addModule(qtlocation, qtbase, qtdeclarative qtquickcontrols qtsystems)
addModule(qtsensors, qtbase, qtdeclarative)
#addModule(qtconnectivity, qtbase $$ANDROID_EXTRAS, qtdeclarative)
addModule(qtfeedback, qtdeclarative, qtmultimedia)
addModule(qtpim, qtdeclarative)
addModule(qtwebsockets, qtbase, qtdeclarative)
addModule(qtwebchannel, qtbase, qtdeclarative qtwebsockets)
addModule(qtwebkit, qtbase, qtdeclarative qtlocation qtmultimedia qtsensors qtwebchannel qtxmlpatterns, WebKit.pro)
addModule(qttools, qtbase, qtdeclarative qtactiveqt qtwebkit)
addModule(qtwebkit-examples, qtwebkit qttools)
addModule(qtimageformats, qtbase)
#addModule(qt3d, qtdeclarative qtimageformats)
#addModule(qtcanvas3d, qtdeclarative)
addModule(qtgraphicaleffects, qtdeclarative)
addModule(qtscript, qtbase, qttools)
addModule(qtquick1, qtscript, qtsvg qtxmlpatterns qtwebkit)
addModule(qtdocgallery, qtdeclarative)
#addModule(qtwayland, qtbase, qtdeclarative)
addModule(qtserialport, qtbase)
addModule(qtenginio, qtdeclarative)
addModule(qtwebengine, qtquickcontrols qtwebchannel, qtwebkit qtlocation)
addModule(qttranslations, qttools)
addModule(qtdoc, qtdeclarative)
addModule(qtqa, qtbase)

到这里,qt里面需要修改的就完成了,但还需要对系统环境做些处理,让其满足qt的编译.修改.bashrc,添加:

export SYSROOT
export PKG_CONFIG_SYSROOT_DIR=/
export PKG_CONFIG_LIBDIR=$SYSROOT/usr/lib/arm-linux-gnueabihf/pkgconfig:$SYSROOT/usr/share/pkgconfig:$SYSROOT/usr/lib/pkgconfig
export PKG_CONFIG_PATH=$SYSROOT/usr/lib/arm-linux-gnueabihf/pkgconfig:$SYSROOT/usr/share/pkgconfig:$SYSROOT/usr/lib/pkgconfig

执行source ~/.bashrc让其生效.执行下面的命令:

sudo apt-get install libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync1 libxcb-sync-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-glx0-dev

来安装对xcb的依赖.

上面所有的操作安装完后,就可以开始编译qt了.下面直接贴出几个操作步骤及系统的输出信息:

ubuntu@tegra-ubuntu:~/qt-everywhere-opensource-src-5.5.1$ mkdir build
ubuntu@tegra-ubuntu:~/qt-everywhere-opensource-src-5.5.1$ cd build/
ubuntu@tegra-ubuntu:~/qt-everywhere-opensource-src-5.5.1/build$ ls
ubuntu@tegra-ubuntu:~/qt-everywhere-opensource-src-5.5.1/build$ sudo mkdir /opt/qt; ../configure -verbose -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix /opt/qt -no-c++11 -qt-zlib -qt-xcb
[sudo] password for ubuntu: 
+ cd qtbase
+ /home/ubuntu/qt-everywhere-opensource-src-5.5.1/qtbase/configure -top-level -verbose -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix /opt/qt -no-c++11 -qt-zlib -qt-xcb

This is the Qt Open Source Edition.

You are licensed to use this software under the terms of
the Lesser GNU General Public License (LGPL) versions 2.1.
You are also licensed to use this software under the terms of
the GNU Lesser General Public License (LGPL) versions 3.

Type '3' to view the GNU Lesser General Public License version 3.
Type 'L' to view the Lesser GNU General Public License version 2.1.
Type 'yes' to accept this license offer.
Type 'no' to decline this license offer.

Do you accept the terms of either license? yes

然后执行make -j4编译(这个时候可以去睡一下了,估大概要1个小时,^_^!!!),sudo make install安装就可以了.最后在~/.bashrc添加:

export PATH=/opt/qt/bin:$PATH
export LD_LIBRARY_PATH=/opt/qt/lib:$LD_LIBRARY_PATH

然后source ~/.bashrc一下,并执行 qmake -version看是否安装成功.

opencv安装

先安装编译opencv依赖的软件包吧(因为opencv-3.1.0里面不需要什么修改)!执行下面几个命令:

sudo add-apt-repository universe
sudo apt-get update
sudo apt-get -y install build-essential make cmake cmake-curses-gui g++ libavformat-dev libavutil-dev libswscale-dev libv4l-dev libeigen3-dev libglew1.6-dev libgtk2.0-dev

安装完依赖后,再修改下cuda头文件,修改后的样子:

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

最后下载opencv-3.1.0,解压,并进入到opencv-3.1.0,创建一个build目录,并在build里执行

cmake -DCMAKE_BUILD_TYPE=RELEASE -DWITH_OPENGL=ON -DWITH_QT=ON ..

进行构建,然后执行make -j4进行编译,最周执行suod make install进行安装.还有一步,执行:

echo "# Use OpenCV and other custom-built libraries." >> ~/.bashrc  
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/" >> ~/.bashrc  
source ~/.bashrc  

更新下.bashrc,然后source ~/.bashrc让其生效.

几个需要注意的地方

  1. tx1刚拆箱,接上电源,hdmi,按下power按钮,风扇转一下就没转了,显示器半天都没反应,这显示器接tk1还好好的.后来发现是这显示器不支持(该显示器最大分辨率为1600x900),换了一个1080p显示器就可以了,另外风扇只有在负载很高,也就是它觉得需要转的时候才转,比如跑个cuda程序,全线程编译过程中都会转起来.至于显示器的问题我觉得是可以支持到1600x900吧,可能需要修改下内核选项,比如增加nomdeset到cmdline,不过我没尝试了,以前遇到过,也解决过,没兴趣再解决了,除非我这个1080p显示器坏了^_^;
  2. tx1自带的系统版本是是23.2,也就是当前(2016/04)最新的,所以不需要我们再安装了;
  3. tx1自带的flash只有16GB,真要自己编译、安装上面那些软件包,可能会发现空间不够.可以将root区装到外接的sata盘上,这个不难,也就不详细说明!主要说一下怎么修改tx1,让其启动时挂载sata分区为root.其实就修改一下tx1 系统里boot目录下的一个conf文件,将root=xxx改为root=/dev/sda即可;
  4. 我是因为特殊需要,只好重新编译的.如果nvidia提供的opencv和仓库里面的qt安装包已经满足了你的要求,那么就不要自己编译啦,一方面,复杂;另一方面,nvidia的opencv版本增加了自己cpu的优化,性能可能更好;
  5. 如果你想用tx1的wifi来完成以上网络操作的话,记得一定要接上它自带的天线,不然速度慢的完全无法接受的^_^
  6. 系统更新程序如果弹出,提示你更新的时候,我建议暂时先不要更新.tk1的时候需要做个额外操作来防止更新时覆盖了nvidia自己的驱动,这是tk1时代就有的bug,tx1时代有说这个问题已经解决的,有说还没解决的,我自己也没有去尝试,所以建议暂时先不要随意更新

2016/04/27补充

再次购买了一块tx1,上电还是一如既往的显示器没反应,这我就奇怪了,因为我已经是1080P的显示器了。经过反复折腾(换hdmi-dvi直连线、换hdmi经过hdmi转vga接显示器vga口等等),后来发现让它启动1分钟后,插拔板子上的HDMI接口,显示器就亮了(这个方法还是之前在论坛上看到的),在折腾的过程中可以发现连接上的网口灯是正常工作的,连接上的键盘使可以操作的,这说明板子至少是没问题的;另外装上系统后,1600x900的显示器可以工作了,我认为是之前没装图形界面导致的,估计还是可以通过nomodeset解决,再次懒得验证了;最后一点要补充的,这次的系统默认没有图形环境,需要安装下,操作步骤和nvidia tk1使用记录--基本环境搭建里所描述的一样。

总结

  搭建tx1的过程是痛苦的(经历过3次qt编译、三次opencv编译!!!),特别是等待它编译的时候,因为不知道它会不会出错,什么时候完成!不过比较happy的是,我们的算法性能基本达到了tk1的一倍(虽然tk1的性能我们已经很满足了).

完!
2016年4月

posted @ 2017-10-14 10:20 rongpmcu 阅读(...) 评论(...) 编辑 收藏