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让其生效.
几个需要注意的地方
- tx1刚拆箱,接上电源,hdmi,按下power按钮,风扇转一下就没转了,显示器半天都没反应,这显示器接tk1还好好的.后来发现是这显示器不支持(该显示器最大分辨率为1600x900),换了一个1080p显示器就可以了,另外风扇只有在负载很高,也就是它觉得需要转的时候才转,比如跑个cuda程序,全线程编译过程中都会转起来.至于显示器的问题我觉得是可以支持到1600x900吧,可能需要修改下内核选项,比如增加nomdeset到cmdline,不过我没尝试了,以前遇到过,也解决过,没兴趣再解决了,除非我这个1080p显示器坏了_;
- tx1自带的系统版本是是23.2,也就是当前(2016/04)最新的,所以不需要我们再安装了;
- tx1自带的flash只有16GB,真要自己编译、安装上面那些软件包,可能会发现空间不够.可以将root区装到外接的sata盘上,这个不难,也就不详细说明!主要说一下怎么修改tx1,让其启动时挂载sata分区为root.其实就修改一下tx1 系统里boot目录下的一个conf文件,将root=xxx改为root=/dev/sda即可;
- 我是因为特殊需要,只好重新编译的.如果nvidia提供的opencv和仓库里面的qt安装包已经满足了你的要求,那么就不要自己编译啦,一方面,复杂;另一方面,nvidia的opencv版本增加了自己cpu的优化,性能可能更好;
- 如果你想用tx1的wifi来完成以上网络操作的话,记得一定要接上它自带的天线,不然速度慢的完全无法接受的_
- 系统更新程序如果弹出,提示你更新的时候,我建议暂时先不要更新.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使用记录--基本环境搭建的更多相关文章
- nvidia tk1使用记录--基本环境搭建
前言 项目最开始是在X86+Nvidia(ubuntu+opencv+cuda)平台上实现,达到了期望性能,最近考虑将其移植到嵌入式平台,特别是最近nvidia出了tegra X1,基于和我们使用的g ...
- 【golang学习记录】环境搭建
[golang学习记录]环境搭建 一. 概述 本文是[golang学习记录]系列文章的第一篇,安装Go语言及搭建Go语言开发环境,接下来将详细记录自己学习 go 语言的过程,一方面是为了巩固自己学到的 ...
- 开启我的Android之旅-----记录Android环境搭建遇到的问题
在现在这个离不开手机的时代,对于手机APP的开发也是一个很大的市场,所以自己也想去探一探手机APP开发,在我们进行Android开发的第一步就是搭建环境,具体怎么搭建我就不说,这里记录一下在搭建环境的 ...
- 1、大型项目的接口自动化实践记录--robotframework环境搭建
因为人力.团队技术问题,选用robotframework来做自动化,首先说下环境搭建 齐涛道长的入门教程非常棒:http://blog.csdn.net/tulituqi/article/detail ...
- 自己记录java环境搭建之-maven
简述: 现需要在Eclipse中配置Maven插件,同时安装maven应用,配置Maven环境变量,建立Maven管理的工程,并用Maven导入Gson包, 编写简易Json输出程序 步骤: 1. 首 ...
- QT学习记录之环境搭建
作者:朱金灿 来源:http://blog.csdn.net/clever101 1. 安装qt-win-opensource-4.8.5-vs2008.exe(对应的IDE是VS2008),安装路径 ...
- Springboot学习记录1--概念介绍以及环境搭建
摘要:springboot学习记录,环境搭建: 官方文档地址:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/ht ...
- 深度学习环境搭建:window10+CUDA10.0+CUDNN+pytorch1.2.0
去年底入手一台联想Y7000P,配置了Nvidia GeForce GTX 1660 Ti GPU,GPU内存6G,但是因为有GPU服务器,所以一直没有在这台笔记本上跑过模型,如今经过一番折腾,终于在 ...
- Windebug双机调试环境搭建
Windebug双机调试环境搭建 开始进行内核编程/驱动编程的调试工作是非常烦人的,由于程序运行与内核层不受操作系统的管控,所以容易引起主机蓝屏和崩溃是常有的事.这也就使得内核程序的调试成了一大 ...
随机推荐
- Tomcat+JDK安装和配置
Tomcat+JDK安装和配置 一.打开FlashFXP软件,建立连接,选择需要的包,右击传输到 /home/guest中 二.进入到:cd /home/guest中,对tomcat包进行解压 三.将 ...
- OSPF协议介绍及配置 (下)
4.特殊区域详解 为了让我们的讲解更加的通俗易懂,我们看上面这个拓扑,这是一个根据客户业务逻辑结构所涉及的OSPF网络,共有三个区域(实际上远远不止),骨干区域area0为一级行及二级行所部署,*** ...
- 考研路茫茫――单词情结 HDU - 2243(ac自动机 + 矩阵快速幂)
考研路茫茫——单词情结 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hihoCoder #1639 图书馆
题目大意 给定 $n$($1\le n\le 1000$)个正整数 $a_1, a_2, \dots, a_n$($a_i \le 10^{12}$),令 $s$ 为这 $n$ 个数之和.求 $$ \ ...
- 【刷题】BZOJ 4573 [Zjoi2016]大森林
Description 小Y家里有一个大森林,里面有n棵树,编号从1到n.一开始这些树都只是树苗,只有一个节点,标号为1.这些树都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力.小 ...
- [TJOI2013]单词 AC自动机
题面: 洛谷 题解: 很久之前做的题了,只不过之前一直90....最近才发现是哪里写错了. 我们对字符集建AC自动机. 首先考虑一个暴力的做法,把文章当做一个长串,直接在自动机上跳,但是我们会发现,这 ...
- git clone 指定分支的内容
使用Git下载指定分支命令为:git clone -b 分支名仓库地址 使用Git下载v.2.8.1分支代码,使用命令:git clone -b v2.8.1 https://git.oschina. ...
- 改变 jq中 data-id 的值
if (_this.hasClass('default_btn_is')){ _this.removeClass('default_btn_is'); _this.addClass('default_ ...
- discuz更换域名,登录不了解决
准备工作 :因为域名更换了,因此原域名就不能再进后台了,请申请好新域名,并正确备案,让机房添加白名单,重新解析,重新绑定空间..... 完成一系列工作后,进入DZ程序修改. ------------- ...
- java rmi远程方法调用实例
RMI的概念 RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一台计算机上的对象可以调用另外一台计 ...