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

2024-06-24 07:32

本文主要是介绍基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近刚刚接触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的交叉编译。

Qt的移植与安装
很喜欢Qt这个库以及Qt creater这个IDE,其实个人觉得还蛮好用,因为现在基本都是在用瞪眼儿法找错误。

尤其喜欢Qt里面槽和信号的机制,感觉这个机制特别魔幻,特别方便,上个学年一整年的课程设计都是用Qt做的。

言归正传,先说一下,如何在Linux下安装Qt。

(一)Linux下Qt以及Qt creater的安装与使用

解压qt-everywhere-opensource-src-4.8.5.tar.gz到任意文件夹内

tar -xzvf qt-everywhere-opensource-src-4.8.5.tar.gz

cd qt-everywhere-opensource-src-4.8.5.tar

配置并指定编译安装目录/opt/qt-4.8.4

./configure -prefix /opt/qt-4.8.4

配置过程中出现如下提示,选择o回车,继续出现提示,

输入yes回车,接下来生成Makefile文件。

然后,执行make以及make install。编译过程我个人花了将近四个小时,

此时间很长。完成后添加环境变量。

gedit /etc/bash.bashrc

添加如下内容

export PATH=/opt/qt-4.8.4/bin:$PATH

export QTDIR=/opt/qt-4.8.4

export MANPATH=$QTDIR/man:$MANPATH

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

保存好后,输入source /etc/bash.bashrc使添加的环境变量生效。

接下来安装Qt-creater。进入文件夹,输入如下命令:

chmod 777 qt-creator-linux-x86-opensource-2.7.0.bin

sudo ./qt-creator-linux-x86-opensource-2.6.1.bin

接下来进入安装界面,设置安装目录以及Qt库位置,安装完成后即可使用。

(二)交叉编译Qt库及镜像制作

此部分内容可参考官方wikihttp://www.wiki.xilinx.com/Zynq+Qt+and+Qwt+Base+Libraries-Build+Instructions

先建立几个环境变量,输入如下命令:

export ZYNQ_QT_BUILD=/opt/qt-arm/build

export ZYNQ_QT_INSTALL=/opt/qt-arm/install

export PATH=$ZYNQ_QT_INSTALL/bin:$PATH

在opt内建立相应目录

cd /opt

mkdir qt-arm

cd qt-arm

mkdir build install

进入qt-everywhere-opensource-src-4.8.5.tar.gz文件夹内,解压文件到ZYNQ_QT_BUILD目录内

tar -xzvf qt-everywhere-opensource-src-4.8.5.tar.gz -C $ZYNQ_QT_BUILD

解压qt_build_src.tar文件,里面有我们需要的配置文件qmake.conf,该文件由Xilinx官方提供,命令如下:

tar xvf qt_build_src.tar

cp ./qmake.conf $ZYNQ_QT_BUILD/qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-gnueabi-g++/

因为该配置文件基于Qt4.7,为编译Qt4.8,需要修改文件内容。

gedit $ZYNQ_QT_BUILD/qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf

源文件内容如图所示:

将前三行替换为

include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/linux.conf)
include(../../common/qws.conf)

修改后文件内容如图所示:

然后对Qt进行配置

./configure -embedded arm -xplatform qws/linux-arm-gnueabi-g++ -little-endian -opensource -host-little-endian

-confirm-license -nomake demos -nomake examples -prefix $ZYNQ_QT_INSTALL

配置完成后make以及make install。

之后将Xilinx交叉编译库中的内容复制到Qt库中,输入命令:

cp -P /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/usr/lib/libstdc++.so* $ZYNQ_QT_INSTALL/lib

安装好Qt库后,需要为Zedboard制作镜像。

cd $ZYNQ_QT_BUILD

dd if=/dev/zero of=qt_lib.img bs=1M count=90 // qt-4.8.5需要90M大小作为镜像大小,根据需要可以改变count

mkfs.ext2 -F qt_lib.img

