Linux学习笔记(二百四十七)——关于Xorg的一些整理

Linux下最精致最浩瀚的工程是什么?是Xorg。Linux下最混乱最让人头疼的部分是什么?还是Xorg……看了一些关于Xorg的东西,暂时整理一下。
Xorg复杂就复杂在包含了无数层,比ALSA的结构还要繁复。从底层的驱动到上层的应用API也就是Xlib,都想包含进去。如果是极老的硬件,倒也是不错,应用程序调用比如GTK这样的图形库,GTK调用Xlib,再由Xlib利用驱动绘制到硬件。但问题是目前显卡上3D部分已经占据了绝大部分,硬件3D渲染才是显示的核心,甚至2D图形都是调用3D硬件来绘制的……这套老架构就不太适合了。
为了利用显卡的3D特性,所采用的协议就是OpenGL。这么一个协议当然有不同的实现方式,Gentoo里面通过
# eselect opengl set [option]
就是选取实现方式,主要也就是开源还是闭源。Xorg中开源的实现是通过DRI,而这个DRI本身也有若干个部分……从内核级的DRM到软件级的Mesa都包含在其中,介于两端之间的有libGL以及不同显卡所对应的驱动模块等等。所以说要安装开源的显卡驱动时候总有些让人头晕,因为有些过于模块化了,少了一个都不行。总之,经由DRI就能够实现Direct Rendering,比Xorg原有的绘制方式XAA效率高得多。
那么DRI2又是什么?从名字可以看出,这是DRI在某种程度上的升级版;主要区别就是,DRI在绘制硬件的时候采取EXA方式,而DRI2
采用UXA(原始的X采用XAA方式)。两者都是OpenGL,主要改进是DRI2通过UXA实现了对多窗口同时加速,能够解决一些比如播放视频不同步之类的问题。
就是因为Xorg通过这些组件实现了从硬件到软件的全程掌控,弄得它自己都有点像操作系统了;比较合理的方式还是把最底层的显存管理和mode setting等等集成到内核中并提供对最新显卡架构的足够支持。GEM(Graphics Execution Manager)和KMS(Kernel Mode Setting)就是用来干这个的。通过这样的对于显卡最基本通信和设置的底层管理,可以比如让framebuffer和Xorg之间的转换平滑一些而不会像我现在每次从uvesafb进入X时候那样每次都闪一样——因为Xorg不认识uvesafb的mode setting而要自己重做一遍。
差不多就是这些。噢对了,还有一个我以前不知道的rooted X和rootless X的区别也有必要说一下,因为我曾经也用过一段时间的Cygwin……Cygwin中的X就是运行在rootless模式下,没有一般Linux下的作为桌面“背景”的主窗口,而是直接绘制在Windows桌面上;当时我就对这些呈现在Windows桌面上的X窗口是怎么回事有疑问,原来只是协议允许的一种方式而已。这样也实现在不同图形环境中鼠标和键盘事件的传递。
说起来,X之所以麻烦,还有开源和闭源驱动这样的问题;一方面是显卡作为硬件具有更多软件层次可操作的特性,另一方面也跟显卡市场并非垄断有关吧:)
Advertisements

About huanhaoadam

Physics PhD Candidate
此条目发表在读书写字分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s