最近正在研究 Wayland 的实现,为此准备写一个关于 Wayland 实现分析的一系列文章,目的主要有两个:一是加强自己的理解;二是供同好观摩指教讨论。
下面是一个写作提纲(也可以看作是一个写作计划):
1. Wayland 简介
主要介绍 Wayland 是什么、Wayland 架构、Wayland 与 X 的比较等。
2. 知识背景
主要介绍 Linux 下的图形栈(要完全理解 Wayland,需要深刻理解 Linux 图形栈);
另外也会介绍在 Wayland 中频繁使用的 C 语言技术。
3. Wayland 源码解析
1) 代码框架
分析 Wayland 代码的目录结构,各个主要模块的功能。
2) 协议分析
由于 Wayland 首先是一个协议(compositor 与 clients 通信),所以这里分析如何解析协议(XML文件),如何用 C 语言实现这些协议。
3) Wayland 中工具函数(工具类)的实现
分析Wayland 中使用的主要工具函数(工具类),如 wl_list、wl_array、wl_map、wl_connection等。
4) Server 端的实现(也就是 Compositor 的实现)
分析 Server 端的主要实现,包含两部分:wayland 库的实现和 Weston 的实现(Wayland Compositor 的参考实现)。
5) Client 端的实现
重点分析 Wayland client 库。
6) Egl 实现
主要分析 Egl surface 与 wayland buffer对象之间的转换。
会对 egl 与 OPEN GLES 作一些简单介绍。
7) 执行流程
分析 Compositor 与 Client 的执行流程。
8) 通信机制
分析 Composirot 与 Client 之间如何进行通信。
9) 输入事件处理流程
分析输入事件的处理流程,如键盘事件、鼠标事件、Touch 事件等。
10) 图形输出处理流程
包括两部分:通过共享内存绘制图形与通过 DRM 绘制图形
11) DND (Drag & drop)处理
分析 Wayland 中的 DND 处理。