下载安装通用交叉编译器
本教程是基于I.MX6ull的教程进行移植的,对应使用的版本是petalinux2018.3。如果大家的使用的petalinux版本为18.3的话,是可以直接使用Petalinux自带的交叉编译器。当然也可以使用的linaro官方提供的交叉编译器的版本7.3.1版本。
1.1下载通用交叉编译器
首先要下载上一小节说的版本号linaro官方提供的交叉编译器的版本7.3.1,下载地址:https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/arm-linux-gnueabihf/。

这里使用的7020是32位的,所以下载的32位的即可。
1.2安装通用交叉编译器
将下载好的通用交叉编译器压缩包拷贝到Ubuntu虚拟机,解压进行安装。
在Ubuntu目录下创建/usr/local/arm文件夹,为下面安装到/usr/local/arm这个文件夹做准备。
sudo mkdir/usr/local/arm
解压交叉编译器压缩包至/usr/local/arm目录下,稍等片刻,解压完成如下。
sudo tar xf gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabihf.tar.xz-C /usr/local/arm/
使用vi指令编辑/etc/profile这个文件。
sudo vi /etc/profile
打开/etc/profile以后,在末尾添加如下所示内容。
exportPATH=$PATH:/usr/local/arm/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabihf/bin

添加完成如下图,保存退出,重启系统。
1.3验证通用交叉编译器
要使用此编译器,还要在Ubuntu上安装一些库。
sudo apt-get installlsb-core lib32stdc++6
在1.2小节修改环境变量重启系统后,在终端输入arm-linux-gnueabihf-gcc -v来查看安装的交叉编译器版本号。看到如下结果,表明成功!
arm-linux-gnueabihf-gcc -v

获取和编译tslib
要想Qt支持触摸还需要编译tslib,以生成触摸相关插件。Tslib一般在嵌入式系统时用的多,基本的触摸插件都是它。当然还有xinput这样的插件,那是用于桌面系统的。嵌入式Qt一般用的都是Tslib。
2.1验证通用交叉编译器
获取 tslib 的源码,git 地址为https://github.com/kergoth/tslib。
将压缩包发送到 Ubuntu 中并解压,得到名为“tslib-1.21”的目录,此目录下就是 tslib 源码。注意github有可能被更新源码导致出现bug。请使用资料盘里的tslib-1.21源码。
拷贝至Ubuntu虚拟机目录下,将其解压,得到tslib-1.21文件夹。
tar xf tslib-1.21.tar.gz
进入tslib-1.21文件夹下。
cd tslib-1.21

2.2编译tslib
生成Makefile,还需要安装以下软件。
sudo apt-get update
sudo apt-get installautoconf automake libtool
./autogen.sh
执行autogen.sh生成Makefile,以编译源码。

执行下面的指令指定我们上面第一章安装交叉编译工具与tslib编译输出路径/home/用户名/tools/tslib-1.21/arm-tslib。复制时请注意,下面是一条指令不分行,建议分段复制。注意不要多写空格。指令会检查编译器等是否会工作,如下图。
./configure --host=arm-linux-gnueabihf ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/home/用户名/tools/tslib-1.21/install

直接执行make编译及makeinstall安装。
make
make install
编译出现警告不用理会以,安装完成后在当前目录下生成一个install目录。也是我们上面指令的编译输出目录路径。可以查看生成目录下有以下内容。

查看编译的tslib文件类型,使用file指令。编译出来的tslib应为ARM格式,不能为X86格式,如果是X86格式就不能用于ARM开发板上了。那么说明你上一章的ARM交叉编译器环境没生效。请删除重新编译!
file bin/ts_test_mt

3.1编译ARM平台Qt5.12.12源码
本章简介如何下载Qt源码。编译出相应的Qt库。在Windows平台下的库,后缀一般都是dll,Linux平台的库后缀都是so。我们能看到的这些库都叫动态库。运行Qt应用程序就需要链接到这些动态库上面。正是因为有这些库的存在,Qt应用程序才能正常运行。
3.1.1 下载Qt5.12.12源码
我们可以在Qt下载地址https://download.qt.io/找到https://download.qt.io/archive/qt/5.12/5.12.12/single/,进入下载页面如下:

