2. 嵌入式图形系统概述
在嵌入式桌面开发中,图形系统是连接应用与显示硬件的关键中间层。它既要向上提供窗口、输入、合成与渲染能力,又要向下适配 GPU、显示控制器、触摸屏等资源受限的硬件。理解嵌入式 GUI 的演进脉络,以及 Wayland 与 X11 的差异,是掌握 Weston 定位与优势的前提。
一、嵌入式 GUI 的发展历程
嵌入式图形系统大致经历了四个阶段。第一阶段是直接帧缓冲(Framebuffer):应用直接读写 /dev/fb0,实现简单,但多个应用无法共享屏幕,也没有窗口管理概念。第二阶段是轻量级 GUI 库,如 Qt/Embedded、MiniGUI、DirectFB,它们在 Framebuffer 之上提供控件、事件与图层,适合单一全屏应用,但多应用并发与合成能力有限。
第三阶段是X11 在嵌入式中的移植。X Server 提供网络透明的窗口系统,支持多客户端、多窗口与远程显示,生态成熟。但 X11 架构诞生于工作站时代,协议复杂、客户端与服务器耦合度高,在嵌入式设备上带来内存占用大、启动慢、合成路径冗长等问题。
第四阶段是Wayland 与 Weston。Wayland 重新定义了显示服务器协议,把合成职责交给合成器,客户端直接渲染到缓冲区,由合成器统一合成上屏。Weston 是 Wayland 的参考合成器,也是嵌入式场景中最常用的实现之一,标志着嵌入式图形系统向轻量、现代、GPU 加速方向演进。
二、Wayland 与 X11 的核心差异
X11 采用“客户端—服务器”模型:客户端通过 X 协议向 X Server 发送绘图请求,X Server 负责窗口管理、事件分发与最终上屏。这种设计带来网络透明与生态兼容,但也意味着每次绘制都要经过协议编解码,合成路径长,且合成器往往作为 X Server 的扩展存在。
Wayland 则把“显示服务器”与“合成器”合二为一。客户端不再发送绘图指令,而是通过 EGL 直接渲染到缓冲区,再把缓冲区提交给合成器;合成器负责把多个客户端的缓冲区合成后交给 DRM/KMS 上屏。输入事件也由合成器直接分发给对应客户端。这种“直接渲染 + 统一合成”的模型,显著减少了中间拷贝与协议开销。
| 对比维度 | X11 | Wayland / Weston |
|---|---|---|
| 架构模型 | 客户端—服务器分离,合成器常为扩展 | 合成器即服务器,职责统一 |
| 渲染路径 | 客户端发绘图请求,服务器重绘 | 客户端 EGL 直接渲染,提交缓冲区 |
| 合成开销 | 协议编解码 + 多次拷贝,路径较长 | 缓冲区共享,合成路径短 |
| 输入处理 | X Server 统一分发 | 合成器直接分发到焦点客户端 |
| 资源占用 | 较大,启动较慢 | 轻量,适合嵌入式 |
| 网络透明 | 原生支持远程显示 | 需额外方案(如 RDP、VNC 后端) |
| 安全隔离 | 客户端可监听全局输入,隔离弱 | 客户端间默认隔离,更安全 |
三、Weston 的定位与优势
Weston 是 Wayland 协议的参考合成器实现,由 freedesktop.org 社区维护。它既是 Wayland 协议的“标准答案”,也是嵌入式产品中可直接落地的合成器。其定位可以概括为:面向嵌入式与桌面场景的轻量级 Wayland 合成器,提供窗口管理、输入处理、输出管理、客户端启动与多种后端适配。
Weston 的优势主要体现在以下方面:
- 后端丰富:支持 DRM/KMS、Framebuffer、X11、Wayland(嵌套)、headless 等后端,便于在真实设备与开发机上调试。
- 轻量可裁剪:模块化设计,可按需启用桌面外壳、IVI 外壳、kiosk 外壳,适合资源受限设备。
- GPU 加速友好:基于 EGL 与 GLES,充分利用 GPU 合成,降低 CPU 负载。
- 标准兼容:作为参考实现,与 Wayland 协议、libinput、DRM/KMS 等上游组件保持同步。
- 可扩展:支持插件式 shell、屏幕共享、远程输出等扩展能力。
libinput、mesa、drm 配合使用。启动前需确认内核已启用 DRM/KMS,且 GPU 驱动提供 EGL/GLES 支持。
四、典型场景与常见误区
以一个基于 i.MX8 的嵌入式 HMI 为例:系统启动后,Weston 以 DRM 后端运行,加载 ivi-shell 或 desktop-shell;Qt 应用通过 QT_QPA_PLATFORM=wayland 连接 Weston,直接使用 EGL 渲染;触摸事件由 libinput 采集,经 Weston 分发给焦点窗口。整个链路中,应用不再直接操作 Framebuffer,而是通过 Wayland 协议与合成器协作。
# 在目标板上启动 Weston(DRM 后端)
weston --backend=drm-backend.so --tty=/dev/tty1
# Qt 应用以 Wayland 平台插件运行
export QT_QPA_PLATFORM=wayland
./hmi_app
# 查看 Weston 日志中的输出与输入设备
journalctl -u weston -f
常见误区有三点。其一,认为“Wayland 只是 X11 的替代品”,实际上两者在架构哲学上差异很大,迁移时需重新考虑合成、输入与安全模型。其二,忽视 GPU 与 DRM 驱动的前置条件,导致 Weston 启动失败或回退到软件渲染。其三,在资源紧张的设备上盲目启用完整桌面外壳,造成内存与启动时间超标,应优先选择 IVI 或 kiosk 外壳。
failed to create drm output,通常与内核 DRM 配置、显示控制器状态或权限有关,应先检查 /dev/dri/card0 是否存在及当前用户权限。
总体而言,嵌入式图形系统正从“直接写屏”和“X11 重协议”走向“Wayland 轻合成”。Weston 作为 Wayland 的参考合成器,凭借轻量、模块化、GPU 加速与标准兼容等特性,成为嵌入式桌面开发中承上启下的关键组件。理解其架构与边界,才能在后续的移植、裁剪与调试中做出正确决策。