[Qt配置指南—5]Qt 5.4.2 Configure Options---Qt for Embeded Linux嵌入式Linux

如有错误,欢迎批评指正!!!


Qt for Embeded Linux


这里着重讨,http://doc.qt.io/qt-5/embedded-linux.html

自Qt 5.0发布以来,Qt不再包含自己的窗口系统(QWS)实现。 对于单进程用例,Qt Platform Abstraction是一个优秀的解决方案。 Wayland可以支持多个图形进程。

有多个平台插件可以在嵌入式Linux系统上使用:EGLFS,LinuxFB,KMS,DirectFB,Wayland。 这些的可用性取决于Qt的配置。 默认平台插件也是特定于设备的。 例如,在许多板上,选择eglfs作为默认板。 如果默认值不合适,则可以使用QT_QPA_PLATFORM环境变量参数来请求另一个插件。 或者,对于快速测试,-platform命令行可以使用相同的语法。


一、配置特定设备

为给定设备构建Qt需要一个工具链和一个sysroot。此外,一些设备需要针对EGL和OpenGL ES 2.0支持的供应商特定的适配代码。这与非加速平台不相关,例如使用LinuxFB插件的平台,这只适用于基于软件的渲染。这意味着Qt Quick 2在这样的设置中不起作用,因为它依赖于OpenGL进行渲染。

目录qtbase / mkspecs / devices包含多个设备的配置和图形适配代码。例如,linux-rasp-pi2-g ++ mkspec包含构建设置,例如Raspberry Pi 2设备的最佳编译器和链接器标志。 mkspec还包含关于eglfs钩子(供应商特定的适配代码)的实现或者对适当的eglfs设备集成插件的引用的信息。通过配置工具的-device参数选择设备。此参数后面的名称必须至少部分匹配设备下的其中一个子目录。

以下是Raspberry Pi 2的示例配置。对于大多数嵌入式Linux板,configure命令看起来类似:

./configure -release 
            -opengl es2 
            -device linux-rasp-pi2-g++ 
            -device-option CROSS_COMPILE=$TOOLCHAIN/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- 
            -sysroot $ROOTFS 
            -prefix /usr/local/qt5


最重要的参数是-device和-sysroot。通过指定-sysroot,configure的特性检测测试使用的包含文件和库以及Qt本身从指定位置获取,而不是从主机PC的标准位置获取。这意味着在主机上安装开发包没有意义。例如,要获得libinput支持,在主机环境中安装libinput开发头和库是不够的或不必要的。相反,目标体系结构的头和库(例如ARM)必须存在于sysroot中。

在执行交叉编译时也支持pkg-config。 configure会自动设置PKG_CONFIG_LIBDIR以使pkg-config报告编译器和链接器设置基于sysroot而不是主机。这通常功能很好,没有任何进一步的调整。但是,在运行configure之前,必须为主机取消设置环境变量(如PKG_CONFIG_PATH)。否则,Qt构建可能尝试使用来自主机系统的不适当的标头和库。

指定-sysroot会导致在调用编译器时自动设置--sysroot参数。在某些情况下,这是不可取的,可以通过传递-no-gcc-sysroot来禁用配置。

-prefix,-extprefix和-hostprefix控制Qt构建的预期目标目录。在上面的例子中,Qt的ARM构建预计放在目标设备上的/ usr / local / qt5中。请注意,运行make install不会向设备部署任何内容。相反,安装步骤的目标是由extprefix指定的目录,默认为sysroot +前缀,因此是可选的。然而,在许多情况下,“污染”sysroot是不可取的,因此指定-extprefix变得重要。最后,-hostprefix允许从目标的二进制文件中分离主机工具,如qmake,rcc,uic。当给定时,这些工具将安装在指定的目录而不是extprefix。


二、嵌入式Linux设备的平台插件(Platform Plugins for Embedded Linux Devices)

EGLFS:

EGL是OpenGL和本地窗口系统之间的接口。 Qt可以使用EGL进行上下文和表面管理,但是API不包含平台特定:创建本地窗口(这不一定是屏幕上的实际窗口)仍然必须通过平台特定的方法来完成。 因此需要板或GPU特定的适配代码。 这样的适配或者作为eglfs钩提供,其可以是编译到平台插件中的单个源文件,或者作为动态加载的EGL设备集成插件。

EGLFS是一个平台插件,用于在没有实际窗口系统(如X11或Wayland)的EGL和OpenGL ES 2.0之上运行Qt5应用程序。 除了Qt Quick 2和原生OpenGL应用程序,它还支持软件渲染窗口(例如QWidget)。 在后一种情况下,小部件的内容使用CPU呈现为图像,然后上传到纹理并由插件合成。


这在支持GPU的嵌入式设备中鼓励使用。

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值