ZYNQ7000平台Linux文件系统工具buildroot下QT5.4的编译配置

 

近期调试Xilinx的zynq7000平台,需要进行图形界面开发,因此对QT进行编译配置。过程曲折,遇到一些问题,不过基本已解决。这里介绍的QT5未进行裁剪,因此占用空间比较多,本文宗旨是总结QT移植配置过程,裁剪部分可能以后会发文进行补充(其实我现在根本不清楚QT5的各个组件功能,不。敢。剪。尴尬

 

 

1. QT库编译

 

系统开发的文件系统采用的buildroot文件系统开发工具,因此这里就偷了个懒,直接在buildroot的menuconfig里添加了QT库。秉承与时俱进的原则,在可选的QT4.8.6和QT5.4.0中选择了后者,后来的编译配置过程真心后悔不已,这里提醒各位:升级需谨慎难过。当然,网上有很多采用QT源码进行移植和配置的文章,有兴趣各位可以借鉴,在之后的配置过程中也是参考了各位大神的文章才得以顺利进行,在这里谢一个先。

 

第一步:这里使用buildroot-2015.02版本(对,我就是这么怀旧!!!),在menuconfig里选择QT5,如图:

 

 

 

第二步:配置QT5,其实就是所有选项都选上,当然这会导致后续的某些问题,请原谅我单线程脑仁,我必须把这个错误的配置图贴上。

 

 

PS: buildroot-2015.02中支持的QT5的版本为5.4.0(可以查看buildroot源码的文件package/qt5/qt5.mk)。

 

前方有坑,捉急的同学可以直接跳到第三步。

 

目前QT5的最新版本为5.8.0,于是再次基于与时俱进的原则,将qt5.mk中的QT版本改为5.8.0,结果再次证明NO ZUO NO DIE,编译过程中出现以下错误:

 

 

退到QT5.6.0也是同样的问题,从打印信息中可见是在对QT5源码打补丁时出现了错误。buildroot确实是非常简单易用的工具,对下载的源码包中存在的BUG提供了一系列的补丁(QT5为例,patch文件可查看package/qt5中的各个子文件夹)。据我猜测,上述错误的原因是不同版本源码有所变动,补丁无法兼容所有版本(未经验证,真的是猜测得意,我才不会真的去找原因呢)。

 

因此,我还是老实编译QT5.4.0,不过有兴趣的同学可以下载buildroot-2017.02.1进行配置编译,其中支持QT5.6.2和QT5.8.0呦安静

 

第三步:make(话说这一步的等待时间绝对值得将它单独列为一步。。。尴尬

 

2. QT5程序运行调试

 

本章按照遇到的问题及解决方法进行说明,其中修改了menuconfig和QT的环境变量设置,这样顺便也说明了各个配置项的功能。因此内容看起来会比较混乱。下面很多参数配置都参考 qt 官网文档 http://doc.qt.io/qt-5/embedded-linux.html,下不赘述。

 

问题1:运行程序提示以下错误

This application failed to start because it could not find or load the Qt platform plugin "eglfs".
Available platform plugins are: directfbegl, directfb, linuxfb, minimal, offscreen.
Reinstalling the application may fix this problem.

 

按照打印信息,可见程序无法加载QT platform “eglfs”,但是有“directfbegl, directfb, linuxfb, minimal, offscreen”平台是可用的。这里使用的linuxfb平台,因此需要配置相应的环境变量(添加到文件/etc/profile中)

 

export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0

 

运行以下命令使其生效:

 

source /etc/profile

 

运行程序成功。

 

问题2:所有的字符(中英文)显示为方框

 

STEP1: 怀疑没有字库,查找文件系统,发现其中没有fonts文件夹,因此怀疑qt安装时未将字库文件拷贝到文件系统内。因此手动拷贝了fonts文件夹到文件系统目录/usr/lib下,添加以下环境变量并使能:

 

export QT_QPA_FONTDIR=/usr/lib/fonts

 

重启后字符仍显示为方框。

 

STEP2: 修改配置无效后,查看QT5的配置,在menuconfig中发现与字体有关的选项“fontconfig support”,取消选中,如图:

 

 

重新编译buildroot(部分编译的血泪史不想再说,劝各位还是完整地重新编译 buildroot 或者 QT5,不过大神请略过此句)后生成文件系统,发现其中 /usr/lib 文件夹下已经自动拷贝了 fonts 文件下(仿佛前方有光奋斗),按 STEP1 配置 QT_QPA_FONTDIR 并使能,可以显示英文字符。

 

问题3:可以显示英文,无法显示中文

 

显示英文后,发现无法显示中文,这里应该是缺少中文字库问题,参照以下文章解决:

http://blog.csdn.net/jiang_dlut/article/details/51829749 

 

问题4:使能 USB 鼠标

 

接入 USB 鼠标后,终端显示以下内容:

 

 

 

通过打印信息可见,内核已经识别了USB鼠标,但是 QT5 的应用程序界面没有鼠标图标。

参照 qt 官方文档以及 http://stackoverflow.com/questions/38838198/embedded-qt-mouse-pointer-not-showing-up。添加以下环境变量并使能解决:

 

export QT_QPA_FB_HIDECURSOR=0
export QT_QPA_GENERIC_PLUGINS=evdevmouse 
export QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event1

 

其中,/dev/input/event1 对应 USB 鼠标的设备。若不确定,可以通过以下方法进行检测:

 

1. 使用 cat /dev/input/eventX,依次打开读取 /dev/input/eventX 设备。

2. 移动 USB 鼠标,若有终端有数据输出,则为 USB 鼠标对应的 event 设备。

 

问题5:使能 USB 键盘

 

插上 USB 键盘后内核打印已经识别该设备(此处就不贴图示意了),但是 QT 程序不识别。具体原因与 USB 鼠标不识别原因类似。但是环境变量QT_QPA_GENERIC_PLUGINS 已经设置为使用 USB 鼠标的 event,因此采用应用程序添加输入参数的方式同时使能 USB 键盘。

具体操作参考 http://stackoverflow.com/questions/38439861/qt5-6-1-tslib-and-evdev-to-work-concurrently

 

通过以下参数使 QT 应用程序识别 USB 键盘。

 

./app_name -plugin eventkeyboard:/dev/input/event2

 

其中,/dev/input/event2 的识别方法与 USB 鼠标的 event 识别方式相同。

 

 

遗留问题:键鼠支持热插拔

 

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值