Qt5.2.1移植海思


1.修改./qtbase/mkspecs下的 qmake.config

以一个linux-arm-test配置目录为例,将mkspecs目录下的linux-arm-gnueabi-g++复制为linux-arm-test

cp linux-arm-gnueabi-g++ linux-arm-test –r

修改linux-arm-test配置

cd linux-arm-test

查看ls /opt/FriendlyARM/toolschain/4.4.3/bin查看目录下实际编译工具链名

将linux-arm-test目录下qmake.config中的arm-linux-gnueabi-开头都更改为实际路径加工具链名:PATH+arm-none-linux-gnueabi- 

如QMAKE_CC  = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc

再加入三行:

QT_QPA_DEFAULT_PLATFORM = linuxfb      #qpa图形插件,

QMAKE_CFLAGS_RELEASE   += -O2 -march=armv5te

QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv5te

 

说明1:QT_QPA_DEFAULT_PLATFORM选项是指定图形插件, Qt5将各平台底层抽象为一个 qpa 插件,通常在mac上是cocoa, 在window上是windows, 在linux X11下是xcb, 如果有OPENGL支持, 那么选eglfs。而对于无硬件加速的设备,则选择linuxfb,。    minimal仅仅是让程序跑通, 不起任何作用

说明2:目标板为新唐N32905U1DN,cpu为arm936ejs,执行arm-linux-gcc –target-help 查看交叉编译器所支持的架构,选择了其中比较接近的一个为armv5te

 

修改qmake.conf文件:

#

# qmake configuration for building with arm-linux-gnueabi-g++

#

 

MAKEFILE_GENERATOR      = UNIX

CONFIG                          += incremental gdb_dwarf_index

QMAKE_INCREMENTAL_STYLE = sublib

 

QT_QPA_DEFAULT_PLATFORM = linuxfb

QMAKE_CFLAGS_RELEASE   += -O2 -march=armv5te

QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv5te

 

 

include(../common/linux.conf)

include(../common/gcc-base-unix.conf)

include(../common/g++-unix.conf)

 

# modifications to g++.conf

QMAKE_CC             = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc

QMAKE_CXX            = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++

QMAKE_LINK           = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++

QMAKE_LINK_SHLIB    = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++

 

# modifications to linux.conf

QMAKE_AR         = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-ar cqs

QMAKE_OBJCOPY   = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-objcopy

QMAKE_NM       = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-nm -P

QMAKE_STRIP    = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-strip

load(qt_config)

 

2.configure配置

configure配置: 在qt-5.2.1-arm目录下执行 sudo ./configure -prefix $PWD/qtbase -release -opensource -xplatform linux-arm-test -nomake tests -no-largefile -qt-zlib -no-nis -qt-libpng -qt-libjpeg -qt-freetype
注意 : 这样后续安装可能会出问题(但qmake已经生成不影响正常使用) :  

编译QT5.7.0遇到 ERROR: Unknown module(s) in QT: quick


可以尝试如下方法 ,但本人没试过 :

编译嵌入式QT5.7.0,配置完成后在make时遇到 ERROR: Unknown module(s) in QT: quick,后将配置文件加入-skip qtdeclarative解决,完整配置选项如下:

./configure -opensource -shared -xplatform linux-arm-gnueabihf-g++ -qt-zlib -no-opengl -no-openssl -nomake examples -skip qtcanvas3d -skip qt3d -qreal float -skip qtdeclarative -prefix /xilinx/qt5/qt5instll/



3.执行make&&make install

期间会报错 (大概三次),方法是直接改源码,注释掉错误地方 


4. 安装后的问题



Qt5 背景透明显示问题
qt4 可以通过 QWSServer::setBackground(QColor(0, 0, 0, 0)) 设置背景透明,
但是qt5里面没有这个了,现在程序运行到qt5去掉这段代码后,在arm 上面跑背景是为黑色的,
qt5 应该怎么设置才能让背景透明。


已经解决,在arm上跑用的是linuxfb平台,需要更改两个地方。
1. 在qtbase\src\platformsupport\fbconvenience\qfbscreen.cpp中将
mCompositePainter->fillRect(rect, Qt::black);
更改为
mCompositePainter->setCompositionMode(QPainter::CompositionMode_Source);
mCompositePainter->fillRect(rect, Qt::transparent);
mCompositePainter->setCompositionMode(QPainter::CompositionMode_SourceOver);


2. 在qtbase\src\plugins\platforms\linuxfb\qlinuxfbscreen.cpp中将
mBlitter->drawImage(rects, *mScreenImage, rects);
更改为
mBlitter->setCompositionMode(QPainter::CompositionMode_Source);
mBlitter->drawImage(rects[i], *mScreenImage, rects[i]);
mBlitter->setCompositionMode(QPainter::CompositionMode_SourceOver);



#配置qt插件以及执行环境
将安装软件目录下的plugins拷贝到目标板。
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins #qt插件加载目录
export QT_QPA_PLATFORM=linuxfb:tty=/dev/tty0          #qt图形插件平台

export QT_QPA_FONTDIR=$QTDIR/lib/fonts           #qt字体库目录


参考文章:点击打开链接



你可能感兴趣的:(嵌入式,qt)