如何理解显示卡的驱动模块(DDX,DRM,DRI,XVMC)
如何理解显示卡的驱动模块(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)的更多相关文章
- [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. ...
- leetcode《按递增顺序显示卡牌》
题目描述: 牌组中的每张卡牌都对应有一个唯一的整数.你可以按你想要的顺序对这套卡片进行排序. 最初,这些卡牌在牌组里是正面朝下的(即,未显示状态). 现在,重复执行以下步骤,直到显示所有卡牌为止: 从 ...
- Leetcode950. Reveal Cards In Increasing Order按递增顺序显示卡牌
牌组中的每张卡牌都对应有一个唯一的整数.你可以按你想要的顺序对这套卡片进行排序. 最初,这些卡牌在牌组里是正面朝下的(即,未显示状态). 现在,重复执行以下步骤,直到显示所有卡牌为止: 从牌组顶部抽一 ...
- 删除Ati显卡桌面右键菜单(配置可交换显卡,显示卡属性,图形选项,图形属性)
Win+R 打开注册表 依次找到 HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers 保留Gadgets.New.Sh ...
- 移动端布局:视口viewport的理解
移动端开发中,有一些基本概念需要理解清楚,才能更好的组织编程逻辑.在刚接触时,移动端视口的缩放和rem单位的缩放搞混淆了,弄得自己很蒙圈.所以仔细总结下自己的理解. 移动端的适配,我理解为两点: 第一 ...
- 经典]Linux内核中ioremap映射的透彻理解【转】
转自:http://blog.csdn.net/lanyang123456/article/details/7403514 几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器.状态寄 ...
- 深入理解 iOS Rendering Process
本文将从 OpenGL 的角度结合 Apple 官方给出的部分资料,介绍 iOS Rendering Process 的概念及其整个底层渲染管道的各个流程. 相信在理解了 iOS Rendering ...
- Linux Graphic DRI Wayland 显示子系统
转:https://blog.csdn.net/u013165704/article/details/80709547 1. 前言 上篇文章(Linux graphic subsytem(1)_概述) ...
- Linux图像系统框架-理解X11与Qt的层次结构
转:http://blog.csdn.net/kjfureone/article/details/52848550 1. 前言 图形子系统是linux系统中比较复杂的子系统之一:对下,它要管理形态各异 ...
随机推荐
- 反转链表[剑指offer]之python实现
输入一个链表,输出反转后的链表. 非递归实现: # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val ...
- DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解
本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参 ...
- Excel自动从身份证中提取生日、性别、年龄
现在学生的身份证号已经全部都是18位的新一代身份证了,里面的数字都是有规律的.前6位数字是户籍所在地的代码,7-14位就是出生日期.第17位“2”代表的是性别,偶数为女性,奇数为男性.我们要做的就是把 ...
- oc字典放入到数组里,根据字典里的属性排序(重点)
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...
- python笔记-for循环的方法
#!/usr/bin/env python #-*- coding:utf-8 -*- ''' for 语句 格式: for 变量名 in 集合: 语句 逻辑:按顺序取"集合"中的 ...
- Window_Bat_Scripts—检测特定网段未使用的IP地址
1.1 脚本名称 Check_IP_Not_Use.bat 1.2 脚本代码 @Echo off set /p input_number=请输入网络位(192.168.1.): IF EX ...
- Android中级教程之Android应用程序的生命周期
Android应用程序的生命周期图 在大部分情况下,每个Android应用都将运行在自己的Linux进程中.当这个应用的某些代码需要执行时,进程就会被创建,并且将保持运行,直到该进程不再需要,而系统需 ...
- Python入门必学:字符串和编码正确的使用方法
字符编码,我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特 ...
- poj 3292 H-素数问题 扩展艾氏筛选法
题意:形似4n+1的被称作H-素数,两个H-素数相乘得到H-合成数.求h范围内的H-合成数个数 思路: h-素数 ...
- Java最小堆解决TopK问题
TopK问题是指从大量数据(源数据)中获取最大(或最小)的K个数据. TopK问题是个很常见的问题:例如学校要从全校学生中找到成绩最高的500名学生,再例如某搜索引擎要统计每天的100条搜索次数最多的 ...