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) |
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 平台上,生产环境通常会使用基于 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 平台适配工作量 |
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 配置
• 输入设备: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 嵌入式场景。