什么是DRM —— 直接渲染管理器
DRM 指的是 Direct Rendering Manager(直接渲染管理器)。
在 Linux 系统里,DRM 是内核里的一个超级核心的子系统,专门用来管理和调度 GPU(显卡)的。咱们通俗地把它的来龙去脉捋一捋:
1. 为什么需要 DRM?(以前的坑)
在早期的 Linux 里,图形界面的老大是 X Server(X11)。那个时候,X Server 是运行在用户态的,但它却直接去操控显卡的硬件寄存器。 这就有个大问题:如果系统里只有 X Server 一个人玩显卡还行,但如果别的程序也想直接用硬件加速,或者系统内核自己也想往屏幕上打点日志,大家一抢,显卡就懵了,甚至系统直接死机。 所以,Linux 开发者觉得不能这么乱搞,就把显卡的核心管理权收归到了内核态,这个内核里的“显卡交警”就是 DRM。
2. DRM 到底管什么?
DRM 作为一个内核模块,暴露出像 /dev/dri/card0 这样的设备节点给上层。它的核心工作可以分成三大块:
- 内存管理(GEM/TTM): 显卡有自己的显存(或者和 CPU 共享内存)。DRM 负责给各个想画图的程序分配显存。它能确保你写的 Qt 程序和别的后台程序都在各自的显存区域里画图,谁也别踩谁的内存。
- 指令调度(Rendering): 大家都想用 GPU 做 3D/2D 渲染,DRM 负责排队。它接收上层(比如 OpenGL ES)发来的渲染命令,安全、有序地喂给 GPU 硬件去执行。
- 显示模式设置(KMS,Kernel Mode Setting): 这个咱们刚才提过,它是 DRM 里非常重要的一部分。屏幕的分辨率(比如 1920x1080)、刷新率(60Hz)、色彩格式,以及要把显存里的哪块数据(Buffer)送到哪个显示接口(HDMI、MIPI、eDP),都是 KMS 负责配置的。
3. DRM 在咱们系统里的位置
你可以把 DRM 看作是硬件与软件之间最坚实的那堵墙。
- 墙下面:是 GPU 硬件、显示控制器(VOP)、HDMI/MIPI 接口。
- 墙里面(内核):就是 DRM 驱动(比如 Rockchip 专门针对自家芯片写的
rockchip-drm驱动)。 - 墙上面(用户态):就是
libdrm这个库。无论你是用 Wayland(Weston)、X11,还是咱们刚才说的eglfs,底层统统都要调用libdrm的接口,通过它去和内核里的 DRM 通信。
总结一下:
以前没有 DRM 的时候,大家像土匪一样直接去抢显卡的控制权;有了 DRM 之后,不管你是 Wayland 管家,还是 eglfs 这种单干户,都得规规矩矩地向内核的 DRM 递交申请,由 DRM 统一分配 GPU 算力和屏幕输出。它让 Linux 的图形栈变得更安全、也更现代了。
留下评论