前言

  之前有专门写过一篇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月

nvidia tx1使用记录--基本环境搭建的更多相关文章

  1. nvidia tk1使用记录--基本环境搭建

    前言 项目最开始是在X86+Nvidia(ubuntu+opencv+cuda)平台上实现,达到了期望性能,最近考虑将其移植到嵌入式平台,特别是最近nvidia出了tegra X1,基于和我们使用的g ...

  2. 【golang学习记录】环境搭建

    [golang学习记录]环境搭建 一. 概述 本文是[golang学习记录]系列文章的第一篇,安装Go语言及搭建Go语言开发环境,接下来将详细记录自己学习 go 语言的过程,一方面是为了巩固自己学到的 ...

  3. 开启我的Android之旅-----记录Android环境搭建遇到的问题

    在现在这个离不开手机的时代,对于手机APP的开发也是一个很大的市场,所以自己也想去探一探手机APP开发,在我们进行Android开发的第一步就是搭建环境,具体怎么搭建我就不说,这里记录一下在搭建环境的 ...

  4. 1、大型项目的接口自动化实践记录--robotframework环境搭建

    因为人力.团队技术问题,选用robotframework来做自动化,首先说下环境搭建 齐涛道长的入门教程非常棒:http://blog.csdn.net/tulituqi/article/detail ...

  5. 自己记录java环境搭建之-maven

    简述: 现需要在Eclipse中配置Maven插件,同时安装maven应用,配置Maven环境变量,建立Maven管理的工程,并用Maven导入Gson包, 编写简易Json输出程序 步骤: 1. 首 ...

  6. QT学习记录之环境搭建

    作者:朱金灿 来源:http://blog.csdn.net/clever101 1. 安装qt-win-opensource-4.8.5-vs2008.exe(对应的IDE是VS2008),安装路径 ...

  7. Springboot学习记录1--概念介绍以及环境搭建

    摘要:springboot学习记录,环境搭建: 官方文档地址:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/ht ...

  8. 深度学习环境搭建:window10+CUDA10.0+CUDNN+pytorch1.2.0

    去年底入手一台联想Y7000P,配置了Nvidia GeForce GTX 1660 Ti GPU,GPU内存6G,但是因为有GPU服务器,所以一直没有在这台笔记本上跑过模型,如今经过一番折腾,终于在 ...

  9. Windebug双机调试环境搭建

    Windebug双机调试环境搭建    开始进行内核编程/驱动编程的调试工作是非常烦人的,由于程序运行与内核层不受操作系统的管控,所以容易引起主机蓝屏和崩溃是常有的事.这也就使得内核程序的调试成了一大 ...

随机推荐

  1. DateTime Toxxx() 方法获取时间

    直接上代码 static void Main(string[] args) { DateTime time = DateTime.Now; Console.WriteLine("ToFile ...

  2. codeforces 1027 E. Inverse coloring (DP)

    E. Inverse Coloring time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  3. 迁移数据到历史表SQL(转)

    有时工作需要需要把当前表的数据,移到历史表中,而历史表基本是以时间(年)为后缀来命名历史表的,如 A_2011,A_2012,在移数据时,要按数据的时间,移到不同的表中,且由于如果数据有同步.一次处理 ...

  4. xpath定位相邻元素方法

    在定位页面元素时,有时候需要根据某个元素特征,去定位其相邻元素/兄弟元素,或者定位其父元素的兄弟元素(或叔伯元素的子元素).这里引入xpath的两个定位方法: preceding-sibling fo ...

  5. Win10如何搭建FTP服务器以实现快速传输文件

    原文链接地址:http://blog.csdn.net/bai_langtao/article/details/77751447 Win10如何搭建FTP服务器以实现快速传输文件?相信大家在工作或生活 ...

  6. BZOJ1264 [AHOI2006]基因匹配Match 【LCS转LIS】

    题目链接 BZOJ1264 题解 平凡的\(LCS\)是\(O(n^2)\)的 显然我们要根据题目的性质用一些不平凡的\(LCS\)求法 这就很巧妙了,, 我们考虑\(A\)序列的每个位置可能匹配\( ...

  7. LUCAS定理简述

    Lucas定理解决的是n,m比较大而p是小于100000质数 简而言之就是Lucas(n,m)=C(n%p,m%p)*Lucas(n/p,m/p)%p; 其中组合数C是用任意一种计算10五次方内取模的 ...

  8. CF932E Team Work——第二类斯特林数

    题解 n太大,而k比较小,可以O(k^2)做 想方设法争取把有关n的循环变成O(1)的式子 考虑用公式: 来替换i^k 原始的组合数C(n,i)一项,考虑能否和后面的系数分离开来,直接变成2^n处理. ...

  9. python基础----__setitem__,__getitem,__delitem__

    class Foo: def __init__(self,name): self.name=name def __getitem__(self, item): print(self.__dict__[ ...

  10. 【莫队】【P3834】 【模板】可持久化线段树 1(主席树)

    大家好,我是个毒瘤,我非常喜欢暴力数据结构,于是我就用莫队+分块过了这个题 Solution 发现这个题静态查询资瓷离线,于是考虑莫队. 在这里简单介绍一下莫队: 将所有询问离线后,对原序列分块.按照 ...