【原文:http://www.cnblogs.com/bombe1013/p/3294301.html】

刚接触XILINX的ZYNQ板,刚接触没有十天。XILINX定位它为SOC,我也很认同,起码比TI定位MPU为SOC强很多。据说今年TI的最新产品也加入了ZYNQ板。

之前的MIPS处理器设计与实现的项目就算做告一段落,搞了将近7个月,成果显著,收获颇多,最近打算搞搞ZYNQ。

之前MIPS也有一套交叉编译工具,不过是老师提供的,自己也尝试搞了搞,太辛苦了,而且也没什么成果,因为我们需要LITE版的MIPS指令集。

这次不一样,ZYNQ集成了两个ARM cortex-A9处理器,可以支持thumb指令集以及arm指令集,所以这方面的交叉编译我本以为会很容易,谁知道依旧搞了很久。

主机平台:Ubuntu12.04LTS  x86-32bit(我装的是双系统,没有在虚拟机下运行,真心不推荐在虚拟机下运行,太慢了)

目标平台:linaro(Ubuntu11.04貌似)   ARM(Xilinx Zedboard)

由于OpenCV默认下只支持AVI标准格式的打开与写入,因此需要添加很多解码与编码库的交叉编译库等文件,包括jpeg、png等等。因此,大体流程是先对需要支持的库进行交叉编译,再对OpenCV进行交叉编译并添加相应的库支持。依赖关系如下:

OpenCV
        |--------zlib                
        |--------jpeg
        |--------libpng
                    |--------zlib 
        |--------tiff
                    |--------zlib 
        |--------ffmpeg
                    |--------x264
                    |--------xvidcore
其实,看起来并不难, 但最难的就是这些源码包之间的相互支持等错综复杂的关系,基本上就是错一个动全身,笔者经过了几番的尝试,终于找到了一个在当前环境下可以成功的源码包,其版本如下:
xilinx-arm交叉编译工具:xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin
ffmpeg源码包:ffmpeg-0.10.3.tar.bz2
jpeg源码包:jpegsrc.v8d.tar.gz
png源码包:libpng-1.5.14.tar.gz
tiff源码包:tiff-4.0.3.tar.gz
x264源码包:x264-snapshot-20120528-2245-stable.tar.bz2
xvid源码包:xvidcore-1.3.2.tar.gz
zlib源码包:zlib127.zip
OpenCV源码包:OpenCV-2.4.3.tar.bz2(笔者选用的2.4.3,但是里面有个bug在Windows下用mingw32-make编译可能会报错,对于这个bug官方给的建议是升级2.4.4,选用2.4.4应该也可以,可以尝试一下,这个没bug)
Qt第三方库:qt-everywhere-opensource-src-4.8.5.tar.gz(笔者没有选用最新的5.1版本,据说这个版本增加了很多功能比如传感器等等,有兴趣可尝试)
由于其是这些库中有些很难找,笔者直接传到百度网盘,供下载http://pan.baidu.com/share/link?shareid=3831914682&uk=1092766566
需要注意的是版本一定要正确并且一定要按照以下的顺序安装,否则会出现各种错误。
 
-------------------------------------------------------------------------------------------------------------------
 
1.安装xilinx-arm交叉编译工具
xilinx-arm交叉编译工具即SourceryCodeBench,该工具是专门为32位机器设计的,所以64位机器需要下载32-bit库
sudo -s进入root权限(一定要小心,不要乱删除文件,退出exit即可)
apt-get install ia32-libs ia32-libs-gtk
然后需要将dash更改为bash,输入
dpkg-reconfigure dash
出现如图所示对话框,选择No,将dash修改为bash。
下载xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin文件,默认保存在Downloads文件夹下,保存位置任意。
输入如下命令打开文件
cd Downloads  // 打开Downloads文件夹,根据保存文件不同,此类指令任意改变,以下略去
./xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin  // 打开bin文件,由于此时为root权限,所以可以打开任意文件否则需要使用
                                                                                        // chmod命令为文件分配权限
然后弹出如下安装界面,一路accept和next,选择Typical安装以及Do not modify,安装在默认路径(/root/CodeSourcery下)

安装完成后,需要导入环境变量,也可以修改bash文件(不需要每次都导入环境变量),指令如下:

export ARCH=arm

export CROSS_COMPILE=arm-xilinx-linux-gnueabi-

export PATH=/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/:$PATH

注意:$PATH  千万不要输入错误,否则会运行不了很多命令,也可以输入

gedit /etc/bash.bashrc

如图所示,添加以下内容

保存并关闭gedit,然后输入

source /etc/bash.bashrc使当前设置立即生效,

可以通过输入echo $PATH命令检查环境变量是否设置正确,如下图:

可以,编译C文件进行测试,

使用gedit在任意目录下编辑hello.c文件如图所示,保存后进入终端。

以root身份进入到当前目录下,输入arm-xilinx-linux-gnueabi-gcc -o hello hello.c命令(该命令root身份有效)

生成hello可执行文件,输入file hello命令,hello文件信息如下,显示arm可执行文件。

此时证明arm-xilinx交叉编译工具安装正确无误,进入下一步。

