Zedboard移植QT

参照《嵌入式系统软硬件协同设计实战指南》这本书第十四章 系统级设计案例的14.2.7节 在ZedBoard上运行QT程序。

一、关于QT在PC Ubuntu上的安装与使用
一个简单的例子可以参照 懒兔子 ZedBoard学习手记(八) 更大的目标!在Linux下开发图形用户界面,建立一个简单的工程,编译后生成的可执行文件效果如下图:

工程文件夹下的源文件如下:

作为Zedboard移植的测试工程

二、Zedboard移植QT

最好的参考是官方文档,本文仅仅进行一些补充说明。

在进行QT移植配置之前,要确保交叉编译环境已经配置好;获取su权限;

1. 配置环境变量:
对/etc/bash.bashrc文件进行修改,添加qt编译的环境变量:
export ZYNQ_QT_BUILD=/home/linux/Zynq_qt_build
export ZYNQ_QT_INSTALL=/home/linux/Zynq_qt_build/install
export PATH=$ZYNQ_QT_INSTALL/bin:$PATH

其中/home/linux/Zynq_qt_build/install为QT的安装目录。
注意:为了移植的方便,此处的安装目录尽量简单

2. 相关文件准备:
下载Xilinx提供的Qt Lib源码包和相关的配置文件版本为4.7,下载地址将qt_build_src.tar放在/home/linux/Zynq_qt_build目录下,进行解压:

cp /path/to/download/qt_build_src.tar /home/linux/Zynq_qt_build/qt_build_src.tar
tar xvf qt_build_src.tar

解压后可以得到几个文件,其中qt-everywhere-opensource-src-4.7.3.tar.gz和qmake.conf是Zedboard移植QT配置时所需要的文件;

解压qt-everywhere-opensource-src-4.7.3.tar.gz:
cd $ZYNQ_QT_BUILD
tar xzfv qt-everywhere-opensource-src-4.7.3.tar.gz
cd qt-everywhere-opensource-src-4.7.3.tar.gz

3. 工具链配置
需要配置文件对qmake依赖的工具链进行指定,为生成Makefile做准备,使用官网提供的qmake_4.7.3.conf文件即可,把它复制到mkspecs/qws/linux-arm-gnueabi-g++/文件夹下:

cp /path/to/downloaded/qmake_4.7.3.conf mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf

4. Makefile文件配置
配置QT生成Makefile文件,使用配置文件和指定的工具链:
./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

官方文档对于一些参数进行的解释:
-xplatform 指定环境的目标平台进行交叉编译使用的mkspec文件
-embedded 目标平台的CPU架构
-prefix
交叉编译QT的安装路径
-confirm-license 在配置过程中,可以节省同意许可协议的懒惰选项(本句直译)

5. 生成和安装:
make
make install

6. 制作镜像文件
制作Zedboard可挂载的QT运行库镜像;

将Xilinx交叉编译器中的基础C++库复制到QT的安装目录下:
cp -P /path/to/cross/compiler/arm-xilinx-linux-gnueabi/libc/usr/lib/libstdc++.so* $ZYNQ_QT_INSTALL/lib

制作qt_lib.img镜像:
cd $ZYNQ_QT_BUILD
dd if=/dev/zero of=qt_lib.img bs=1M count=80
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镜像已经生成了

7. Zedboard移植QT工程交叉编译
将之前QT的测试工程文件夹helloworld**复制**一份,据说交叉编译以后原来的工程就无法在PC上打开了。在工程所在的文件夹下,进行交叉编译:
qmake -project
qmake
make

成功编译后会生成与文件夹同名的可执行文件helloworld,交叉编译后的工程文件夹内容如下:

8. Zedboard移植QT测试
将可执行文件helloworld,QT运行库镜像qt_lib.img拷贝到SD卡中,运行Zedboard开发板,挂载qt_lib.img镜像。

注意:镜像的挂载目录应该与PC机上QT的安装目录一致。本文中,PC机上QT的安装目录为/home/linux/Zynq_qt_build/install,在Zedboard板系统上建立相同路径的目录作为挂载目录:
mount /dev/sda1 /mnt
mount /mnt/qt_lib.img /home/linux/Zynq_qt_build/install

这样一来,就可以运行QT程序了。-qws指令用于建立一个运行QT软件必须的QWS Server,这是由QT的机制决定,软件会从挂载目录自动调用QT运行库,运行命令如下:
/mnt/helloworld -qws

运行效果如下图:

通过HDMI连接显示器后,显示效果如图:

可通过USB Hub连接鼠标进行操作,窗口关闭则QT程序结束运行。

文章转载自:风语玄感