?來源: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 函數的用途是很有幫助的。