嵌入式linux QT平台的显示插件
linuxfb
直接往FrameBuffer寫數據
只支持軟件渲染(software-rendered),所以沒有gpu的片子選這個
某些配置會使顯示性能受到抑制
命令行可使用命令QT_QPA_PLATFORM=linuxfb:fb=/dev/fb1 和 -platform linuxfb使qt程序運行在該plugin上
另外指定fb用fb=/dev/fbN,分配顯示區大小size=<width>x<height>,物理大小mmSize=<width>x<height>,設定便宜offset=<width>x<height>,有關于屏幕消影(blinking cursor)和閃爍光標(screen blanking)的控制nographicsmodeswitch
directfb
eglfs
EGL是OpenGL與本機窗口系統之間的接口。Qt可以將EGL用于上下文和表面管理,但是API不包含特定于平臺的內容。創建本機窗口(不一定是屏幕上的實際窗口),仍然必須通過特定于平臺的方式來完成。這就是為什么我們需要主板或GPU專用的適配代碼的原因。通常,這些改編提供為:
- EGLFS掛鉤?-編譯到平臺插件中的單個源文件
- EGL設備集成?-動態加載的插件
EGLFS是一個平臺插件,用于在EGL和OpenGL ES 2.0之上運行Qt5應用程序,而沒有像X11或Wayland這樣的實際窗口系統。除了Qt Quick 2和本機OpenGL應用程序之外,EGLFS還支持軟件渲染的窗口,例如QWidget。對于QWidget,小部件的內容使用CPU渲染為圖像,然后將其上載為紋理并由插件進行合成。
對于包含GPU的現代嵌入式Linux設備,推薦使用EGLFS插件。
EGLFS迫使第一頂層窗口-無論是QWidget的或QQuickView?-成為全屏。該窗口也被選擇為所有其他頂級窗口小部件都合并到其中的根窗口小部件窗口。例如,對話框,彈出菜單或組合框。此行為是必需的,因為使用EGLFS時,總是只有一個本機窗口和一個EGL窗口表面;這些屬于首先創建的小部件或窗口。當存在顯示應用程序生命周期的主窗口并且所有其他小部件不是非頂級窗口部件或隨后創建時,此方法將很好地工作。
KMS
一個試驗性的平臺plugin,利用內核的 modesetting 和 drm(Direct Rendering Manager)機制,配合egl-device實現的帶有GPU加速模式。依賴內核的配置和 drm
XCB
用于平常的桌面linux平臺
一些嵌入式平臺使用該plugin需要提供一些必要的開發文件
在x桌面下,有些設備不支持egl和 opengl因為EGL的實現不適配Xlib,這種情況下編譯出來的XCB plugin將不支持EGL,也意味著 Qt Quick 2 和其他以 OpenGL 為基礎的應用程序將不能在該這個平臺上成功運行(這就是我們的程序為什么沒有在imx6ul的xcb平臺下運行成功的原因)。此時,他能支持那些以軟件渲染(software-rendered)的程序運行,例如 QWidget。
作為一個通用的規則,XCB是不建議在嵌入式平臺上使用的,eglfs能更好的展現較高的性能和支持硬件加速能力。
wayland
輕量級的視窗系統
一個關于client可以與顯示server連通的協議
Qt 提供了Wayland的相關插件使得Qt 應用程序與wayland顯示進行連通。
Wayland是一種顯示服務器協議,可以幫助您創建多進程系統。多個客戶端應用程序(“客戶端”)可以將其自己的內容呈現到屏幕外緩沖區。然后,使用Wayland協議將這些緩沖區傳遞到通常稱為合成器的顯示服務器。最后,合成器將內容合成并放置在物理顯示器上。
X11是80年代的桌面協議,如今已不再適合圖形硬件的工作方式。它很大,很復雜,并且缺乏可定制性。實際上,使用X11流暢地運行客戶端并達到60 fps而不會撕裂是很困難的。相比之下,Wayland更易于實現,具有更好的性能,并包含在現代圖形硬件上有效運行的所有必要部件。對于Linux上的嵌入式多進程系統,Wayland是標準配置。
但是,如果您使用的是舊硬件或舊應用程序,那么Wayland可能不是一個好的選擇。Wayland協議在設計時考慮了安全性和隔離性,并且嚴格/保守地向客戶提供了哪些信息和功能。盡管這樣可以使界面更清潔,更安全,但是舊版應用程序期望的某些功能可能不再在Wayland上可用。
參考:
https://doc.qt.io/qt-5/embedded-linux.html
https://doc.qt.io/qt-5/wayland-and-qt.html#
?
總結
以上是生活随笔為你收集整理的嵌入式linux QT平台的显示插件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我差点错过高校毕业生毕业之后这个3000
- 下一篇: Linux查看应用的CPU、内存使用情况