精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● Linux>>Linux之应用篇>>硬件篇>>在Linux下玩转流行显卡

主题:在Linux下玩转流行显卡
发信人: mark7312(小马哥)
整理人: qiaoqian(2001-12-30 23:53:40), 站内信件
Linux是一个备受大家关注的操作系统,但毕竟它还很年轻,在一些硬件的兼容性上存在一些问题。随着Linux用户的不断增加,硬件厂商和软件厂商都开始在不断地完善基于Linux的硬件驱动程序,Linux对显卡的支持问题是一个很常见的硬件问题。在Linux下如果不能正确安装显卡,性能会有很大的折扣,而且显示效果也很差,因此我们今天就和大家探讨一下关于在Linux下使用流行显卡的方法。

  Linux最新内核支持的显卡

  现在,得到Linux版本的显卡驱动程序不再像以前那样困难了。随着XFree86 4的推出,很多显卡都已通过它内建的DRI (Direct Rendering Infrastructure,直接着色基本结构)层和OpenGL功能得到支持(XFree86 4可以到ftp.xfree86.org或你的Linux网址上下载) 。目前很多的显卡生产商都已加入支持DRI的潮流中,惟一的例外就是nVIDIA, 它单独发布自己的驱动程序,必须另外下载和安装。后面将详述此类显卡的安装。

  如果硬件加速程序没有加载(或没正确安装),游戏的速度会很低,只有到5帧/s左右。而正确安装后性能会大大提升,差别相当大。

  DRI支持下列公司的显卡:

  Matrox公司:

  G200 和 G400. 据说也支持G450,但目前没得到证实。

  Intel公司: 

  i810、i810-dc100、i810e,i815是否支持目前尚未知。

  ATI公司: 

  Rage Fury, Rage Magnum, Xpert2000, Xpert 128, Xpert 99, All-in-Wonder 128 AGP, Radeon SDR, Radeon DDR. PCI接口的显卡只有很少的支持,不支持Rage 128。

  上述的DRI驱动应该内建在你所购买的Linux操作系统里。为了正常工作,它们都需要加载一个内核模块。 而nVIDIA的驱动,只能从它的网址下载并需要手工安装。当然,它也需要加载指定内核模块。

  nVIDIA提供下列产品的Linux驱动:

  TNT 和 TNT2芯片、

  GeForce 256、GeForce2 MX、GeForce2 Pro、GeForce2 GTS、GeForce 2 Ultra、GeForce2 Go、GeForce3芯片组 Quadro2 MXR和Quadro2 Pro 芯片组,几乎涵盖目前所有的产品。

  检查3D支持

  在Xfree86 4.0中有两个程序用来检查是否有3D支持:glxinfo 和 xdpyinfo。前者给出X窗口系统的GL支持情况,后者给出X系统的一般显示能力。要想了解复杂的显示环境,两个都很必要。

  想检查是否有3D支持,在X系统的命令行状态输入“glxinfo”,然后从含“OpenGL renderer string”的那行往下看,如:

  $ glxinfo 

  OpenGL renderer string: Mesa DRI Voodoo3 20000224 

  这说明Voodoo3的DRI驱动被找到并正常运行。其实,还可以看到很多的输出信息,给出详细的显卡功能信息,包括双缓冲(Double

  -buffering),颜色深度缓冲(Depth buffering)、模板缓冲(Stencil buffering)、积聚缓冲(Accumulation buffering)等等。

  如果DRI驱动没加载,显示的信息就是:

  $ glxinfo 

  OpenGL renderer string: Mesa GLX Indirect 

  这表明,你的系统里使用慢速着色方式(Indirect表示纯软件加速),那玩起游戏来速度肯定不会爽的。

  如果你有nVIDIA的显卡,显示信息就是:

  $ glxinfo 

  OpenGL renderer string: RIVA TNT2/AGP/SSE 

  xdpyinfo命令显示屏幕的分辨率和颜色深度等功能的信息,就nVIDIA而言,我们感兴趣的就是含有下面字符的行:

  GLX

  NV-GLX

  NVIDIA-GLX 

  如果看不到上面全部的三个单词,你也得不到硬件加速,等待你的只能是低劣的游戏画面和那慢得如牛的速度。

  因此,我强烈建议大在安装驱动之前使用上述方法进行检测,以免出现一些不必要的麻烦。

  加载DRI驱动

  因为Linux显卡驱动是完全开放和自由发放的,你的Linux版本应该在编译XFree86内核时就已包含它们,并且在安装Linux时自动安装它们。如果不是这样的话,也不要担心,我们将仔细说明安装步骤。

  要想让显卡驱动工作,需要重新编译XFree86。XFree86的大小是Linux kernel的两倍,没有容易配置的图形界面。重编这个工作,建议初学者找有经验的人来完成。

  加载DRI驱动的步骤如下:

  1.编译有DRI支持的X系统。

  2.安装正确的Linux kernel模块。

  3. 创建XF86配置文件,以加载新的显卡驱动。

  如果你的X系统已经有DRI支持,那文件系统里就应该有两套模块:在/usr/X11R6/lib/modules/dri的XFree86模块和在/lib/modules/2.4.x/kernel/drivers/char/

  drm里的kernel模块。 浏览相关目录,就会看到:

  # ls /lib/modules/2.4.3/kernel/drivers/

  char/drm

  gamma.o i810.o mga.o r128.o radeon.o tdfx.o 

  # ls /usr/X11R6/lib/modules/dri

  gamma_dri.so* mga_dri.so* sis_dri.so*

  i810_dri.so* r128_dri.so* tdfx_dri.so* 

  注意:对SiS的支持正在进行,但不完整。

  如果没见到这些文件,可以访问http://dri.sourceforge.net/doc/DRIcompile.html这个网址,学学如何构建自己的X系统。

  如果见到相关文件,下一步就是加载正确的kernel模块。i810.o支持Intel i810 主板的内建显卡,mga.o是Matrox显卡的驱动,r128.o或radeon.o支持ATI显卡,tdfx.o是3Dfx显卡的驱动,而gamma.o是3DLabs显卡的。手工加载合适的驱动,并添加到/etc/modules.conf (或 /etc/conf.modules): 

  # modprobe tdfx

  # echo tdfx >> /etc/modules.conf 

  最后一步是创建一个新的XF86Config文件。建议修改前,备份老配置文件。配置文件根据Linux的版本不同而不同,Redmond Linux使用的是/etc/X11/XF86Config-4文件。

  打开配置文件,确认在[Module]部分有下面两行:

  Load "glx"

  退出并重启X系统,这时新装的显卡驱动应该就可以发挥作用了。

  加载nVIDIA驱动

  nVIDIA公司没把驱动加入XFree86的开放资源内,如果你有nVIDIA显卡,需要到http://www.nvidia.com/得到正确驱动。打开nVIDIA网站的“Support Center→Drivers→Linux Drivers”,有两个软件包要下载:NVIDIA_kernel和NVIDIA_GLX。两者都必须要有,提供的格式也不同,笔者选择的是RPM格式。

  在写本文时,最新版本是build 769。就是NVIDIA_kernel-0.9-769.src.rpm 和NVIDIA_GLX-0.9-769.i386.rpm。前者安装前需要重编译,而后者自安装。命令如下:

  # rpm --rebuild NVIDIA_kernel-0.9-769.src.rpm

  # rpm -ivh /usr/src/ RedmondLinux/RPMS/

  i586/NVIDIA_kernel-0.9-769.i586.rpm

  # rpm -ivh NVIDIA_GLX-0.9-769.i386.rpm

  下一步,需要修改XF86Config配置文件,方法同上。不过,在[Device]部分,加入:

  Driver "nvidia" 

  确保加载glx,没加载dri和GLcore驱动:

  # Load "glx"

  # Load "dri"

  # Load "GLcore" 

  至此,万事大吉,退出并重启X系统。

  不过,nVIDIA的驱动对某些版本的Linux还是有些Bug。在笔者加载它的驱动并重启后,屏幕上有错误信息如下:

  BUG IN DYNAMIC LINKER ld.so: dl-version.c: 217: _dl_check_map_versions: Assertion `needed != ((void *)0)' failed! 

  ERROR: KUniqueApplication: Trying to launch kdeinit. 

  BUG IN DYNAMIC LINKER ld.so: dl-version.c: 217: _dl_check_map_versions: Assertion `needed != ((void *)0)' failed! 

  ERROR: KUniqueApplication: Can't setup DCOP communication. 

  BUG IN DYNAMIC LINKER ld.so: dl-version.c: 217: _dl_check_map_versions: Assertion `needed != ((void *)0)' failed! 

  并且桌面不出现,根据nVIDIA的说法:“在加载glibc动态库和libdl.so时,对那些使用dlopen()函数的应用而言的确有些问题。我们已经修复了一些,但不是全部。”






[关闭][返回]