海思HI3520D设备上移植QT5.5.1

一、前言

    QT由于跨平台而得到广泛的应用,并且QT也是开源的,现在许多的嵌入式产品上都使用QT界面,本文是在海思HI3520D嵌入式设备上对QT进行移植,使用arm-hisiv300-linux-交叉编译器,实现鼠标实现对于QT界面的操作。

二、QT的交叉编译

1、下载网址:https://download.qt.io/archive/qt/5.5/5.5.1/single/

   海思HI3520D设备上移植QT5.5.1_第1张图片

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

三、配置HI3520D环境

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下,
这样就可以支持中午的显示了;

 

 

你可能感兴趣的:(海思开发)