显示架构支持

对于 Rockchip 平台,主要有以下几种显示架构可供选择:

  • Qt + Wayland

  • Qt + EGLFS

  • EGL program + X11

  • Wayland

  • None

多窗口的功能需求,选择:

  • X11

  • Wayland

桌面的功能需求,选择:

  • X11

4K 视频播放 + 全屏:

  • Qt + Wayland

  • Qt + EGLFS

  • X11

  • Wayland

4K 视频播放 + 多窗口:

  • X11

  • Qt + Wayland

  • Wayland

如果您对显示架构的技术不太理解,可以继续往下阅读。

X11

X11 是 X 显示协议的第 11 个版本。

X 协议已经延用了 30 年,X 协议的 Client/Server 结构起初是为了在以前硬件性能太弱的情况下,设备(Client 端)通过发送渲染请求给 X server(以前 X server 是运行在另一个独立的硬件)渲染显示。

但是随着现代硬件性能不断提升,同一个硬件系统上可以同时运行 Client 和 Server 了,但是这种远程通讯结构运用在本地机器上带来的后果就是性能的丢失,目前在 Debian 官方已经有分支在开发 Wayland 用于替换掉 X11,但是目前 Wayland 对现有软件兼容性并不好所有还没有正式替换使用。

_images/X_Logo.png

参考资料:

https://en.wikipedia.org/wiki/X.Org_Server
https://www.comptechdoc.org/os/linux/howlinuxworks/linux_hlxwindows.html
https://dri.freedesktop.org/wiki/DDX/
https://www.freedesktop.org/wiki/Software/Glamor/
https://en.wikipedia.org/wiki/X.Org_Server

Qt + EGLFS

Qt + EGLFS 是 Qt 自己实现的一个 GUI 系统,不支持多窗口,但也因此少了 window composite。

Qt + EGLFS 和 dri2 的方式类似,区别就在于 Qt + EGLFS 的 font buffer 在自己用 gpu composite 后,是直接送给 DRM 显示,而 X 里是送至 Window manager 做 composite,所以 EGLFS 在效率上是有优势的。

_images/qt_logo.jpeg

Qt + Wayland

Wayland 中,Weston 是 Wayland 显示协议中的具体实现,其对应关系就好比 Xorg (X server)和 X 的关系一样。

目前 Wayland 和 X 对比唯一缺点就是在兼容性上了,所以目前主流的系统版本中依然大部分使用 X。

Weston 不再使用 X 的 Client/Server 的结构,而是直接由合成器接受内核事件,并传递给 Client 端,由 Client 端直接渲染,只向合成器发送需要更新的区域,再由合成器通知内核安排翻页。

需要注意的是由于 Ubuntu/Debian 已经有 X11,所以 SDK 默认是在 Buildroot 添加了 Weston 的支持,实际上如果 Ubuntu/Debian 需要安装 Weston 的话也可以在 Minimal 版本上搭建。(Firefly Ubuntu 20.04,将会默认自带 Wayland 和 X,并且可以自由切换。)

_images/wayland_logo.png

建议使用 Buildroot/Yocto 做 Wayland 的开发。效率上 Wayland 要比 X11 好点,主要是兼容性问题。

如果不需要桌面,又要多窗口,可以尝试使用 Wayland。

None

除了 X11 和 Wayland 之外,还有 None,这也是嵌入式上接触比较多的。比如 MiniGUI,SDL皆是如此。

若要支持到 DRM 和 opengl 的话,就只能选择 Qt 了。

MiniGUI 是一个定位于轻量级的嵌入式图形库,对系统资源的需求完全考虑到了嵌入式设备的硬件情况,如 MiniGUI 库所占的空间最小可以裁剪到 500K 左右。

针对 Buildroot 系统适配在硬件资源比较紧张的设备上的特性,MiniGUI 搭配 Buildroot 是再适合不过了。

参考资料:

https://wayland.freedesktop.org/architecture.html
https://en.wikipedia.org/wiki/Wayland