在Windows上下载好上面qt-everywhere-src-5.12.12.tar.xz源码拷贝到Ubuntu虚拟机下,或者直接右键上面的下载项,复制下载地址链接,在Ubuntu下直接使用wget指令下载。
在Ubuntu使用wget指令下载qt-everywhere-src-5.12.12.tar.xz源码如下。如果觉得慢,就在Windows下复制下载链接地址使用迅雷下载再拷贝到Ubuntu虚拟机吧!
wget https://download.qt.io/archive/qt/5.12/5.12.12/single/qt-everywhere-src-5.12.12.tar.xz
解压下载好的qt-everywhere-src-5.12.12.tar.xz源码压缩包。解压时间较长,请耐心等待。
tar -xfqt-everywhere-src-5.12.12.tar.xz -C ~/tools/
在当前目录出现qt-everywhere-src-5.12.12目录夹,此文件夹就是我们解压后的目录。进入此目录。
cd qt-everywhere-src-5.12.12/
3.1.2 修改qmake.conf
编辑mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf,配置相关编译器及路径。
vi 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
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS += -O2 -mcpu=cortex-a9
QMAKE_CXXFLAGS += -O2 -mcpu=cortex-a9
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = arm-linux-gnueabihf-gcc
QMAKE_CXX = arm-linux-gnueabihf-g++
QMAKE_LINK = arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = arm-linux-gnueabihf-g++
# modifications to linux.conf
QMAKE_AR = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy
QMAKE_NM = arm-linux-gnueabihf-nm -P
QMAKE_STRIP = arm-linux-gnueabihf-strip
load(qt_config)
3.1.3 配置编译选项
查看编译选项,输入./configure -help指令,查看可配置选项。
./configure -help
由于配置较长,按需要编译,这里写了一个脚本。大家可以根据下面的步骤去建立一个脚本然后复制一下的内容。
./configure -prefix $(pwd)/../arm-qt\
-opensource \
-confirm-license \
-release \
-strip \
-shared \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-c++std c++11 \
--rpath=no \
-pch \
-skip qt3d \
-skip qtactiveqt \
-skip qtandroidextras \
-skip qtcanvas3d \
-skip qtconnectivity \
-skip qtdatavis3d \
-skip qtdoc \
-skip qtgamepad \
-skip qtlocation \
-skip qtmacextras \
-skip qtnetworkauth \
-skip qtpurchasing \
-skip qtremoteobjects \
-skip qtscript \
-skip qtscxml \
-skip qtsensors \
-skip qtspeech \
-skip qtsvg \
-skip qttools \
-skip qttranslations \
-skip qtwayland \
-skip qtwebengine \
-skip qtwebview \
-skip qtwinextras \
-skip qtx11extras \
-skip qtxmlpatterns \
-make libs \
-make examples \
-nomake tools \
-nomake tests \
-gui \
-widgets \
-dbus-runtime \
--glib=no \
--iconv=no \
--pcre=qt \
--zlib=qt \
-no-openssl \
--freetype=qt \
--harfbuzz=qt \
-no-opengl \
-linuxfb \
--xcb=no \
-tslib \
--libpng=qt \
--libjpeg=qt \
--sqlite=qt \
-plugin-sql-sqlite \
-I$HOME/tools/tslib-1.21/install/include \
-L$HOME/tools/tslib-1.21/install/lib \
-recheck-all
赋予脚本可执行权限。
chmod +x autoconfigure.sh
直接执行autoconfigure.sh。配置需要一段时间,请耐心等待!
sudo apt-get install g++ // 配置前请先安装g++
./autoconfigure.sh

配置成功

3.1.4 开始编译Qt5.12.12源码
直接执行make开始编译。
time (make -j 16) // -j 16 代表最多允许 16 条编译指令同时运行,参数16,一般为个人分配给虚拟机的核心数的2倍,前面加个time是测试编译时间。
编译完成后,执行安装指令后,查看安装后的内容。
make install
ls arm-qt

至此,ZYNQ系列的Qt移植就完成了。如果移植遇到问题,可以评论或者私信找我要移植原文件,或者交流,移植文件是两个月之前的,最近在做学习PL相关内容,PS暂时摆烂了。