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: 用于加载各种图片文件

 

posted on 2021-12-04 11:05  疾速瓜牛  阅读(1431)  评论(0编辑  收藏  举报

导航