在此之前建议,添加环境变量用于简单表示交叉编译库存放路径,每次启动终端都需要输入此命令

export ZYNQ_CV_BUILD=/opt/opencv/opencv-lib

使用echo $ZYNQ_CV_BUILD命令检验是否添加环境变量,再开始对依赖库的编译。

2.依赖库的交叉编译

对于依赖库的编译,都需要进行配置,当发生配置错误时可使用./configure --help命令查看帮助,以及阅读相应log文件查看编译出错原因。切记需要按照顺序编译,并且一定注意版本一致。

(1)zlib-1.2.7

  由于zlib中没有--host选项,所以需要预先声明cc变量

  unzip zlib127.zip

  cd zlib-1.2.7

  export CC=arm-xilinx-linux-gnueabi-gcc

  ./configure --prefix=$ZYNQ_CV_BUILD --shared

  make

  make install

  然后,可进入$ZYNQ_CV_BUILD/lib目录下检查是否已编译ARM环境的zlib库

  cd $ZYNQ_CV_BUILD/lib

  ls

  file libz.so.1.2.7

  如下图所示,则表明成功编译arm所需库文件,以下依赖库均可采用此种检查方式,故略去。

 

(2)jpeg-8d

  tar -xzvf jpegsrc.v8d.tar.gz

  cd jpeg-8d

  ./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --enable-shared

  make

  make install

(3)libpng-1.5.14

  libpng编译时需要zlib库的内容,所以需要LDFLAGS以及CFLAGS变量声明。

  tar -xzvf libpng-1.5.14.tar.gz

  cd libpng-1.5.14

  ./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi

  --with-pkgconfigdir=$ZYNQ_CV_BUILD/lib/pkgconfig LDFLAGS=-L$ZYNQ_CV_BUILD/lib

  CFLAGS=-I$ZYNQ_CV_INSTALL/include

  make

  make install

(4)x264-snapshot-20120528-2245-stable

tar -xjvf x264-snapshot-20120528-2245-stable.tar.bz2

  cd x264-snapshot-20120528-2245-stable

  ./configure --host=arm-linux --cross-prefix=arm-xilinx-linux-gnueabi- --enable-shared --prefix=$ZYNQ_CV_BUILD

  make

  make install

 

(5)xvidcore-1.3.2

注意此处一定要禁止汇编。

  tar -xzvf xvidcore-1.3.2.tar.gz

  cd xvidcore/build/generic   // 注意该依赖库configure在build/generic/目录下

  ./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --disable-assembly

  make

  make install

(6)tiff-4.0.3

  同理,需要添加zlib支持,因此需要声明LDFLAGS和CFLAGS变量。

  tar -xzvf tiff-4.0.3.tar.gz

  cd tiff-4.0.3

  ./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --enable-shared

  LDFLAGS=-L$ZYNQ_CV_BUILD/lib CFLAGS=-I$ZYNQ_CV_BUILD/include

  make

  make install

(7)ffmpeg-0.10.3

  ffmpeg的配置选项较多,需要添加cflas和ldflags声明。

  tar -xjvf ffmpeg-0.10.3.tar.bz2

  cd fmpeg-0.10.3

  ./configure --prefix=$ZYNQ_CV_BUILD --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_BUILD/include --extra-ldflags=-L$ZYNQ_CV_BUILD/lib --disable-asm

  make

  make install

3. OpenCV2.4.3交叉编译过程

OpenCV的安装相对容易,编译前需要安装cmake以及cmake-gui配置工具。其实该配置过程与windows下很相似,只是需要修改一些路径以及选项,并制定编译器。

sudo apt-get install cmake cmake-gui

解压OpenCV源代码

tar -xzvf opencv-2.4.3.tar.bz2

进入源代码,建立build文件夹(此步骤一定需要建立一个文件夹)

cd OpenCV-2.4.3

mkdir buid

cd build

gedit toolchain.cmake

利用新建toolchain.cmake文件,并添加如下内容:

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++ )
set( CMAKE_FIND_ROOT_PATH "/opt/opencv/opencv-lib" ) ##注意此路径与$ZYNQ_CV_BUILD路径一致且为绝对路径##
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
后四行作为交叉编译时的依赖库的查找路径。
然后进行cmake配置。
cmake -D TOOLCHAIN_FILE=tookchain.cmake ../
启动cmake-gui图形化管理工具(也可以用ccmake)
cmake-gui 
设置好源路径($ZYNQ_CV_BUILD,/opt/opencv/opencv-lib)以及编译路径(OpenCV-2.4.3\build),将不支持的东西全部去掉,只在with tiff,withjpeg,with ffmpeg,with png。单击config,出现一系列配置信息。
单击generate生成makefile文件。

make
make install
OpenCV-2.4.3的交叉编译全部结束,明天继续镜像制作以及Qt的交叉编译。

