在Linux内核中,可使用fbdev的API管理图形适配器的帧缓冲区,但是它无法处理基于GPU的现代显卡的3D加速功能。DRM是Linux内核的一个子系统,最初是作为X Server DRI的内核空间组件开发的,后续也被用于其它图形栈(如Wayland)。DRM负责与现代显卡的GPU接口交互,用户程序可以使用DRM提供的API,向GPU发送命令和数据,实现类显示模式设置的操作、GPU硬件加速的3D渲染、视频解码和GPGPU(通用GPU)计算。
下表介绍了DRM框架中涉及到的部分名词:
缩写 | 全称 | 解释 |
DRI | Direct Rendering Infrastructure | 基层直接渲染 |
DRM | Direct Rendering Manager | 直接渲染管理器 |
FBDEV | Framebuffer Device | 帧缓冲设备 |
GEM | Graphics Execution Manager | 图形执行管理器 |
KMS | Kernel Mode Setting | 内核显示模式设置 |
UMS | User-space Mode Setting | 用户空间显示模式设置 |
V4L2 | Video For Linux 2 | linux视频设备驱动 |
Linux DRM框架包括两部分:DRM core和DRM driver。DRM core实现了DRM的基本框架,可以注册DRM driver,同时为用户空间提供了一组ioctl。DRM driver主要实现它所支持的CPU/GPU等硬件部分驱动,提供DRM core未涵盖的或扩展(仅在此类硬件上可用)的ioctl实现。用户空间程序可以使用libdrm访问DRM框架的各种接口。
由于在实际项目中只调试过libdrm和Linux DRM,后续先介绍这两部分。下图摘抄自网络,介绍了DRM框架。