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-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-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-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让其生效.
再次购买了一块tx1,上电还是一如既往的显示器没反应,这我就奇怪了,因为我已经是1080P的显示器了。经过反复折腾(换hdmi-dvi直连线、换hdmi经过hdmi转vga接显示器vga口等等),后来发现让它启动1分钟后,插拔板子上的HDMI接口,显示器就亮了(这个方法还是之前在论坛上看到的),在折腾的过程中可以发现连接上的网口灯是正常工作的,连接上的键盘使可以操作的,这说明板子至少是没问题的;另外装上系统后,1600x900的显示器可以工作了,我认为是之前没装图形界面导致的,估计还是可以通过nomodeset解决,再次懒得验证了;最后一点要补充的,这次的系统默认没有图形环境,需要安装下,操作步骤和nvidia tk1使用记录--基本环境搭建里所描述的一样。
搭建tx1的过程是痛苦的(经历过3次qt编译、三次opencv编译!!!),特别是等待它编译的时候,因为不知道它会不会出错,什么时候完成!不过比较happy的是,我们的算法性能基本达到了tk1的一倍(虽然tk1的性能我们已经很满足了).
完!
2016年4月