若是在搜索引擎离搜索 DRM 映入眼帘的满是Digital Rights Managemen,也就是数字版权加密保护技术。
这固然不是咱们想要的解释。在类unix世界中还有一个DRM即The Direct Rendering Manager,它是DRI(Direct Rendering Infrastructure)框架的一个组件。而DRI的做用是为类Unix系统提供高效视频加速(很重要的用途是能够对3D渲染提供加速效果)。
DRI是由如下2个部分组成的(这2个在linux便可以编译进内核,也能够以模块形式存在):
一、通用的DRM驱动。
二、支持特定显卡的驱动。
DRM - Direct Rendering Manager
DRM是一个内核级的设备驱动,既能够编译到内核中也能够做为标准模块进行加载。DRM最初是在FreeBSD中出现的,后来被移植到Linux系统中,并成为Linux系统的标准部分。linux
DRM能够直接访问DRM clients的硬件。DRM驱动用来处理DMA,内存管理,资源锁以及安全硬件访问。为了同时支持多个3D应用,3D图形卡硬件必须做为一个共享资源,所以须要锁来提供互斥访问。DMA传输和AGP接口用来发送图形操做的buffers到显卡硬件,所以要防止客户端越权访问显卡硬件。
git
Linux DRM层用来支持那些复杂的显卡设备,这些显卡设备一般都包含可编程的流水线,很是适合3D图像加速。内核中的DRM层,使得这些显卡驱动在进行内存管理,中断处理和DMA操做中变得更容易,而且能够为上层应用提供统一的接口。编程
DRM代码位置
由于Linux kernel内部接口和数据结构可能随时发生变化,因此DRI模块要针对特定的内核版本进行编译。kernel 2.6.26以后的版本,DRM(DRI kernel模块)源码存放在kernel/drivers/gpu/drm中;在这以前的版本,源码在kernel/drivers/char/drm目录中。windows
每个3D硬件加速驱动都包含一个内核模块,而且都须要使用DRM支持代码。安全
DRI - Direct Rendering Infrastructure
DRI并非一个软件模块。相反DRI是由一系列的软件模块组成。引入DRI的目的是为了3D图形加速,DRI是一个软件架构,用来协调linux kernel,X windows系统,3D图形硬件以及OpenGL渲染引擎之间的工做。
数据结构
DRM支持DRI的方式
DRM以三种方式支持DRI架构
- DRM提供到显卡硬件的同步访问。Direct rendering system有多个实体(好比X server,多个direct-rendering客户端,以及kernel)竞争访问显卡硬件。PC类的显卡在多个实体访问显卡硬件时会使用锁。DRM为每一个显卡设备提供了一个锁,来同步硬件的访问。好比X server正在执行2D渲染,此direct-rendering客户端执行一个软件回调,这个软件回调会读写frame buffer。对于一些高端卡来讲,因为硬件内部自己会对访问命令作排序,所以并不须要使用这个锁。
- DRM在访问显卡硬件时,强制执行DRI安全测策略。X server以root权限运行,在访问显卡的framebuffer和MMIO区域时,会用/dev/mem映射这些区域。direct-rendering 客户端,并非运行在root权限的,可是仍然须要相似的映射。DRM设备接口容许客户端建立这些映射,可是必须遵照如下限制: *仅当客户端链接到X server时才能映射这些区域,这就迫使direct-rendering客户端遵照正常的X server安全策略。 * 仅当客户端可以打开/dev/drm?时才能够映射这些区域。这容许系统管理员能够配置direct rendering访问,仅可信的用户才能访问。 * 客户端只能映射X server容许映射的区域。
- DRM提供了一个通用的DMA引擎。大部分现代PC类计算机的显卡硬件提供command FIFO的DMA访问。DMA 访问比MMIO访问有更好的吞吐量性能。对于这些显卡,DRM 提供的DMA引擎包含下面的features: *
DRM和DRI关系

早期的Direct Rendering Infrastructure框架

当前的Direct Rendering Infrastructure性能
咱们能够看出DRM是DRI的一个组成部分,DRI同时还包含kms以及OPenGLES DRI driver部分。网站