如何理解显示卡的驱动模块(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文件来确定。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章