基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结【依赖库源码包】相关推荐

  1. 基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结(一)

    最近刚刚接触XILINX的ZYNQ板,刚接触没有十天.XILINX定位它为SOC,我也很认同,起码比TI定位MPU为SOC强很多.据说今年TI的最新产品也加入了ZYNQ板. 之前的MIPS处理器设计与 ...

  2. zynq linux opencv效率,2 - 基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结

    可以通过输入echo $PATH命令检查环境变量是否设置正确,如下图: 可以,编译C文件进行测试, 使用gedit在任意目录下编辑hello.c文件如图所示,保存后进入终端. 以root身份进入到当前 ...

  3. 基于CMake的交叉编译工具链配置问题总结

    在近期的工作中,因项目自动化测试需要,大量单元测试构建需要通过脚本来完成.然而目前的项目中编译器是基于GCC较老版本修改而来,因此并不能很好地支持目前的开源测试框架googletest.而且基于性能的 ...

  4. arm hisiv100 linux,hisiv100交叉编译工具链安装

    hisi交叉编译工具链安装 一.         摘要: 交叉编译简单的说,就是A机器上编译生成,运行在B机器上.那么在A机器上的编译工具安装,就是本文所要描述的内容. 工欲善其事必先利其器,所以交叉 ...

  5. hisi linux nptl.tar,hisiv100交叉编译工具链安装

    hisi交叉编译工具链安装 一.         摘要: 交叉编译简单的说,就是A机器上编译生成,运行在B机器上.那么在A机器上的编译工具安装,就是本文所要描述的内容. 工欲善其事必先利其器,所以交叉 ...

  6. arm-linux交叉编译工具链的制作(基于S3C2440)【转】

    本文转载自:http://eric-gao.iteye.com/blog/2160622 制作arm-linux交叉编译工具链一般通过crosstool工具或者crosstool-NG,前者使用方便, ...

  7. cmake:基于MDK(Keil)的Nationstech.N32G45x平台交叉编译工具链定义

    Keil MDK是非常常用的单片机开发集成环境,Keil公司2005年由ARM公司收购,现在是ARM主要的嵌入系统开发平台(ARM的另一个开发环境ds-5早在九年前就停止更新了). Keil虽然是个集 ...

  8. Mastering Embedded Linux Programming 学习 (一)嵌入式交叉编译工具链的构建,基于crosstool-NG

    Mastering Embedded Linux Programming 学习 (一) 一.ubuntu 软件包下载 sudo apt install autoconf automake bison ...

  9. imx6ull项目也是封装成脚本安装 Poky 交叉编译工具链类似ATK-STM32MP157交叉编译

    [正点原子MP157连载]第六章 ATK-STM32MP157交叉编译篇 学习 2021-05-29 10:20887阅读 · 25喜欢 · 3评论 粉丝:17.3万文章:122 关注 正点原子提供了 ...

  10. 使用 Android NDK 的交叉编译工具链移植 C/C++ 项目到安卓平台

    什么是 NDK? Android NDK 是一套可以让开发者在安卓应用开发中使用 C/C++ 实现特定模块的工具集,不是所有应用都需要用到,但是正确地使用可以有效提高应用运行效率和安全性. 为什么要在 ...

最新文章

  1. 自己动手,丰衣足食:从零开始写个 IDEA 插件,要啥功能就做啥!
  2. Python中安装模块的方法
  3. 《江南百景图》,解谜经营背后的逻辑
  4. ClickHouse 副本协同原理:ReplicatedMergeTree引擎
  5. RabbitMQ基础概念详解
  6. 移动端设备常用尺寸笔记
  7. drupal7的目录结构及术语
  8. 计算机一级举报单位,2018年9月计算机一级Photoshop考试巩固练习题(三)
  9. html5 动态 menuitem,利用HTML 5中的Menu和Menuitem元素快速创建菜单
  10. 我Python采集了新榜热门内容,原来这就是别人能成为自媒体大佬的秘密!
  11. 清华软件工程硕士放弃百万年薪后,4年狂赚1100亿,却被央视点名批评!
  12. maven项目里的ssh框架整合
  13. Un*、Id分别突变情况下单闭环直流调速系统仿真
  14. 如何在VScode中配置python第三方库
  15. 空气中弥漫着『病毒』的味道
  16. 基于zynq的千兆网udp项目_米联客 ZYNQ/SOC 精品教程 S05-CH03-UDP千兆光通信
  17. Android4.4电池电量命令行查看
  18. ui界面设计基本原则
  19. Arduino连接nRF24L01无线收发模块
  20. python爬虫自动提交HDU并获取AC状态(p3+request+Beatifulsoup)

热门文章

  1. 哪些项目适合写进Java程序员面试简历?推荐这10类
  2. 谷歌浏览器无法登陆_论坛上传图片后自动退出登陆?你不是一个人,原因及解决方法来了...
  3. JAAS和Java GSS-API
  4. 分区桌面 壁纸(正在做,常用,之后在做,临时存)
  5. oracle和plsqldev的安装,win7x64下成功安装ORACLE客户端和PLSQLDEV!
  6. KL距离,Kullback-Leibler Divergence
  7. 『Tableau』 地图显示不正确的一种可能原因
  8. 百度 AI Studio 车牌识别
  9. 不只是槓杆原理~~细说油压煞车
  10. c语言程序该不该背,C语言程序设计学习技巧