Qt5移植眸芯MC6810E

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,浪费了太多时间。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值