随着Qt 5.6的接近,是时候看一些运行嵌入式Linux变种的系统的一些新的令人兴奋的功能,就像我们以前Qt 5.5一样。
支持NVIDIA Jetson Pro主板
像Jetson TK1 Pro运行Yocto生成的Vibrante Linux映像板像支持X11,Wayland,甚至运行与纯EGL没有一个完整的窗口系统。后者通过经由公知的DRM / KMS路径进行模式设置并将其与EGL设备扩展组合来完成。这是不同于eglfs平台插件的现有KMS后端,依靠GBM,提供。因此Qt 5.5在这种环境下不起作用。有关详细信息,请查看此演示文稿。
Wayland提出了类似的挑战:虽然Weston工作正常,由于已经修补NVIDIA,基于Qt的合成器构建的Qt组合框架无法开箱即用,因为合成器必须使用EGLStream API,而不是Mesa的传统的基于EGLImage路径。
有了Qt 5.6,这一切都会改变。随着基于EGLDevice + EGLOutput + EGLStream支持的新eglfs的引入,Qt应用程序将只工作,类似于其他嵌入式板:
eglfs在Jetson K1 Pro上
着名的Qt电影体验演示使用Qt 5.6和eglfs在Jetson K1 Pro上运行
新设备makespec linux-jetson-tk1-pro-g ++便于交叉编译。
Wayland也将充分发挥功能,由于补丁支持EGL_KHR_stream,EGL_KHR_stream_cross_process_fd和EGL_KHR_stream_consumer_gltexture在现有的wayland-egl后端的Qt Compositor。
所有这一切都不是故事的结束。今后还有改进的余地,例如支持多输出和直接渲染(即跳过基于GL的合成,并将流直接连接到输出层以提高性能)。这些将在未来的Qt版本中涵盖。
请注意,Wayland对Jetson的支持应该暂时作为技术预览。使用非官方C ++ API的组合器,如上面所示的qwindow-compositor示例,将会正常工作。但是,QML和Qt Quick支持在写作时仍在进行中。
支持Intel NUC
一些英特尔NUC设备也是一个优秀的嵌入式平台,由于meta-intel和包括的meta-nuc层为Yocto。虽然这些是普通的x86-64目标,但它们可以像基于ARM的主板一样进行处理和使用。当配置Qt进行交叉编译时,请使用新的linux-nuc-g ++设备规范。图形方面的一切都希望工作在运行Mesa的基于英特尔GPU的桌面系统上。这包括eglfs(使用在Qt 5.5中引入的DRM / KMS / GBM后端)和Wayland。
Wayland在板上基于i.MX6
基于飞思卡尔i.MX6处理器的系统包括用于Wayland的Vivante GC2000 GPU和驱动程序支持。Qt应用程序传统上在Weston参考合成器上工作正常,例如对于Qt 5.4的上一篇文章,但是由于一些驱动程序的特性不能很好地与QPA和eglfs一起使用基于Qt的合成器启动和运行有点棘手。除了常规的Vivante特定的后端(eglfs_viv),eglfs现在有一个额外的后端(eglfs_viv_wl),当运行使用Qt Compositor框架构建的合成器应用程序时,透明地确保正确的功能。这个后端需要明确的请求,所以例如运行qwindow-compositor示例,做QT_QPA_EGLFS_INTEGRATION = eglfs_viv_wl ./qwindow-compositor -platform eglfs(-platform可能会被省略,因为eglfs通常是默认值)。
OpenGL ES 3.0和3.1
如前所述,Qt 5.6中大大增强了OpenGL ES 3的支持。使用面向具有GLES 3功能的驱动程序的嵌入式设备的新QOpenGLExtraFunctions类应用程序现在可以以跨平台方式使用完整的API。
libinput
当涉及从键盘,鼠标,触摸板和触摸屏获取输入事件时,Qt 5.5引入了对libinput的支持。Qt 5.6更进一步:当libinput在构建时可用时,它将被设置为eglfs和linuxfb中的默认选项,取代Qt自己的evdevkeyboard,鼠标和触摸后端。
在一些罕见的情况下,这是不可取的(例如,当从Qt 4 QWS时间使用evdevkeyboard特定的键盘布局时),因此提供QT_QPA_EGLFS_NO_LIBINPUT环境变量作为禁用此和强制5.6之前行为的手段。
这是现在。希望你会发现新的嵌入式Linux功能很有用。快乐黑客!
P.S。2015年Qt世界峰会有许多关于嵌入式开发的激动人心的演讲,例如设备创建的Qt,为下一个项目选择合适的嵌入式Linux平台等等。在此处浏览完整会话列表。