少于 1 分钟阅读 次阅读

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 的图形栈变得更安全、也更现代了。

留下评论