walyand學習筆記(五) weston的輸入輸出


對wayland的學習不是一蹴而就的,需要日積月累的不斷深入了解。千里之行,始於足下。日拱一卒是我堅持的做法。

今天在重溫weston的文章時,發現一個之前沒太留意的東西。那就是weston的主循環是用epoll機制在wait一系列的fd,這里面包括各種輸入設備的fd, udev monitor的fd, domain socket fd, listener fd, 以及timer fd和signal fd.

是的,timer和signal,以及eventfd也可以被抽象成fd, 然后被epoll監聽. 它們在linux 2.6.25版本后都加入到了內核的支持中。

timerfd: 可以實現定時器的功能 ,將定時器抽象成文件描述符,當定時器到期時,可以對其read, 這樣也可以放到監聽隊列的主循環中。

signalfd: 傳統的處理信號的方式是注冊信號處理函數,由於信號是異步的,可能需要考慮並發訪問,可重入的問題。signalfd 可以將信號抽象成文件描述符,當有信號發生時,可以被epoll監聽到,並可對其進行read.

eventfd: 實現了線程之間事件通知的方式。

輸入部分依賴的庫有:

libinput: 依賴mtdev, libudev, libevdev【這部分相對比較獨立,是一個輸入設備處理的框架,也可以被其它圖形系統使用,類似android的eventHub, 此外它還有pointer acceleration,touchpad support及gesture recognition等功能】

libxkbcommon: 主要用於鍵盤處理

listener fd和udev monitor 暫時還不清楚,后面再補充吧。


 

下面講一下weston的輸出,主要就是compositor backend這部分,它決定了合成完成后的結果怎么處置

weston_output是output設備的抽象,下面的backend會實現具體的output設備。

fbdev: 直接輸出到linux的framebuffer設備

headless: 和noop-renderer 配合使用,主要用於測試窗口邏輯。【類似powervr里面的nohardware build】

RPI: 用於raspberry pi平台

RDP: 用於遠程桌面

DRM: 桌面上一般用這個

x11: compositor作為x server的client, 可以讓wayland client運行在x11上

wayland: compositor 輸出作為另外一個wayland client, 實現嵌套的wayland compositor


 

下面講一下合成,也就是renderer backend這部分:

除了上面講到的專門用於測試邏輯的noop-renderer, 真正干活的主要是pixman-renderer【軟件渲染】和gl-renderer【硬件渲染】

主要對以下庫有依賴:

libEGL, libGLES: gl的運行時依賴

libdrm: 封裝KMS, GEM等接口【平台相關】

libffi: 用於在運行時根據調用接口描述生成函數跳板並調用

pixman: 用於像素操作

cairo: 軟件渲染庫,類似skia

libjpeg, libpng, libwebp: 用於加載各種圖片文件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM