1. Weston 与 Wayland 概述

Wayland 是 Linux 图形栈中取代 X11 的新一代显示协议,Weston 则是该协议的参考合成器实现。本章从协议架构、合成器角色以及与 X11 的对比三个维度,为后续 RK 平台 Weston 配置与调试奠定理论基础。

1.1 Wayland 协议架构

Wayland 采用 客户端-合成器 直接通信的架构,摒弃了 X11 中 X Server 的中间转发模式。每个客户端直接向合成器提交缓冲区(Buffer),合成器负责合成并输出到显示硬件。

核心设计原则: 协议定义的是合成器与客户端之间的通信接口,而非像 X11 那样定义完整的窗口系统。渲染由客户端自行完成(通常通过 EGL/OpenGL ES 或 Vulkan),合成器仅做合成与显示。

Wayland 协议的核心组件包括:

组件 角色 说明
Wayland 协议 通信规范 定义客户端与合成器之间的消息格式、对象接口和事件机制
Wayland 库 (libwayland) 协议实现 提供客户端和服务器端的 API,负责消息序列化、反序列化和 socket 通信
合成器 (Compositor) 显示服务端 管理显示输出、接收客户端缓冲区、执行合成并送显
客户端 (Client) 应用端 使用 EGL/DRM 或 Vulkan 渲染内容,通过 wl_surface 提交缓冲区
Shell 扩展 窗口管理 定义窗口装饰、移动、缩放等用户交互行为(如 xdg-shell)
Wayland 协议架构图 Wayland 客户端 应用进程 EGL / Vulkan 渲染 wl_surface 提交 Wayland 合成器 Weston / Mutter / KWin 缓冲区合成 DRM/KMS 送显 Wayland 协议 (Unix Socket) DRM / KMS 内核驱动 显示硬件 (HDMI/DSI/eDP)
RK 平台要点: 在 Rockchip 平台上,Wayland 客户端通常通过 libmali 或 librga 进行硬件加速渲染,合成器则通过 DRM 接口直接操作显示控制器(VOP)和 HDMI/DSI 输出。

1.2 Weston 作为参考合成器的角色

Weston 是 Wayland 协议官方维护的参考合成器实现,由 Wayland 项目组直接开发。它不仅是协议正确性的验证工具,更是嵌入式显示开发的核心调试平台。

Weston 在 RK 平台开发中的关键角色:

  • 协议验证器: 确保 Wayland 协议在 RK 硬件上的正确实现,包括 wl_drm、linux-dmabuf 等扩展。
  • 合成参考实现: 提供标准的合成流程(逐像素合成、硬件 overlay 合成、直接扫描输出)。
  • 调试平台: 内置 weston-info、weston-debug、日志系统,便于分析显示链路问题。
  • 配置模板: weston.ini 配置文件涵盖输出分辨率、缩放、旋转、光标、输入设备等全部显示参数。
  • 扩展测试床: 支持 DRM 后端、FBDEV 后端、Wayland 后端、X11 后端,方便在不同显示环境下验证。
Weston 在 RK 显示栈中的角色 Wayland 应用 Qt / GTK / SDL / 自研 Weston 合成器 合成 / 配置 / 调试 DRM 后端 KMS / Plane / FB RK 显示驱动 VOP / HDMI / MIPI DSI RK 显示硬件 weston-info 协议/输出/输入查询 weston-debug 帧率/合成/日志
常见误区: Weston 虽然是参考实现,但并非性能最优。在 RK 平台上,生产环境通常会使用基于 Weston 二次开发的合成器,或直接使用 DRM 的 atomic API 进行硬件 overlay 合成以降低延迟。Weston 主要用于功能验证和调试。

1.3 Wayland 与 X11 的对比

理解 Wayland 与 X11 的差异,是掌握 Weston 配置与调试的前提。以下从架构、性能、安全、兼容性四个维度进行对比。

对比维度 X11 Wayland RK 平台影响
架构 客户端 ↔ X Server ↔ 合成器 ↔ 内核 客户端 ↔ 合成器 ↔ 内核 减少一次 IPC 转发,降低延迟
渲染路径 客户端渲染 → X Server 合成 → 送显 客户端渲染 → 直接提交缓冲区 → 合成器合成 → 送显 减少内存拷贝,适合 RK 低内存场景
安全模型 所有客户端可读取其他窗口内容(需扩展) 客户端只能看到自己的缓冲区 提升多应用隔离安全性
网络透明性 原生支持远程显示(X11 forwarding) 需额外实现(如 waypipe) 嵌入式场景通常不需要
硬件加速 通过 GLX / EGL 间接调用 直接使用 EGL / Vulkan,无中间层 更高效的 Mali GPU 调用
配置复杂度 xorg.conf 庞大,需配置输入/输出/加速 weston.ini 简洁,主要配置输出和输入 降低 RK 平台适配工作量
X11 vs Wayland 架构对比 X11 架构 客户端 A 客户端 B X Server 合成器 DRM 内核 Wayland 架构 客户端 A 客户端 B 合成器 DRM 内核 Wayland 减少 X Server 中间层,客户端直接与合成器通信,降低延迟和内存开销
RK 平台迁移建议: 从 X11 迁移到 Wayland/Weston 时,需重点关注:
• 输入设备:X11 使用 evdev 驱动,Wayland 通过 libinput 统一管理
• 窗口管理:X11 的窗口装饰由窗口管理器负责,Wayland 由 shell 扩展(如 xdg-shell)定义
• 屏幕捕获:X11 可通过 XShmGetImage 截屏,Wayland 需使用 wlr-screencopy 或 pipewire 扩展
• 多输出:X11 通过 RandR 管理,Wayland 通过 wl_output 协议和 weston.ini 配置

1.4 本章小结

Wayland 协议通过精简架构、减少中间层,为嵌入式显示提供了更低延迟、更高安全性的图形环境。Weston 作为参考合成器,在 RK 平台开发中承担协议验证、合成参考、调试平台和配置模板四大角色。与 X11 相比,Wayland 在渲染路径、安全模型和配置复杂度上具有明显优势,尤其适合资源受限的 RK 嵌入式场景。