Qt5移植眸芯MC6810E

  • Post author:
  • Post category:其他




Qt5移植

qt版本5.9.9,平台类型:富瀚微旗下的眸芯MC6810E

由于我的设备是nvr,所以不需要移植

tslib

,而这款芯片没有

gpu

,所以平台插件选择了

linuxfb



Qt源码配置

下载源码并解压后,开始进行配置。我的配置如下


./configure --prefix=/home/zhengzheng/QT/qt5.9.9 -xplatform linux-arm-gnueabi-g++ -release -opensource -confirm-license -shared -qt-zlib -qt-freetype -sql-sqlite -qt-libjpeg -qt-libpng -widgets -no-qml-debug -no-dbus -no-gif -no-iconv -no-opengl -no-cups -no-glib -no-rpath -no-avx -no-openssl -nomake tools -no-tslib -linuxfb -nomake examples -strip


-no-tslib -linuxfb

这两点需要特别注意

在官方文档

Qt for Embedded Linux

中介绍嵌入式中各种平台插件,其中有这样一句话


EGLFS is the recommended plugin for modern Embedded Linux devices that include a GPU.

如果我们移植的时候不主动选择

linuxfb

,系统就会默认

EGLFS

,我在第一次移植的时候没有好好看这个文档,然后在运行程序的时候,报了如下的错误


failed to start because it could not find or load the Qt platform plugin "xcb" in ""

,然后我就根据网上的提示,去找

libqxcb.so

结果发现编译出来的目录没有这个插件。

而实际上我所用的这一款芯片没有

GPU

,所以不能选择这个,我选择了

linuxfb

,然而在没有加

-no-tslib

配置选项时,运行Qt应用程序时,程序依然会报错找不到

linuxfb

插件,可能是

linuxfb

默认需要依赖

tslib



修改编译配置文件


-xplatform linux-arm-gnueabi-g++

这是指定编译时使用的配置文件,我们需要修改对应的配置文件

修改

qt-everywhere-opensource-src-5.9.9\qtbase\mkspecs\linux-arm-gnueabi-g++

下的

qmake.conf

我的修改如下

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

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = arm-mol-linux-uclibcgnueabihf-gcc
QMAKE_CXX               = arm-mol-linux-uclibcgnueabihf-g++
QMAKE_LINK              = arm-mol-linux-uclibcgnueabihf-g++
QMAKE_LINK_SHLIB        = arm-mol-linux-uclibcgnueabihf-g++

# modifications to linux.conf
QMAKE_AR                = arm-mol-linux-uclibcgnueabihf-ar cqs
QMAKE_OBJCOPY           = arm-mol-linux-uclibcgnueabihf-objcopy
QMAKE_NM                = arm-mol-linux-uclibcgnueabihf-nm -P
QMAKE_STRIP             = arm-mol-linux-uclibcgnueabihf-strip
load(qt_config)

配置完了以后就可以编译安装


make -j8 && make install

安装的位置就是配置中的

--prefix=/

指定的目录



拷贝Qt库和平台插件(linuxfb)到开发板并修改开发板的系统环境变量

将相应的库拷贝到开发板相应的目录下,如果不知道是什么库,可以直接运行程序,然后系统就会提示缺少什么库。

然后需要修改系统配置文件,我选择的是

/etc/profile

export LD_LIBRARY_PATH=/lib:/nfs/lib
export QT_QPA_PLATFORM_PLUGIN_PATH=/home/zhengzheng/QT/qt5.9.9/plugins/
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=1920x1080:

指定平台插件目录是

/home/zhengzheng/QT/qt5.9.9/plugins/

,之所以选择这个目录是因为这个目录是我安装

qt

的目录,然后把

plugins\platforms\libqlinuxfb.so

拷贝到

/home/zhengzheng/QT/qt5.9.9/plugins/platforms

目录下,另外还需要创建

/home/zhengzheng/QT/qt5.9.9/lib/fonts

目录文件。



运行Qt程序前需要初始化/dev/fb及相关的依赖

这个时候就可以运行qt5应用程序了,但是又遇到了一个问题


Failed to mmap framebuffer (Permission denied)


这个是因为我没有对mpp系统以及

/dev/fb0

进行初始化,具体初始化的方式,参考芯片的

SDK

就可以了

到此,程序基本上就可以运行了

我移植Qt5前后差不多花了一周的时间,显然是非常低效的,根本原因是我没有先查看Qt相应的文档,而是向无头苍蝇一样盲目移植,也不清楚Qt5的嵌入式系统已经由QWS切换到了QPA,浪费了太多时间。

如果你有什么问题,欢迎提出来,互相交流共同进步



版权声明:本文为weixin_39234635原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。