• Wayland 源码解析之代码结构


     来源:http://blog.csdn.net/basilc/article/details/8074895

    获取、编译 Wayland 及其依赖库可参考 Wayland 官方网站的 Build 指南:http://wayland.freedesktop.org/building.html

    Wayland 实现的代码组成可以分成以下四部分:

    1.  Wayland 库

    Wayland 中最核心的部分,Wayland 协议的大部分实现位于这里。

    1)   工具程序(wayland-scanner)

    分析 Wayland 协议文件,并生成相应的头文件及代码文件。

    源码文件列表:

    wayland/src/scanner.c

    2)   工具库

    供其他库、程序使用的工具函数、接口、结构等。

    源码文件列表:

    wayland/src/connection.c                           

    wayland/src/wayland-util.c                         

    wayland/src/wayland-util.h                         

    wayland/src/wayland-os.c                           

    wayland/src/wayland-os.h                           

    wayland/src/wayland-private.h

    3)   Client 库

    供 Client 使用的桩接口(stub interfaces)及 event listener 结构定义。

    源码文件列表:

    wayland/src/wayland-protocol.c                     

    wayland/src/wayland-client.c

    4)   Server 库

    Wayland 核心协议的实现。

    源码文件列表:

    wayland/src/wayland-protocol.c                     

    wayland/src/wayland-server.c                       

    wayland/src/wayland-shm.c                          

    wayland/src/data-device.c                          

    wayland/src/event-loop.c

    5)   Cursor 库

    Cursor 相关功能的实现。不作为重点分析部分。

    源码文件列表:

    wayland/cursor/wayland-cursor.h

    wayland/cursor/wayland-cursor.c                       

    wayland/cursor/os-compatibility.c                     

    wayland/cursor/os-compatibility.h                     

    wayland/cursor/xcursor.c                              

    wayland/cursor/xcursor.h

    6)   公用头文件

    wayland/src/wayland-util.h

    wayland/src/wayland-server-protocol.h

    wayland/src/wayland-server.h  

    wayland/src/wayland-client-protocol.h             

    wayland/src/wayland-client.h         

    wayland/src/wayland-version.h

    wayland/src/wayland-egl.h

    2.      EGL 相关实现

    EGL surface 与 Waylandsurface 之间的互相转换,代码位于 mesa 中。

    1)   libEGL 中的代码

    mesa/src/egl/drivers/dri2/platform_wayland.c

    mesa/src/egl/wayland/wayland-drm/wayland-drm.c

    mesa/src/egl/wayland/wayland-drm/wayland-drm-protocol.c

    mesa/src/egl/wayland/wayland-drm/wayland-drm-client-protocol.h

    mesa/src/egl/wayland/wayland-drm/wayland-drm-server-protocol.h

     

    2)   libwayland-egl

    mesa/src/egl/wayland/wayland-egl/wayland-egl-priv.h

    mesa/src/egl/wayland/wayland-egl/wayland-egl.c

    3.      Weston (WaylandCompositor 的参考实现)

    1)  Compositor

    合成器的一个参考实现,代码较多,选取几个关键部分进行分析,如事件处理、图形输出等。

    重点分析的源码列表:

    weston/src/compositor.c

    weston/src/compositor-drm.c

    weston/src/evdev.c

     

    2)  Shell (作为Compositor的插件实现)

    可以认为是一个窗口管理器或桌面管理插件。

    重点分析的源码列表:

    weston/src/shell.c

    3)  Clients

    客户端程序,如 Terminal 等。不作为重点分析,仅在分析交互流程时,选取关键代码段进行分析。

    4.      协议

    一系列的 XML 文件,定义 Wayland的核心协议及扩展协议。

    核心协议:

    wayland/protocol/wayland.xml

    mesa/src/egl/wayland/wayland-drm/wayland-drm.xml(很重要,可以认为是核心协议)

    扩展协议(不作为重点分析对象):

    weston/protocol/desktop-shell.xml

    weston/protocol/tablet-shell.xml

    另外还有一些单元测试代码,位于 wayland 和weston 的tests 目录,主要用来测试通用的 utility 函数,查看这些代码对理解 utility 函数的用途是很有帮助的。

  • 相关阅读:
    CSS Nginx
    1 HTML入门
    Vue 高级使用
    Ajax快速入门
    JQuery快速入门
    02_Linux
    linux如何修改文件夹所属用户名和用户组
    max7219 八位数码管
    cmake qt hello word
    gcc section 标记
  • 原文地址:https://www.cnblogs.com/cnland/p/2861319.html
Copyright © 2020-2023  润新知