QT由于跨平台而得到广泛的应用,并且QT也是开源的,现在许多的嵌入式产品上都使用QT界面,本文是在海思HI3520D嵌入式设备上对QT进行移植,使用arm-hisiv300-linux-交叉编译器,实现鼠标实现对于QT界面的操作。
1、下载网址:https://download.qt.io/archive/qt/5.5/5.5.1/single/
2、解压qt-everywhere-opensource-src-5.5.1.tar.gz
# tar -vxf qt-everywhere-opensource-src-5.5.1.tar.gz
3、配置交叉编译环境
本文使用的是arm-hisiv300-linux-g++交叉编译器,把qtbase/mkspecs/linux-arm-gnueabi-g++/拷贝为qtbase/mkspecs/arm-hisiv300-linux-g++;
#cp qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/arm-hisiv300-linux-g++ -rf
(1)修改qtbase/mkspecs/arm-hisiv300-linux-g++/qmake.conf
#vi qtbase/mkspecs/arm-hisiv300-linux-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 #指定Qt显示驱动方式
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a #指定处理器架构
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = arm-hisiv300-linux-gcc
QMAKE_CXX = arm-hisiv300-linux-g++
QMAKE_LINK = arm-hisiv300-linux-g++
QMAKE_LINK_SHLIB = arm-hisiv300-linux-g++
# modifications to linux.conf
QMAKE_AR = arm-hisiv300-linux-ar cqs
QMAKE_OBJCOPY = arm-hisiv300-linux-objcopy
QMAKE_NM = arm-hisiv300-linux-nm -P
QMAKE_STRIP = arm-hisiv300-linux-strip
load(qt_config)
如果是触摸板,交叉编译器后增加 -lts
QMAKE_CC = arm-hisiv300-linux-gcc -lts
QMAKE_CXX = arm-hisiv300-linux-g++ -lts
QMAKE_LINK = arm-hisiv300-linux-g++ -lts
QMAKE_LINK_SHLIB = arm-hisiv300-linux-g++ -lts
(2)增加configure配置脚本
在qt-everywhere-opensource-src-5.5.1目录下创建autoConfigure.sh脚本
# vi autoConfigure.sh
#!/bin/sh
./configure \
-prefix /opt/qt5.5.1 \
-release \
-opensource \
-no-accessibility
-make libs \
-xplatform arm-hisiv300-linux-g++ \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-zlib \
-tslib \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-pkg-config \
-no-separate-debug-info
其中-prefix /opt/qt5.5.1代表我们编译完QT5.5.1后要安装地址,编译完成后,所有的库文件和环境文件都需要拷贝到设备这个目录下;-xplatform arm-hisiv300-linux-g++ 为交叉编译器,这里会链接到上面qtbase/mkspecs/arm-hisiv300-linux-g++/qmake.conf文件;如果你使用QT是触摸板操作,就需要tslib的支持,需要先编译出tslib的库文件,这里需要增加-I/opt/tslib1.4/include -L/opt/tslib1.4/lib ,-I 和 -L后面分别为编译tslib的include和lib的安装目录,由于我这边使用的是鼠标操作,就不要链接这个库;
4、编译安装Qt
# make -j4 #-j 4 表示4个线程同时编译,减少编译时间
# sudo make install #安装Qt
编译完成后在/opt/qt5.5.1/命令下会生成 bin doc imports include lib mkspecs plugins qml translations文件夹;
查看编译是否成功:
# cd /opt/qt5.5.1/bin
# ./qmake -v #查看Qt,编译成功
QMake version 3.0
Using Qt version 5.5.1 in /opt/qt5.5.1/lib
1、编译海思linuxfb
在海思中,使用海思官方自带SDK中的sample进行修改。Hisilicon Framebuffer(以下简称 HiFB)是海思数字媒体处理平台提供的管理图像叠加层的模块,它基于 Linux Framebuffer 实现,在提供 Linux Framebuffer 基本功能的基础上,还扩展了一些图形层控制功能,如层间 Alpha、设置原点等mpp的sample官方下载地址:mpp下载
通过修改sample_hifb.c代码来初始化HiFB,博主使用的是720x576的CVBS输出,如果想通过其他分辨率模式输出,都是可以按照sample代码修改的;
(1)分辨率的修改:
#define WIDTH 720
#define HEIGHT 576
(2)输出模式的修改
stPubAttr.enIntfSync = VO_OUTPUT_PAL;
stPubAttr.enIntfType = VO_INTF_CVBS;
(3)HI3520Dv300的cvbs输出图层G1, G1只能在SD0设备上显示,设备为/dev/fb1:
VO_DEV VoDev1 = 1;
VO_LAYER VoLayer = 2;
HI_CHAR file[12] = "/dev/fb1"
(4)G1层不支持支持内存侦测FBIOPUT_MDDRDETECT_HIFB
修改后的代码下载地址:https://download.csdn.net/download/u012478275/11944994
在海思开发板中,要先运行sample_hifb对设备的fb进行初始化之后才能运行QT,不然无法显示,QT会提示open /dev/fb1 error;
2、开发板中的环境配置
(1)把编译好的QT库文件和环境文件拷贝到开发板/opt/qt5.5.1/下
(2)设置QT的运行环境:在etc/profile中添加下面内容
#添加QT库路径
LD_LIBRARY_PATH="/usr/local/lib:/usr/lib:/opt/qt5.5.1/lib"
export PATH
export LD_LIBRARY_PATH
#设置使用linuxfb,同时设置QT显示分辨率720x576
QT_QPA_PLATFORM=linuxfb:fb=/dev/fb1:size=720x576:
export QT_QPA_PLATFORM
#设置QT平台相关文件路径
QT_QPA_PLATFORM_PLUGIN_PATH=/opt/qt5.5.1/plugins/
export QT_QPA_PLATFORM_PLUGIN_PAT
3、编译QT程序,执行程序
新建一个最简单的QT工程,编写代码,使用上面编译的qmake生成Makefile,然后make就可以生成在设备上面运行的程序,
将生成的执行文件和sample_hifb一起拷贝到开发板中,先执行sample_hifb,就可以跑QT应用程序了。
4、中文支持
在编译出的/opt/qt5.5.1/lib/下是没有fonts,在这里新建/opt/qt5.5.1/lib/fonts/命令,下载一个wqydkmh.ttf文库放到fonts下,
这样就可以支持中午的显示了;