Linux显示系统框架(Direct Rendering Infrastructure)
首先介绍一下,Linux显示系统框架DRI(Direct Rendering Infrastructure),它涉及一些不同层次的专有名词如下:
最底层,在GPU内部:
- Framebuffer:一种底层的显示缓存,具体细分为如颜色缓存、深度缓存等多种,在这些缓存的共同作用下,最终形成在屏幕上显示的图像;
Linux内核层:
- DRM(Direct Rendering Manager):主要负责负责数据流,即通过软件或硬件加速,生成最终目标图像,存储在Framebuffer中。
- KMS(Kernel Mode Setting):主要负责控制流,根据显示器类型以及显示模式设置,将生成的Framebuffer数据信息送到显示端口上(VGA、HDMI等)。
- Libdrm库:Kernel将这DRM/KMS抽象出来,封装成libdrm库供上层的Display Server使用。
中间件层:
- OpenGL:简单理解为它是一个操作图形、图像的API规范;
- OpenGL ES:是OpenGL的嵌入式版本,适用于在低功耗显示设备渲染高效的2D、3D 图形,当然需要GPU的驱动支持;
- Vulkan:是另一种2D、3D操作图形、图像的API规范;
- Mesa:是一种开源的OpenGL的库实现,OpenGL是接口规范,Mesa是具体实现;
最上层,应用程序及框架:
- Display Server:一个普通的应用程序 client 通常不会直接与 KMS 进行交互,而是先和 display server(例如 X11 的 Xorg、Wayland等)进行交互, display server 负责将多个 client 的图像合成成一张图像,并将这张图像通过 Libdrm 的接口提交给内核。
Linux显示系统的框架如下图