前言

  之前有专门写过一篇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. bzoj5127[Lydsy12月赛]数据校验

    多少年不写题解了 题目描述: 著名出题人小 Q 出了一道题,这个题给定一个正整数序列 a1, a2, ..., an,并保证输入数据中,对于 a 的任意一个非空连续子区间 [l, r],该区间内出现过 ...

  2. 【Java并发编程】之四:守护线程与线程阻塞的四种情况

    守护线程 Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) ​ 用户线程即运行在前台的线程,而守护线程是运行在后台的线程. 守护线程作用是为其他前台线程 ...

  3. Contest 7

    A:搜索好难啊根本不会啊. B:原题都能写挂没救了啊.考虑求出每个数作为最小值时能向左向右扩展到的最远位置,那么这段区间里的所有数就不可能作为唯一的最小值成为最优解了,否则假设可以的话这段区间里的数都 ...

  4. 《Unix网络编程卷1:套接字联网API》读书笔记

    第一部分:简介和TCP/IP 第1章:简介 第2章:传输层:TCP.UDP和SCTP TCP:传输控制协议,复杂.可靠.面向连接协议 UDP:用户数据报协议,简单.不可靠.无连接协议 SCTP:流控制 ...

  5. Django对应的路由名称

    1. 名字很长,修改起来很麻烦 2.Django提供了一种方法 在urls.py中修改了名字以后,html中会自动对应做修改.这样提交表单的时候就会比较方便了.跳转到写死的某个URL. 3.根据名字i ...

  6. castle activerecord 学习过程出现的问题

    优点: 1.CRUD:代码简洁 2.不用配置map 3.自带事务方便 4.自带IOC 5.自带 数据有效性验证 缺点: 1.自增长(Oracle 一直提示序号不存在,有空继续尝试) 2.多条件,直接用 ...

  7. 【BZOJ2115】Xor(线性基)

    [BZOJ2115]Xor(线性基) 题面 BZOJ Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si ...

  8. Python2和Python3共存安装

    记录下: 先下载Python2.7.6,安装完成,不要添加到path中: 再下载Python3.4.3,安装,不要添加到path中. 进入 Python2: py -2 进入Python3: py - ...

  9. 题解 P2598 【[ZJOI2009]狼和羊的故事】

    P2598 [ZJOI2009]狼和羊的故事 题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼 ...

  10. 基于JavaSE阶段下的集合类汇总

    一.数组与集合的区别 数组和集合都是用来存储对象的容器,但是,数组只能储存基本数据类型的对象,且长度不可变:而集合是储存引用数据类型的对象,且长度可变,所以,在不知对象数量的具体数值时一般用集合来存储 ...