http://www.landley.NET/kdocs/htmldocs/drm.html

非常好的一个链接,直接把DRM说的很透。很多API的功能都写全了。

Table of Contents

1. Introduction2. DRM Internals
Driver Initialization
Driver InformationDriver Load
Memory management
The Translation Table Manager (TTM)The Graphics Execution Manager (GEM)
Mode Setting
Frame Buffer CreationOutput PollingLocking
KMS Initialization and Cleanup
CRTCs (struct drm_crtc)Planes (struct drm_plane)Encoders (struct drm_encoder)Connectors (struct drm_connector)CleanupOutput discovery and initialization exampleKMS API Functions
Mode Setting Helper Functions
Helper FunctionsCRTC Helper OperationsEncoder Helper OperationsConnector Helper OperationsModeset Helper Functions Referencefbdev Helper Functions ReferenceDisplay Port Helper Functions ReferenceEDID Helper Functions ReferenceRectangle Utilities ReferenceFlip-work Helper ReferenceVMA Offset Manager
KMS PropertiesVertical BlankingOpen/Close, File Operations and IOCTLs
Open and CloseFile OperationsIOCTLs
Command submission & fencingSuspend/ResumeDMA services
3. Userland interfaces
Render nodesVBlank event handling

http://www.docin.com/p-908833121.html

讲解KMS的使用。

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

转载于:https://www.cnblogs.com/huty/p/8517450.html

【ARM-Linux开发】DRM学习(一)相关推荐

  1. 移植中文TTS(ekho)到ARM linux开发板

    移植ekho到arm linux,实现将中文转换为.wav格式的语音文件. 移植开源库libsndfile到arm linux开发板 1. 下载压缩源码包libsndfile-1.0.28.tar.g ...

  2. ARM嵌入式开发板学习路线指引

    如何入门嵌入式?嵌入式开发学习方法步骤  如何入门嵌入式?嵌入式开发学习路线指引  嵌入式开发就是指在嵌入式操作系统下进行开发,一般常用的系统有linux,android.  平台:Cortex-A9 ...

  3. linux开发需要学习什么,linux开发需要掌握哪些知识?

    原标题:linux开发需要掌握哪些知识? 嵌入式linux开发的应用是非常广泛的.而且linux是开源的,各种技术也是非常成熟的.不过很多初学者在学习linux开发过程中感觉非常难,那么对于linux ...

  4. linux下s3c2440开发板,SAMSUNG S3C2440 ARM LINUX 开发板 上手初体验 --开发环境搭建

    1,linux开发环境搭建 2,程序测试 easyOpentag驱动安装,打开连接,选择ARM-linux 1,环境搭建 我的系统版本 root@ubuntu:~# lsb_release -a No ...

  5. QEMU搭建ARM linux开发环境

    qemu可以用来模拟嵌入式的开发板,很多的嵌入式开发技巧完全可以抛开开发板来做实验,甚至可以直接调试驱动.内核调试就更加方便了. 主要参考了:https://www.jianshu.com/p/948 ...

  6. 正点原子 linux 开发板学习 uboot 篇 一

    源码选择 出厂可以直接使用 原子出厂源码, 出厂源码会随时修复bug或者添加新的驱动以兼容正点原子的其他模块 学习的时候 U-Boot 烧写与启动 uboot 启动位置根据拨码开关 烧写 通过.imx ...

  7. 极速搭建周立功IMX283A ARM Linux开发环境(1)

    最近手特别痒,想自己买个开发板玩,由于周立功的imx283a的资料资源特别丰富,所以选择上手,以后会记录学习过程 搭建环境,阅读ARM9,了解接口 i.mx283A和i.mx287A比较 安装完成以后 ...

  8. 嵌入式ARM Linux开发板自启动,跳过输入root用户名和密码

    1. 编译autologin.c程序. autologin.c文件内容 #include <unistd.h> int main() { execlp("login", ...

  9. 正点原子stm32f407开发板pcb图_#试用名单公布#正点原子ARM Linux开发板I.MX6ULL

    活动报名链接: http://www.cirmall.com/bbs/thread-161572-1-1.html 恭喜以下五位获得试用资格,管理员会将确认邮件发送至各位获奖者邮箱,请在3个工作日内回 ...

  10. arm -linux开发产品,arm是什么意思_arm的翻译_音标_读音_用法_例句_爱词霸在线词典...

    全部 四级 六级 高考 考研 Familiar consumer products are being adopted by businesses, government and the armed ...

最新文章

  1. cmake的使用-为什么要使用CMake
  2. 如何在客户端清除fileUpLoad控件的文件路径
  3. Linux系统【二】exec族函数及应用
  4. 网络诈骗是大数据的“原罪”吗
  5. 解决zabbix-4系列监控图形中文乱码问题
  6. “机海战术”已死!后智能手机时代靠什么才能赢?
  7. 深度学习的应用:语音识别、图像理解、自然语言处理
  8. SSL-Explorer 安装配置
  9. http接口开发与调用案例
  10. GIT 操作中 Reinitialized existing Git repository in.......解决方法?
  11. android 模拟器 电脑配置,手机安卓模拟器多开对电脑配置要求与占用浅谈
  12. css内联样式外联样式嵌套样式区别
  13. 配置和google浏览器版本一直的webdriver
  14. plc仿真实训软件_博途STEP7仿真软件与真实PLC的区别
  15. 蓝桥杯python组——明码
  16. chorme唤起Java开发的本地程序全采坑记
  17. exls表格搜索快捷键_excel搜索快捷键 常用的excel快捷键有哪些
  18. Java设计模式(六)装饰器模式-与代理模式的区别-项目实战应用
  19. 黑客电影《我是谁:没有绝对安全的系统》正片(含下载)
  20. 关于百度搜索引擎优化的常见问题

热门文章

  1. hue集成mysql报错_hue集成hive访问报database is locked
  2. Spring mvc @RequestHeader
  3. click Documenting Scripts
  4. Python datetime timedelta
  5. Flask session API
  6. java 类变量方法实例对象方法
  7. Sphinx 文档例子
  8. CentOS7系统服务管理systemctl
  9. 均方根误差不超过_快速平方根倒数算法
  10. 西门子v90伺服说明书_干货 | 西门子1200与V90伺服PROFINET通信故障解决方法