zoukankan      html  css  js  c++  java
  • 如何理解显示卡的驱动模块(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文件来确定。

  • 相关阅读:
    顺序表(线性表)操作的思想及实现之C#版
    基于CXF Java 搭建Web Service
    敏捷方法 – 灵活,可靠的软件 使用设计模式和敏捷开发
    使用HttpHanlder处理404: File not found
    关于js模块加载的尝试
    Tfs 自动部署 部署图
    jQuery能做到,PHP能做到,C#也能做到
    优化反射性能的总结(下)
    推荐系统
    10个前端开发必备的工具或使用方法
  • 原文地址:https://www.cnblogs.com/sun-frederick/p/4763420.html
Copyright © 2011-2022 走看看