如果在搜索引擎离搜索 DRM 映入眼帘的尽是Digital Rights Managemen,也就是数字版权加密保护技术。
这当然不是我们想要的解释。在类unix世界中还有一个DRM即The Direct Rendering Manager,它是DRI(Direct Rendering Infrastructure)框架的一个组件。而DRI的作用是为类Unix系统提供高效视频加速(很重要的用途是可以对3D渲染提供加速效果)。

DRI是由以下2个部分组成的(这2个在linux即可以编译进内核,也可以以模块形式存在):
1、通用的DRM驱动。
2、支持特定显卡的驱动。

DRM - Direct Rendering Manager

DRM是一个内核级的设备驱动,既可以编译到内核中也可以作为标准模块进行加载。DRM最初是在FreeBSD中出现的,后来被移植到Linux系统中,并成为Linux系统的标准部分。

DRM可以直接访问DRM clients的硬件。DRM驱动用来处理DMA,内存管理,资源锁以及安全硬件访问。为了同时支持多个3D应用,3D图形卡硬件必须作为一个共享资源,因此需要锁来提供互斥访问。DMA传输和AGP接口用来发送图形操作的buffers到显卡硬件,因此要防止客户端越权访问显卡硬件。

Linux DRM层用来支持那些复杂的显卡设备,这些显卡设备通常都包含可编程的流水线,非常适合3D图像加速。内核中的DRM层,使得这些显卡驱动在进行内存管理,中断处理和DMA操作中变得更容易,并且可以为上层应用提供统一的接口。

DRM代码位置

因为Linux kernel内部接口和数据结构可能随时发生变化,所以DRI模块要针对特定的内核版本进行编译。kernel 2.6.26之后的版本,DRM(DRI kernel模块)源码存放在kernel/drivers/gpu/drm中;在这之前的版本,源码在kernel/drivers/char/drm目录中。

每一个3D硬件加速驱动都包含一个内核模块,并且都需要使用DRM支持代码。

DRI - Direct Rendering Infrastructure

DRI并不是一个软件模块。相反DRI是由一系列的软件模块组成。引入DRI的目的是为了3D图形加速,DRI是一个软件架构,用来协调linux kernel,X windows系统,3D图形硬件以及OpenGL渲染引擎之间的工作。

DRM支持DRI的方式

DRM以三种方式支持DRI

  1. DRM提供到显卡硬件的同步访问。Direct rendering system有多个实体(比如X server,多个direct-rendering客户端,以及kernel)竞争访问显卡硬件。PC类的显卡在多个实体访问显卡硬件时会使用锁。DRM为每个显卡设备提供了一个锁,来同步硬件的访问。比如X server正在执行2D渲染,此direct-rendering客户端执行一个软件回调,这个软件回调会读写frame buffer。对于一些高端卡来说,由于硬件内部本身会对访问命令做排序,因此并不需要使用这个锁。
  2. 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允许映射的区域。
  3. 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部分。

Linux中的DRM的更多相关文章

  1. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  2. 在 Linux 中安装 Oracle JDK 8 以及 JVM 的类加载机制

    参考资料 该文中的内容来源于 Oracle 的官方文档 Java SE Tools Reference .Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以直接找 ...

  3. Linux中find常见用法示例

    ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数: pathname: find命 ...

  4. Linux中检索文件

    1 , Use locate command It is a fast way to find the files location, but if a file just created ,it w ...

  5. 如何在Linux中搭建禅道8.4.1(httpd+php+mysql)

    1.安装httpd 命令:yum install httpd 然后一路y即可 2.安装php 命令:yum install php   3.安装php-mysql 命令:yum install php ...

  6. Linux中的用户和用户组

      在Linux中,有三种用户: Root 用户:也称为超级用户,对系统拥有完全的控制权限.超级用户可以不受限制的运行任何命令.Root 用户可以看做是系统管理员. 系统用户:系统用户是Linux运行 ...

  7. linux中shell变量$#,$@,$0,$1,$2的含义解释

    linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...

  8. 在linux中设置静态ip地址

    在linux中设置静态ip地址1.在终端中输入:vi /etc/sysconfig/network-scripts/ifcfg-eth0 2.开始编辑,填写ip地址.子网掩码.网关.DNS等[root ...

  9. windows和linux中搭建python集成开发环境IDE——如何设置多个python环境

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

随机推荐

  1. TP5 常用-方法技巧

    1.插入数据成功返回该数据的ID $add=db('user')->insertGetId($data);   //insert($data)  方法获得是插入数据返回的影响条数  2.使用重定 ...

  2. Tomcat8远程访问manager,host-manager被拒绝403

    Tomcat部署在服务器之后在服务器本地访问manager和host-manager成功(即127.0.0.1:8080或者localhost:8080),但使用测试主机访问tomcat的manage ...

  3. 【django之orm小练习】

    作业1 创建单表Book表,要求字段: 1 主键 nid 2 书名 title 3 价格 price 4 出版日期 pubDate 5 出版社 publisher(普通字符串字段) class Boo ...

  4. 4.ES核心慨念

    一. 和lucene的关系 lucene是最先进,功能最强大的搜索库.但是使用复杂(要深入理解其中原理. elasticsearch,基于lucene,隐藏复杂性,提供简单易用的restful api ...

  5. 在.NetCore中使用Myrmec检测文件真实格式

    Myrmec 是什么? Myrmec 是一个用于检测文件格式的库,Myrmec不同于其它库或者手写检测代码,Myrmec不依赖文件扩展名(在实际使用中,你的用户很可能使用虚假的扩展名欺骗你的应用程序) ...

  6. wenpack-simple+elementUI配置

    首先跟着element官方文档走一遍 注意把.babelrc改成这样 { "presets": [ ["env", { "modules": ...

  7. 【模板小程序】循环方阵构造(仿《剑指offer》循环矩阵打印)

    /* 本程序说明: 输入:方阵大小n,输出:n*n的旋转方阵 举例: 当n=2时,输出: 1 2 4 3 当n=4时,输出: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 ...

  8. SpringMVC之Http标准的头部信息

  9. R语言-广义线性模型

    使用场景:结果变量是类别型,二值变量和多分类变量,不满足正态分布  结果变量是计数型,并且他们的均值和方差都是相关的 解决方法:使用广义线性模型,它包含费正太因变量的分析 1.Logistics回归( ...

  10. github上fork了别人的项目后,再同步更新别人的提交

    我从github网站和用Git命令两种方式说一下. github网站上操作 打开自己的仓库,进入code下面. 点击new pull request创建.  选择base fork 选择head fo ...