【Xilinx-Petalinux学习】-04-OpenCV的移植
交叉编译PC平台 VMware12, CentOS 6.5 32 bit
在VMware中安装CentOS,用户名:xilinx-arm-opencv 密码:root
至于这里为什么用CentOS,而不是Ubuntu,是因为CentOS的内核可以支持V4L,而Ubuntu因为内核版本较高,已经没有了V4L的支持,只有V4L2。
总之为了方便还是再安装一个CentOS的虚拟机吧。
step1: 安装包、工具下载
首先下载各种依赖库源文件和工具。提到的都是我用到的版本,已经验证过,都是可以互相配合可用的。
OpenCV依赖库:
zlib-1.2.7.tar.gz
jpegsrc.v9b.tar.gz
libpng-1.5.14.tar.gz
last_stable_x264.tar.bz2 (x264-snapshot-20161127-2245-stable)
xvidcore-1.3.2.tar.gz
tiff-4.0.7.tar.gz
ffmpeg-0.10.16.tar.bz2
到时候这些依赖库需要按照上面的顺序安装。
交叉编译工具:
xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin
可百度去搜索下载,也可以用下面位大侠共享的网盘。网址:http://pan.baidu.com/share/link?shareid=2118817891&uk=2047711911&fid=131808308022716
还可以从网上下载较新版本的源码,但我还没有搞懂怎么去用。网址:https://www.xilinx.com/guest_resources/member/mb_gnu/xilinx-2015.05-17-arm-xilinx-linux-gnueabi.src.tar.bz2
OpenCV:
opencv-2.4.9
从官网下载Linux 32 bit版本的源码就可以了
step2: 交叉编译工具的安装
首先安装交叉编译工具需要用到的一些依赖库:
$ su -
yum update
yum install glibc-devel.i686
yum install gtk2-devel.i686
yum install libcanberra.i686
yum install libcanberra-gtk2.i686
yum install PackageKit-gtk-module.i686
yum install GConf2.i686
yum install ncurses-libs.i686
yum install xulrunner.i686
再来安装交叉编译工具。
复制 xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin 安装包到Linux中,运行:
./xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin
就会弹出类似Windows安装软件一样的界面,一直点Next直到安装成功。
接着添加环境变量,运行命令:
gedit ~/.bashrc
#在文件最后加入下面几行文本
export ARCH=arm
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
export PATH=/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/:$PATH
#保存并退出
#source
source ~/.bashrc
这样,我们就能够直接调用 arm-xilinx-linux-gnueabi-gcc指令了。
假如需要更新版本,卸载当前版本的话,运行:
/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/uninstall/Uninstall_Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/Uninstall_Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux
step3: 交叉编译OpenCV需要的依赖库
先创建用来保存依赖库和OpenCV库的文件夹,执行命令:
#新建安装目录
mkdir -p /usr/local/arm/opencv-lib
mkdir -p /usr/local/arm/opencv-arm
#添加环境变量
export ZYNQ_CV_INSTALL=/usr/local/arm/opencv-lib
export CC=arm-xilinx-linux-gnueabi-gcc
解压所有的依赖库源代码,然后分别进入各个源码的文件夹进行交叉编译。一定要按照顺序安装,因为它们之间也有依赖关系。
zlib安装
./configure --prefix=$ZYNQ_CV_INSTALL --shared
make
make install
jpeg安装
./configure --prefix=$ZYNQ_CV_INSTALL --host=arm-xilinx-linux-gnueabi --enable-shared
make
make install
libpng安装
./configure --prefix=$ZYNQ_CV_INSTALL --host=arm-xilinx-linux-gnueabi --enable-arm-neon --enable-shared --with-pkgconfigdir=$ZYNQ_CV_INSTALL/lib/pkgconfig LDFLAGS=-L$ZYNQ_CV_INSTALL/lib CPPFLAGS=-I$ZYNQ_CV_INSTALL/include
make
make install
x264安装
./configure --host=arm-linux --cross-prefix=arm-xilinx-linux-gnueabi- --enable-shared --disable-asm --prefix=$ZYNQ_CV_INSTALL
make
make install
xvidcore安装
cd build/generic/
./configure --prefix=$ZYNQ_CV_INSTALL --host=arm-xilinx-linux-gnueabi --disable-assembly
make
make install
tiff安装
./configure --prefix=$ZYNQ_CV_INSTALL --host=arm-xilinx-linux-gnueabi --enable-shared LDFLAGS=-L$ZYNQ_CV_INSTALL/lib CFLAGS=-I$ZYNQ_CV_INSTALL/include
make
make install
ffmpeg安装
./configure --prefix=$ZYNQ_CV_INSTALL --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-xilinx-linux-gnueabi-gcc --enable-swscale --extra-cflags=-I$ZYNQ_CV_INSTALL/include --extra-ldflags=-L$ZYNQ_CV_INSTALL/lib --disable-asm
make
make install
为了在编译OpenCV时确保ffmpeg的正常链接,需要添加PKG_CONFIG_PATH环境变量
gedit /etc/bashrc
#在文件最后添加如下内容
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$ZYNQ_CV_INSTALL/lib/pkgconfig
export PKG_CONFIG_PATH
#保存并退出
#source
source /etc/bashrc
这些我都试了很多遍了,就按照上面的方法配置、编译和安装即可,就不去详细的说明各个配置参数的意义了。
step4: 交叉编译OpenCV 2.4.9
安装cmake:
yum install cmake
yum install cmake-gui
解压OpenCV 2.4.9源码,进行配置:
#进入文件夹
cd opencv-2.4.9
#建立并进入编译文件夹
mkdir build
cd build #创建文件
gedit toolchain.cmake
#修改文件,在其中加入如下内容:
###########user defined#############
set( CMAKE_SYSTEM_NAME Linux )
set( CMAKE_SYSTEM_PROCESSOR arm )
set( CMAKE_C_COMPILER arm-xilinx-linux-gnueabi-gcc )
set( CMAKE_CXX_COMPILER arm-xilinx-linux-gnueabi-g++ )
###########user defined#############
set( CMAKE_FIND_ROOT_PATH "/usr/local/arm/opencv-lib" )
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
######################################
#保存并退出 #添加LDFLAGS环境变量
export LDFLAGS=-Wl,-rpath-link,/usr/local/arm/opencv-lib/lib #在CentOS中,使OpenCV支持V4L
cp /usr/include/linux/videodev.h /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/usr/include/linux/ #cmake
cmake -D CMAKE_TOOLCHAIN_FILE=toolchain.cmake -D CMAKE_INSTALL_PREFIX=/usr/local/arm/opencv-arm ../ #cmake配置
cmake-gui
接着就打开了cmake-gui的配置界面,在里面可以配置opencv的编译选项。
在cmake GUI中,勾选 Grouped 和 Advanced 选项框,核对以下信息:
1. 源码与安装目录。需要跟下面一模一样
Where is the source code: /home/xilinx-arm-opencv/PetaLinux/package/opencv/opencv-2.4.9
Where to build the binaries: /home/xilinx-arm-opencv/PetaLinux/package/opencv/opencv-2.4.9/build
2. CMAKE项。需要跟下面一模一样
CMAKE_INSTALL_PREFIX : /usr/local/arm/opencv-arm
CMAKE_EXE_LINKER_FLAGS : -Wl,-rpath-link,/usr/local/arm/opencv-lib
CMAKE_C_COMPILER : /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/arm-xilinx-linux-gnueabi-gcc
CMAKE_CXX_COMPILER : /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/arm-xilinx-linux-gnueabi-g++
3.WITH项。只勾选如下选项,其他都不勾选
WITH_FFMPEG
WITH_JASPER
WITH_JPEG
WITH_OPENEXR
WITH_PNG
WITH_TIFF
WITH_V4L
界面如下图:
配置完成后点击Configure按钮,会打印出如下信息:(特别需要注意标红的LOG信息与我的是否相同!)
General configuration for OpenCV 2.4.9 =====================================
Version control: unknown
Platform:
Host: Linux 2.6.32-431.el6.i686 i686
Target: Linux arm
CMake: 2.8.12.2
CMake generator: Unix Makefiles
CMake build tool: /usr/bin/gmake
Configuration: Release
C/C++:
Built as dynamic libs?: YES
C++ Compiler: /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/arm-xilinx-linux-gnueabi-g++ (ver 4.6.1)
C++ flags (Release): -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -O3 -DNDEBUG -DNDEBUG
C++ flags (Debug): -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -g -O0 -DDEBUG -D_DEBUG
C Compiler: /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/arm-xilinx-linux-gnueabi-gcc
C flags (Release): -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -O3 -DNDEBUG -DNDEBUG
C flags (Debug): -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -g -O0 -DDEBUG -D_DEBUG
Linker flags (Release): -Wl,-rpath-link,/usr/local/arm/opencv-lib
Linker flags (Debug): -Wl,-rpath-link,/usr/local/arm/opencv-lib
Precompiled headers: YES
OpenCV modules:
To be built: core flann imgproc highgui features2d calib3d ml video legacy objdetect photo gpu nonfree contrib stitching superres ts videostab
Disabled: world
Disabled by dependency: -
Unavailable: androidcamera dynamicuda java ocl python viz
GUI:
QT: NO
GTK+ 2.x: NO
GThread : NO
GtkGlExt: NO
OpenGL support: NO
VTK support: NO
Media I/O:
ZLib: /usr/local/arm/opencv-lib/lib/libz.so (ver 1.2.7)
JPEG: /usr/local/arm/opencv-lib/lib/libjpeg.so (ver 90)
PNG: /usr/local/arm/opencv-lib/lib/libpng.so (ver 1.5.14)
TIFF: /usr/local/arm/opencv-lib/lib/libtiff.so (ver 42 - 4.0.7)
JPEG 2000: build (ver 1.900.1)
OpenEXR: build (ver 1.7.1)
Video I/O:
DC1394 1.x: NO
DC1394 2.x: NO
FFMPEG: YES
codec: YES (ver 53.61.100)
format: YES (ver 53.32.100)
util: YES (ver 51.35.100)
swscale: YES (ver 2.1.100)
gentoo-style: YES
GStreamer: NO
OpenNI: NO
OpenNI PrimeSensor Modules: NO
PvAPI: NO
GigEVisionSDK: NO
UniCap: NO
UniCap ucil: NO
V4L/V4L2: YES/YES
XIMEA: NO
Xine: NO
Other third-party libraries:
Use IPP: NO
Use Eigen: NO
Use TBB: NO
Use OpenMP: NO
Use GCD NO
Use Concurrency NO
Use C=: NO
Use Cuda: NO
Use OpenCL: NO
Python:
Interpreter: /usr/bin/python2 (ver 2.6.6)
Java:
ant: NO
JNI: NO
Java tests: NO
Documentation:
Build Documentation: NO
Sphinx: NO
PdfLaTeX compiler: NO
Tests and samples:
Tests: YES
Performance tests: YES
C/C++ Examples: NO
Install path: /usr/local/arm/opencv-arm
cvconfig.h is in: /home/xilinx-arm-opencv/PetaLinux/package/opencv/opencv-2.4.9/build
-----------------------------------------------------------------
Configuring done
再点击Generate按钮,即完成了makefile文件的配置。关闭cmake gui界面。
最后编译并安装opencv:
#编译前需要将交叉编译好的依赖库连接或复制到交叉编译工具中去
#否则会在opencv编译时出现类似undefined reference to `png_set_strip_alpha@PNG15_0'的错误
cp -r /usr/local/arm/opencv-lib/lib/* /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/usr/lib/ #编译并安装
make
make install
最终,我们完成了OpenCV的交叉编译,并得到了两个文件夹的文件,分别是:
#opencv依赖库
/usr/local/arm/opencv-lib
#opencv库
/usr/local/arm/opencv-arm
通过它们,就可以编译和运行我们Zynq板的PetaLInux中运行opencv程序了。
下一次再记录如何使用我们编译好的库文件。
【Xilinx-Petalinux学习】-04-OpenCV的移植的更多相关文章
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- JavaScript学习04 对象
JavaScript学习04 对象 默认对象 日期对象Date, 格式:日期对象名称=new Date([日期参数]) 日期参数: 1.省略(最常用): 2.英文-数值格式:月 日,公元年 [时:分: ...
- Java虚拟机JVM学习04 类的初始化
Java虚拟机JVM学习04 类的初始化 类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始 ...
- Thinkphp学习04
原文:Thinkphp学习04 一.ThinkPHP 3 的输出 (重点) a.通过 echo 等PHP原生的输出方式在页面中输出 b.通过display方法输出 想分配变量可以使用as ...
- JVM学习04:类的文件结构
JVM学习04:类的文件结构 写在前面:本系列分享主要参考资料是 周志明老师的<深入理解Java虚拟机>第二版. 类的文件结构知识要点Xmind梳理
- OpenCV学习(22) opencv中使用kmeans算法
kmeans算法的原理参考:http://www.cnblogs.com/mikewolf2002/p/3368118.html 下面学习一下opencv中kmeans函数的使用. 首先我们 ...
- 创芯Xilinx Microblaze 学习系列第一集
创芯Xilinx Microblaze 学习系列第一集 Xilinx ISE Design Suite 13.2 The MicroBlaze™ embedded processor soft cor ...
- Xilinx SDSoc 加载opencv库
Xilinx SDSoc 加载opencv库需要下载两个文件 xfopencv 和 Revision Platform, Revision Platform需要和具体的开发板型号对应,我用的是zcu1 ...
- vue学习04 v-on指令
vue学习04 v-on指令 v-on的作用是为元素绑定事件,比如click单击,dbclick双击 v-on指令可简写为@ 代码测试 <!DOCTYPE html> <html l ...
随机推荐
- Windows修改hosts文件及位置
文件位置 C:\Windows\System32\drivers\etc 中的hosts文件 修改方式 指定IP 域名 192.168.66.7 www.baidu.com
- Android AudioPolicyService和AudioPolicyManager
AudioPolicyService是Android音频系统的两大服务之一,另一个服务是AudioFlinger,这两大服务都在系统启动时有 MediaSever加载,加载的代码位于:framewor ...
- plsql找外键约束关联的表的方法
直接Ctrl + 鼠标左键 表名 就可以找到参照表(关联表)的名称 下面的是复杂的方法 这个就是关联的表 这里右键查看 可以查看到参照的表
- LINQ To SQL && Lambda 使用方法小结 (转)
1. 查询Student表中的所有记录的Sname.Ssex和Class列.select sname,ssex,class from studentLinq: from s in Students ...
- springMVC和json结合传递数据
1. 新建web project 2. 增加jar 3. 改写web.xml <?xml version="1.0" encoding="UTF-8"?& ...
- Delphi天气预报查询
Delphi天气预报查询 天气预报接口api(中国天气网) 开源免费天气预报接口API以及全国所有地区代码!!(国家气象局提供) 真正的中国天气api接口xml,json(求加精) ...
- javascript 闭包理解例子
function Jquery(){ this.name = 'ysr'; this.sex = 'man'; return { x: this, age : 26 } } var b = new J ...
- cakephp 2.0 源码解读(一)
lib - Cake -basic.php -bootstrap.php -Cache -Config -Configure -Controller -Core -Error -Event -I18n ...
- Python+Selenuim测试网站,只能打开Firefox浏览器却不能打开网页的解决方法
最开始我使用的Selenium版本为2.48,Firefox版本为37,自动化打开网站的时候,可以正常打开. 后来由于Firefox的自检测更新,版本更新为47,导致版本不兼容,自动化打开网站浏览器时 ...
- Horizon/DomainWorkFlow
https://wiki.openstack.org/wiki/Horizon/DomainWorkFlow