【ARM-Linux开发】DRM学习(一)
http://www.landley.NET/kdocs/htmldocs/drm.html
非常好的一个链接,直接把DRM说的很透。很多API的功能都写全了。
Table of Contents
- 1. Introduction
- 2. DRM Internals
-
- Driver Initialization
- Memory management
- Mode Setting
- KMS Initialization and Cleanup
- Mode Setting Helper Functions
-
- Helper Functions
- CRTC Helper Operations
- Encoder Helper Operations
- Connector Helper Operations
- Modeset Helper Functions Reference
- fbdev Helper Functions Reference
- Display Port Helper Functions Reference
- EDID Helper Functions Reference
- Rectangle Utilities Reference
- Flip-work Helper Reference
- VMA Offset Manager
- KMS Properties
- Vertical Blanking
- Open/Close, File Operations and IOCTLs
- Command submission & fencing
- Suspend/Resume
- DMA services
- 3. Userland interfaces
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
- 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部分
最新文章
- 如何利用mono把.net windows service程序迁移到linux上
- WPF打包32位和64位程序 运行在ghost WIN7上问题
- web应用动态文档技术
- chrome经常崩溃解决过程
- sql server 去除(替换)空格,回车,换行 函数
- TSql HierarchyID 数据类型用法
- [UWP]涨姿势UWP源码——IsolatedStorage
- SVN权限管理
- iOS系统app崩溃日志手动符号化
- Ext grid checkbox 分页 翻页 勾选 问题
- 在Ubuntu下安装imx6linux系统的交叉编译环境遇到的问题总结
- 内核MKDEV(MAJOR, MINOR)宏
- ehcache集群的配置
- android 细节之 旋转动画
- url操作一网打尽(一)
- Material Design学习-----CollapsingToolbarLayout
- MySQL中横表和竖表相互转换
- [翻译] .NET Standard 2.1 公布
- web api token验证理解
- Delphi2010怎样获取程序内部自身版本?
热门文章
- [React + GraphQL] Use useLazyQuery to manually execute a query with Apollo React Hooks
- Nginx 负载均衡条件下 Tomcat 共享Session (Java)(一)
- P3688 [ZJOI2017] 树状数组 【二维线段树】
- Spring注解不生效
- 分布式的一致性(分布式事物)-------2PC详述
- js即时函数在异步回调中的运用
- vue组件的原理
- Go By Example-值类型
- windows 家庭版 开启Hyper-V
- 【Java】浅谈Java内部类(转载)