如何理解显示卡的驱动模块(DDX,DRM,DRI,XVMC)

1)DDX是什么
DDX是X服务器的2D驱动模块,例如via_drv.so。
2D的显示加速,包括xvideo也是由它负责。
它会初始化硬件,设置屏幕分辨率,色深,刷新频率等。在屏幕分辨率改变这样的操作,也是通过它去调用BIOS功能加以实现的。

2)DRM和DRI是什么
DRM是内核提供的模块。例如via显卡有个via.ko的模块就是drm的模块,所有对应某个显卡的内核模块都有一个父亲,是drm.ko。DRM作用很大,它可以知道显卡的中断以及DMA存取信息,并且能处理AGP和帧缓冲内存的分配。这个是核心和基础,如果nvidia提供了nvidia.ko的源代码,就公开了它所有的秘密了。
那DRI是什么呢?DRI的主要作用是让X客户机和X服务器直接控制硬件用的,为了确定屏幕哪个位置不用画图,哪个位置要画,DRI还提供了窗口位置大小盒怎样叠加的信息。因为DRI的应用程序都会对硬件加锁以独占的方式进行显卡硬件的操作,所以一旦异常,整个系统就很有可能死锁。至于DRI的应用程序如何同DRM内核模块进行通信,实际上是使用了libdrm库。
上面提到的是DRI绕过X协议做了一些事情。其实DRI也提供了X协议,供X客户机与X服务器通信使用。这点就和传统的X应用程序架构类似了。(这个似乎就是glx,以及aiglx的基础了。glx和alglx是实现类似vista 3D桌面所使用的基本技术。)
Linux OpenGL 3D的支持就是通过DRI实现的,最流行的就是Mesa了,是它提供了libGL.so给应用程序使用,使他们能够实现3D加速。

3)XVMC是什么?
为了加速mpeg2的解码,尤其为了实现1920*1080的高清全帧解码,很多显卡提供了mpeg硬件解码单元。而XVMC就是使用这个单元的一套规则。
在用户空间存在的就是类似libviaXvMC.so,libviaXvMCPro.so这样的库,它们负责和内核的DRM模块打交道,从而能使用硬件提供的mpeg解码加速功能。而每块视频卡对应的用户空间的xvmc库都不同,所以XvMC提供了一个包装盒,libXvMCW.so,它会向ddx询问应该使用哪个共享库,如果ddx没有回答,它就会使用/etc/X11/XvMCConfig文件来确定。

如何理解显示卡的驱动模块(DDX,DRM,DRI,XVMC)的更多相关文章

  1. [Swift]LeetCode950. 按递增顺序显示卡牌 | Reveal Cards In Increasing Order

    In a deck of cards, every card has a unique integer.  You can order the deck in any order you want. ...

  2. leetcode《按递增顺序显示卡牌》

    题目描述: 牌组中的每张卡牌都对应有一个唯一的整数.你可以按你想要的顺序对这套卡片进行排序. 最初,这些卡牌在牌组里是正面朝下的(即,未显示状态). 现在,重复执行以下步骤,直到显示所有卡牌为止: 从 ...

  3. Leetcode950. Reveal Cards In Increasing Order按递增顺序显示卡牌

    牌组中的每张卡牌都对应有一个唯一的整数.你可以按你想要的顺序对这套卡片进行排序. 最初,这些卡牌在牌组里是正面朝下的(即,未显示状态). 现在,重复执行以下步骤,直到显示所有卡牌为止: 从牌组顶部抽一 ...

  4. 删除Ati显卡桌面右键菜单(配置可交换显卡,显示卡属性,图形选项,图形属性)

    Win+R 打开注册表 依次找到 HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers 保留Gadgets.New.Sh ...

  5. 移动端布局:视口viewport的理解

    移动端开发中,有一些基本概念需要理解清楚,才能更好的组织编程逻辑.在刚接触时,移动端视口的缩放和rem单位的缩放搞混淆了,弄得自己很蒙圈.所以仔细总结下自己的理解. 移动端的适配,我理解为两点: 第一 ...

  6. 经典]Linux内核中ioremap映射的透彻理解【转】

    转自:http://blog.csdn.net/lanyang123456/article/details/7403514 几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器.状态寄 ...

  7. 深入理解 iOS Rendering Process

    本文将从 OpenGL 的角度结合 Apple 官方给出的部分资料,介绍 iOS Rendering Process 的概念及其整个底层渲染管道的各个流程. 相信在理解了 iOS Rendering ...

  8. Linux Graphic DRI Wayland 显示子系统

    转:https://blog.csdn.net/u013165704/article/details/80709547 1. 前言 上篇文章(Linux graphic subsytem(1)_概述) ...

  9. Linux图像系统框架-理解X11与Qt的层次结构

    转:http://blog.csdn.net/kjfureone/article/details/52848550 1. 前言 图形子系统是linux系统中比较复杂的子系统之一:对下,它要管理形态各异 ...

随机推荐

  1. “System.AccessViolationException”类型的未经处理的异常在 System.Data.dll 中发生 其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏

    用管理员身份运行CMD:netsh winsock reset就可以解决

  2. c++ 程序设计question 001:我们的开发工具是什么?

    我们使用的开发工具是dev cpp (c plus plus),这是一个集成开发环境,我们称之为IDE(integrated development environment)

  3. Linux 命令大全提供 500 多个 Linux 命令搜索

    Linux Command 在这里维持一个持续更新的地方 516 个 Linux 命令大全,内容包含 Linux 命令手册.详解.学习,值得收藏的 Linux 命令速查手册.请原谅我写了个爬虫,爬了他 ...

  4. 微信小程序text标签

    最近在做小程序,使用<text>标签的时候发现里面的文本text-family不生效, 经过试验,发现直接在text标签的class设置不生效,可以在外层包一个父元素就可以设置了. < ...

  5. java中char类型转换成int类型的两种方法

    方法一: char ch = '9'; if (Character.isDigit(ch)){ // 判断是否是数字 int num = Integer.parseInt(String.valueOf ...

  6. wamp mysql服务意外停止

    出现问题: MySQL启动一段时间之后,意外停止.可以再次启动,但是过不了多久又自动停止了. 发现问题: 查看错误日志,发现以下问题: 解决方案: 网上网友分享以下操作: 1.删除data文件夹里面的 ...

  7. window.onload和$(docunment).ready的区别

    浏览器加载完DOM后,会通过javascript为DOM元素添加事件,在javascript中,通常使用window.onload()方法. 在jquery中,则使用$(document).ready ...

  8. 日志收集系统Flume及其应用

    Apache Flume概述 Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统.Flume 支持定制各类数据发送方,用于收集各类型数据:同时,Fl ...

  9. 谭浩强C第四版(p141)16.输出以下图案

    运行结果: * *** ***** ******* ***** *** * Press any key to continue #include<stdio.h> int main() { ...

  10. Play on Words HDU - 1116 (并查集 + 欧拉通路)

    Play on Words HDU - 1116 Some of the secret doors contain a very interesting word puzzle. The team o ...