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部分。

转载链接:http://blog.csdn.net/kickxxx/article/details/19188711

GPU/DRM 简介相关推荐

  1. Linux内核4.14版本——drm框架分析(1)——drm简介

    目录 1. DRM简介(Direct Rendering Manager) 1.1 DRM发展历史 1.2 DRM架构对比FB架构优势 1.3 DRM图形显示框架 1.4 DRM图形显示框架涉及元素 ...

  2. GPU 计算 - GPU 优化简介

    GPU 优化简介 原文 - An Introduction to GPU Optimization 采用 GPUs 加速简单的计算任务. 计算机处理的很多任务都会遇到大量的计算,耗时较多的问题:而且, ...

  3. Clone succeeded, but checkout failed. drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.c

    错误信息 拉取linux的git源码到windows的时候,报下面的错 drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.c error: invalid pat ...

  4. MTK支持的DRM简介

    一.DRM 基本信息: 1.MTK支持的DRM类型 a.OMA DRM V1.0 (Open Mobile Alliance) DRM b.Widevine(Google Widevine) L32. ...

  5. CPU和GPU的简介

    1.CPU和GPU简要介绍: CPU,是电脑的中央处理器.主要是负责多任务管理.调度,它是领导者,负责指挥.CPU的运算速度取决于请了多么厉害的教授,计算能力方面没有GPU强. GPU,是电脑的图形处 ...

  6. CPU/GPU/GPGPU简介

    CPU:中央处理器,一种通用处理器,它无所不能,但是在某些特定场合,它的能力又是相对有限的. GPU: Graphic Processing Unit,是显卡,即"图形处理器". ...

  7. Arm GPU Mali简介

    写在最前 因为华为项目的原因,最近开始了解Arm 的 GPU,也就是Mali.Mali的主要架构有两个,上一代架构是Midgard,新一代架构是Bifrost,这两个名字均出自北欧神话,一个是人间,一 ...

  8. VMware GPU虚拟化简介

    GPU虚拟化主要针对在桌面虚拟化的一些研发和设计工作人员,这些人员需要进行大型的3D设计,从而使用普通的桌面虚拟化无法满足其主要的需求.所以必须采用在虚拟化平台增加GPU,通过GPU虚拟化的方式进行. ...

  9. matlab gpu cpu 快,(Matlab)GPU计算简介,及其与CPU计算性能的比较

    1.GPU与CPU结构上的对比 原文: Multicore machines and hyper-threading technology have enabled scientists, engin ...

最新文章

  1. 微信小程序记账应用实例课程(完结)——对接服务端账目CRUD
  2. arcgis engine 计算距离面积体积
  3. 怎样在python代码中输入π_鼠标自动点击、键盘自动输入?几行Python代码搞定
  4. Python_基础_4
  5. Makefile写法
  6. cursor_sharing='SIMILAR'将被废弃
  7. Left 4 Dead升级补丁总汇(3663-3986)
  8. 关于 underscore 中模板引擎的应用示例
  9. 从委托而起(二)认识委托
  10. 还没学python_2个月过去了!还没学会python?用《流畅的python》15天带你学会
  11. java listutils_Java的list自定义工具类ListUtils
  12. Eclipse在当前行之上插入一行
  13. 【JAVA复习系列】第一部分
  14. 世界上手机号码最长和最短的国家
  15. 收入增速环比抬升!从业务数据透视运营商转型战略布局
  16. ubantu20.04安装PCL
  17. 关于用ADS设计PA中电容的选择
  18. photoshop ps 替换图片文字
  19. 爬虫,爬取猫眼电影Top100的电影名与评分
  20. ①. SpringBoot整合PageOffice实现在线编辑Word和Excel

热门文章

  1. Docker架构、镜像及容器的安装和基本操作
  2. 浏览器对于前端的作用
  3. CCF NOI1014 写评语
  4. java中各进制之间的转换(十进制转十六进制、十进制转二进制、二进制转十进制、二进制转十六进制)...
  5. 一键生成表结构说明文档的参考,数据字典生成方式参考
  6. 分治递归逆序数_[模板] 归并排序 逆序数 分治
  7. 【转载】DL图片预处理
  8. Oracle访问远程服务器的数据库
  9. 面试的算法2(C语言)(整理)
  10. RT ROM boot简介