chmod go+w qt_lib.img

mount qt_lib.img -o loop /mnt

cp -rf $ZYNQ_QT_INSTALL/* /mnt

chmod go-w qt_lib.img

umount /mnt

这个qt_lib.img就是我们所需的运行库了。

这篇关于基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089527

相关文章

关于C++中的虚拟继承的一些总结(虚拟继承,覆盖,派生,隐藏)

1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class B1:public virtual A; class B2:pu

ESP32 esp-idf esp-adf环境安装及.a库创建与编译

简介 ESP32 功能丰富的 Wi-Fi & 蓝牙 MCU, 适用于多样的物联网应用。使用freertos操作系统。 ESP-IDF 官方物联网开发框架。 ESP-ADF 官方音频开发框架。 文档参照 https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/zh-cn/latest/get-started/index

揭秘未来艺术:AI绘画工具全面介绍

📑前言 随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们生活的方方面面。在艺术创作领域,AI技术同样展现出了其独特的魅力。今天,我们就来一起探索这个神秘而引人入胜的领域,深入了解AI绘画工具的奥秘及其为艺术创作带来的革命性变革。 一、AI绘画工具的崛起 1.1 颠覆传统绘画模式 在过去,绘画是艺术家们通过手中的画笔,蘸取颜料,在画布上自由挥洒的创造性过程。然而,随着AI绘画工

墨刀原型工具-小白入门篇

墨刀原型工具-小白入门篇 简介 随着互联网的发展和用户体验的重要性越来越受到重视,原型设计逐渐成为了产品设计中的重要环节。墨刀作为一款原型设计工具,以其简洁、易用的特点,受到了很多设计师的喜爱。本文将介绍墨刀原型工具的基本使用方法,以帮助小白快速上手。 第一章:认识墨刀原型工具 1.1 什么是墨刀原型工具 墨刀是一款基于Web的原型设计工具,可以帮助设计师快速创建交互原型,并且可以与团队

C++工程编译链接错误汇总VisualStudio

目录 一些小的知识点 make工具 可以使用windows下的事件查看器崩溃的地方 dumpbin工具查看dll是32位还是64位的 _MSC_VER .cc 和.cpp 【VC++目录中的包含目录】 vs 【C/C++常规中的附加包含目录】——头文件所在目录如何怎么添加,添加了以后搜索头文件就会到这些个路径下搜索了 include<> 和 include"" WinMain 和

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

C/C++的编译和链接过程

目录 从源文件生成可执行文件(书中第2章) 1.Preprocessing预处理——预处理器cpp 2.Compilation编译——编译器cll ps:vs中优化选项设置 3.Assembly汇编——汇编器as ps:vs中汇编输出文件设置 4.Linking链接——链接器ld 符号 模块,库 链接过程——链接器 链接过程 1.简单链接的例子 2.链接过程 3.地址和

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

vcpkg安装opencv中的特殊问题记录(无法找到opencv_corexd.dll)

我是按照网上的vcpkg安装opencv方法进行的(比如这篇:从0开始在visual studio上安装opencv(超详细,针对小白)),但是中间出现了一些别人没有遇到的问题,虽然原因没有找到,但是本人给出一些暂时的解决办法: 问题1: 我在安装库命令行使用的是 .\vcpkg.exe install opencv 我的电脑是x64,vcpkg在这条命令后默认下载的也是opencv2:x6

十五.各设计模式总结与对比

1.各设计模式总结与对比 1.1.课程目标 1、 简要分析GoF 23种设计模式和设计原则,做整体认知。 2、 剖析Spirng的编程思想,启发思维,为之后深入学习Spring做铺垫。 3、 了解各设计模式之间的关联,解决设计模式混淆的问题。 1.2.内容定位 1、 掌握设计模式的"道" ,而不只是"术" 2、 道可道非常道,滴水石穿非一日之功,做好长期修炼的准备。 3、 不要为了