若是在搜索引擎離搜索 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部分。網站