3D Accelerated With Nvidia HOWTO <author>Author: Nvidia Support Team <tt/www.nvidia.com/ <newline>译者: <htmlurl url="mailto:expns@yahoo.com" name="陈敏剑"> <tt/expns@yahoo.com/ <date>翻译日期: 2002年11月1日 reversion 0.23 <abstract> 此文档为你提供一个在Linux作业系统上设定 Nvidia 3D加速卡的参考. </abstract> <!-- Table of contents --> <toc> <sect>声明 <p>如果采用了此文档当中的方法而导致你的任何陨失(硬体损坏,函式库混乱等), 作者无权承担任何责任. <p>在开始设定之前紧记: <itemize> <item>你不一定非得按此文档来设定. <item>你不必对此文档报以太大的期望. <item>一切以 "Just for fun" 为原则. </itemize> <sect1>版权 <p>Copyright (C) 2002, by Nvidia <p>This document is free; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. <p>This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You can get a copy of the GNU GPL <htmlurl url="http://www.gnu.org/copyleft/gpl.html" name="here"> <sect>环境 <sect1>硬体环境 <p>你至少有一块 Nvidia 系列3D加速卡和支持它的母板,下面是所有Linux支持的 Nvidia 系列3D加速卡: <tscreen><code> TNT TNT2/TNT2 Pro TNT2 Ultra TNT2 M64/M64 Pro Vanta/Vanta LT Aladdin TNT2 GeForce 256 GeForce2 Pro GeForce2 GTS GeForce2 MX/MX 400/MX 200/MX 100 GeForce2 Go GeForce2 Ti GeForce2 Ultra GeForce3 GeForce3 Ti 200/Ti 500 GeForce4 Ti 4200/4400/4600 GeForce4 Mx 420/440/460 GeForce4 Go Quadro Quadro DCC Quadro2 MXR Quadro2 Pro Quadro2 EX Quadro2 Go Quadro4 XGL 550/700/750/900 Quadro4 NVS 200/400 nForce 220D/420/420D Integrated GPU </code></tscreen> <p>以下是不在支持之列的 范泽龙XGL(Quadro4) 系列的型号(AGP8X): <tscreen><code> NVIDIA Quadro4 980 XGL NVIDIA Quadro4 580 XGL NVIDIA Quadro4 380 XGL </code></tscreen> <sect1>软体环境 <p><itemize> <item>版本为 2.4.0 以上的核心. <item>XFree86版本为4.2.0或更新. <item>版本为 3.0 以上的 Gcc </itemize> <sect>下载驱动程式 <sect1>下载 GLX 驱动程式 <p>你可以下载的程式包格式有: rpm , tar, srpm. 请依据你的Linux 发行版来下载: <tscreen><code> GLX RPM http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_GLX-1.0-3123.i386.rpm GLX SOURCE RPM http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_GLX-1.0-3123.src.rpm GLX Tar File http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_GLX-1.0-3123.tar.gz GLX RPM for SuSE 7.2 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_GLX-1.0-3123.suse72.i386.rpm GLX RPM for SuSE 7.3 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_GLX-1.0-3123.suse73.i386.rpm GLX RPM for SuSE 8.0 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_GLX-1.0-3123.suse80.i386.rpm GLX RPM for SuSE 8.1 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_GLX-1.0-3123.suse81.i586.rpm FTP1 ftp://download.nvidia.com/XFree86_40/1.0-3123 FTP2 ftp://download1.nvidia.com/XFree86_40/1.0-3123 </code></tscreen> <sect1>下载核心驱动程式 <sect2>Redhat Linux <p>请注意Redhat不同版本之间是有差别的, 既便它们升级成相同的核心. <tscreen><code> RedHat 7.3 升级至 2.4.18-10 UP i386 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73up_2.4.18_10.i386.rpm RedHat 7.3 升级至 2.4.18-10 UP i686 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73up_2.4.18_10.i686.rpm RedHat 7.3 升级至 2.4.18-10 多CPU i686 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73smp_2.4.18_10.i686.rpm RedHat 7.3 升级至 2.4.18-10 多CPU i586 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73smp_2.4.18_10.i586.rpm RedHat 7.3 升级至 2.4.18-10 Enterprise i686 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73smp_2.4.18_10.athlon.rpm RedHat 7.3 多CPU i686 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73smp.i686.rpm RedHat 7.3 多CPU i586 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73smp.i586.rpm RedHat 7.3 Enterprise i686 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73bigmem.i686.rpm RedHat 7.3 UP Athlon 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73up.athlon.rpm RedHat 7.3 多CPU Athlon 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73smp.athlon.rpm RedHat 7.2 UP i386 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh72up.i386.rpm RedHat 7.2 UP i686 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh72up.i686.rpm RedHat 7.2 Enterprise i686 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh72up.athlon.rpm </code></tscreen> <sect2>Mandrake Linux <p> <tscreen><code> Mandrake 8.2 UP i586 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk82up.i586.rpm Mandrake 8.2 多CPUi586 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk82smp.i586.rpm Mandrake 8.2 Enterprise i586 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk82enterprise.i586.rpm Mandrake 8.2 Secure i586 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk82secure.i586.rpm Mandrake 8.1 UP i386 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk81up.i386.rpm Mandrake 8.1 UP i686 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk81up.i686.rpm Mandrake 8.1 多CPU i686 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk81smp.i686.rpm Mandrake 8.1 Enterprise i686 架构 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk81enterprise.i686.rpm </code></tscreen> <sect2>SuSE Linux <p> <tscreen><code> SuSE 8.1 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.suse81.i586.rpm SuSE 8.0 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.suse80.i386.rpm </code></tscreen> <sect2>源代码 <p>Kernel Source RPM http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.src.rpm <newline> Kernel Tar 压缩档 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123.tar.gz <sect>安装 <sect1>快速安装 <p>下载相适的安装包, 然後执行类似下面的指令: <tscreen><code> rpm -ivh NVIDIA_kernel.i386.rpm rpm -ivh NVIDIA_GLX.i386.rpm </code></tscreen> <sect1>升级 <p>我们不赞成直接升级, 请按如下步骤执行: <tscreen><code> rpm -e NVIDIA_kernel.i386 rpm -e NVIDIA_GLX rpm -i NVIDIA_GLX.i386.rpm </code></tscreen> <sect1>使用SRPM安装包 <p>请执行类似以下的指令: <tscreen><code> rpm --rebuild NVIDIA_kernel.src.rpm rpm -ivh /你的NVIDIA_kernel.i386.rpm存放位置 rpm -ivh NVIDIA_GLX.i386.rpm </code></tscreen> <p>注意: RedHat Linux 的SRPM存放位置在: /usr/src/redhat/RPMS/i386/NVIDIA_kernel.i386.rpm <sect1>基於tar的安装 <p>步骤如下: <tscreen><code> tar xvzf NVIDIA_kernel.tar.gz tar xvzf NVIDIA_GLX.tar.gz cd NVIDIA_kernel make install cd ../NVIDIA_GLX make install </code></tscreen> <p>注意: 执行 make instll 时,程式将自动移除旧的驱动程式. <sect>设定 XF86Config-4 <p>注: 此设定基於 XFree86 的 4.0 或更高的版本. <p>如果XF86Config-4设定档中己经有了 NVIDIA 显示卡的描述, 请照下列步骤执行: <tscreen><code> 将 Dirver "nv" 或 Driver "vesa" 变更为 Driver "nvidia" 在模组部份移除 Load "dri" 和 Load "GLcore" 并且加入 Load "glx" </code></tscreen> <p>以下是 Nvidia 3D 加速卡的驱动程式选项 <p>描述方法为 Option"NvAGP" "整数值". <p>关於"整数值"的作用: <itemize> <item>0 AGP功能失效 <item>1 使用卡自身的AGP加速 <item>2 使用 AGPGART 加速 <item>3 使用任何可用的 AGP 加速 </itemize> <p>描述方法为 Option "NoLogo" "布尔" 它用来决定 Logo 的开启和关闭. <p>Option "NoRenderAccel" "布尔" . 它用来决定形渲染的加速开启和关闭. <p>Option "NoRenderExtension" "布尔" 用於 8 depth 的渲染. <sect>RedHat8.0 <p>下载:NVIDIA_kernel-1.0-3123.src.rpm <p>下载:NVIDIA_GLX-1.0-3123.i386.rpm <p>确定作业系统上安装了开发软体包, 并且你有进行过一次核心的编译, 如果你在编译之後 执行了 "make mrproper" 你得再执行一次核心的编译. <p>执行"rpmbuild --rebuild NVIDIA_kernel-1.0-3123.src.rpm" 结果为:"/usr/src/redhat/RPMS/i386/NVIDIA_kernel-1.0-3123.i386.rpm" <p>安装:核心驱动程式 "rpm -ivh /usr/src/redhat/RPMS/i386/NVIDIA_kernel-1.0-3123.i386.rpm" <p>安装GLX:"rpm -ivh NVIDIA_GLX-1.0-3123.i386.rpm" <p>设定XFree86Config, 和刚才提到的一样 <sect1>核心 kernel-2.4.18-17.8.0 <p>注意:这些步骤是基於kernel-2.4.18-17.8.0来设定的. <p>下载 NVIDIA_kernel-1.0-3123.src.rpm <p>下载 NVIDIA_GLX-1.0-3123.i386.rpm <p>将 /etc/inittab 设定档中的 id:5:initdefault: 变更为 id:3:initdefault: 注意: 这将在下一次启动时开启多用户模式. <p>备份驱动程式: <tscreen><code> "cd /usr/src/redhat/RPMS/i386" "mv NVIDIA_kernel-1.0-3123.i386.rpm NVIDIA_kernel-1.0-3123.i386.rpm.old" </code></tscreen> 将核心升级为kernel-2.4.18-17.8.0 并同时升级源代码为 kernel-source-2.4.18-17.8.0 <p>使用新核心重新启动机器. 用 root 帐号登录. <p>移除老的驱动程式: <tscreen><code> rpm -e NVIDIA_GLX-1.0-3123 rpm -e NVIDIA_kernel-1.0-3123 </code></tscreen> 执行 "rpmbuild --rebuild NVIDIA_kernel-1.0-3123.src.rpm" 它将依据新的核心编译驱动程式. 结果为: "/usr/src/redhat/RPMS/i386/NVIDIA_kernel-1.0-3123.i386.rpm" <p>安装驱动程式: <tscreen><code> "rpm -ivh /usr/src/redhat/RPMS/i386/NVIDIA_kernel-1.0-3123.i386.rpm" </code></tscreen> <p>安装GLX驱动程式 <tscreen><code> "rpm -ivh NVIDIA_GLX-1.0-3123.i386.rpm" </code></tscreen> <p>按照上面的方法设定XF86Config-4 <p>执行 "startx" . <p>将 /etc/inittab 设定档中的 id:3:initdefault: 变更为 id:5:initdefault: <p>最後,请享受Nvidia带给你的卓越性能吧! <sect>设定TWINVIEW <p>TWINVIEW可以使用你同时连接两个莹幕. 以下型号的芯片支援TWINVIEW, 当然,你的3D加速卡上还得有两个接口. <tscreen><code> GeForce2 MX, GeForce2 Go 范泽龙2 (Quadro2) MXR 范泽龙2 (Quadro2) Go GeForce4 GPUs. </code></tscreen> <sect1>设定XF86Config <p>在你的XF86Config设定档中必需有如下的描述: <tscreen><code> Option "TwinView" Option "SecondMonitorHorizSync" "<hsync range(s)>" Option "SecondMonitorVertRefresh" "<vrefresh range(s)>" Option "MetaModes" "<list of metamodes>" </code></tscreen> <p>你可能用到以下的 Options, 它们不是必需的: <tscreen><code> Option "TwinViewOrientation" "<relationship of head 1 to head 0>" Option "ConnectedMonitor" "<list of connected display devices>" </code></tscreen> <p>它们的含义: <itemize> <item> TwinViwe 开启功能, 没有这个描述,所有有关TwinViwe的Optins会被忽略. <item>SecondMonitorHorizSync, SecondMonitorVertRefresh 它们强制第二个莹幕使用这些设定. 在 Monitor 部份有相应的描述可以参考,注意:请不要不加任何修改地复制数值,这样做可能对硬体产生损坏. <item>MetaModes 模式设定 如 Option "MetaModes" "1280x1024,1280x1024; 1024x768,1024x768" <item>TwinViewOrientation 设定相对於第一个莹幕的位置.如: "RightOf" (the default) "LeftOf" "Above" "Below" "Clone" <p>ConnectedMonitor 连接类型, 如 Option "ConnectedMonitor" "CRT, DFP" </itemize> <sect>故障排除 <sect1>我要如何得到故障信息的具体含义? <p>一般来说,这些都在 /var/lov/XFree86.*.log 日志当中. "(WW)"代表警讯 "(EE)"代表错误 <sect1>不能执行 startx, 日志当中有这样的讯息:"(EE) NVIDIA(0): Failed to initialize the NVdriver kernel module!" <p>这是核心模组的问题, 请先用 lsmod 查看模组的载入情况, 如果没有AGP驱动模组请用 modprobe 载入, 如果在载入的时候出现问题, 可能你所载入的模组并不是为你的核心编译的. 在编译的驱动程式的时候可以指定你的核心: 'make install SYSINCLUDE=/path/to/kernel/headers' 模组的名称为 "NVdriver" <sect1>我能启动X, 但是 OpenGL的应用无效 <p>这可能和函式库有关, 请执行 "ldconfig" ,另外请检视 XF86Config设定档, 确信里面有加载glx的描述. <sect1>OpenGL 软体出现如下警讯是什麽问题? <p> <tscreen><code> Error: Could not open /dev/nvidiactl because the permissions are too restrictive. Please see the FREQUENTLY ASKED QUESTIONS section of /usr/share/doc/NVIDIA_GLX-1.0/README for steps to correct. </code></tscreen> <p>看起来像是PAM安全模组的问题(它变更了设备的访问权限), 如果要解决它,请关闭PAM. 如果你的 /etc/security/ 目录里有 console.perms 设定档 请将以 < dri > 开头的字句整行移除. 如果你的系统里有 /etc/logindevperms 请移除与 /dev/nvidiactl 有关的字句. 然後执行 chmod 0666 /dev/nvidia* ; chown root /dev/nvidia* <sect1> OpenGL 程式挂掉并且有如下警讯: <p> <tscreen><code> WARNING: Your system is running with a buggy dynamic loader. This may cause crashes in certain applications. If you experience crashes you can try setting the environment variable __GL_SINGLE_THREADED. For more information please consult the FREQUENTLY ASKED QUESTIONS section in the file /usr/share/doc/NVIDIA_GLX-1.0/README. </code></tscreen> <p>这是老版本的动态加载器造成的. 请设定环境变量 __GL_SINGLE_THREADED 为任意值. 如果你使用bash shell ,请你这样执行: <tscreen><code> export __GL_SINGLE_THREADED </code></tscreen> <p>如果你使用 csh 和相关的shell 请这样执行: <tscreen><code> setenv __GL_SINGLE_THREADED </code></tscreen> <sect1>在我执行 雷神III 切换显示模式时, 它挂掉了. <p>照上面的方法设定 __GL_SINGLE_THREADED <sect1>当我执行 startx 时, X 挂掉了, 并在 XFree86 日志中留有如下记录: <p> <tscreen><code> (II) LoadModule: "nvidia" (II) Loading /usr/X11R6/lib/modules/drivers/nvidia_drv.o No symbols found in this module (EE) Failed to load /usr/X11R6/lib/modules/drivers/nvidia_drv.o (II) UnloadModule: "nvidia" (EE) Failed to load module "nvidia" (loader failed, 256) ... (EE) No drivers available. </code></tscreen> <p> nvidia_drv.o 需要一个符号连结, 有些rpm版本在安装时没有建立这种连结, 推荐你用 NVIDIA_GLX 的 tar 安装包进行安装. <sect1>我的系统可以运行, 但不稳定, 这是怎麽回事? <p>这与AGP模式有关, 可以通过 Option "NvAgp" "0至3的值" 来设定. "0"表示关闭加速; "1" 表示使用NVAGP; "2" 表示使用AGPGART; "3" 表示使用 AGPART, 如果失效, 就自动使用NVAGP模式. 注意: 要使用 AGPGART 模式, 你必需将它编译进核心,或者是编译成模组. 如果系统核心当中有 AGPGART, NVAGP 模式将不起任何作用. 所以推荐你将 AGPGART 编译成模组. 另外要注意的是, 变更驱动程式後要重新启动你的机器才能生效. <p>以下的芯片集支援 NVAGP 模式, 其它的芯片集请使用 AGPGART 模式. <tscreen><code> Intel 440LX o Intel 440BX o Intel 440GX o Intel 815 ("Solano") o Intel 820 ("Camino") o Intel 830 o Intel 840 ("Carmel") o Intel 845 ("Brookdale") o Intel 845G o Intel 850 ("Tehama") o Intel 860 ("Colusa") o AMD 751 ("Irongate") o AMD 761 ("IGD4") o AMD 762 ("IGD4 MP") o VIA 8371 o VIA 82C694X o VIA KT133 o VIA KT266 o RCC 6585HE o Micron SAMDDR ("Samurai") o Micron SCIDDR ("Scimitar") o nForce AGP o ALi 1621 o ALi 1631 o ALi 1647 o ALi 1651 o ALi 1671 o SiS 630 o SiS 633 o SiS 635 o SiS 645 o SiS 730 o SiS 733 o SiS 735 o SiS 745 </code></tscreen> <p>一些 Linux 核心在AMD架构的CPU上运行时可能会出现与AGP有关的Bug. 它们是: <tscreen><code> AMD Athlon XP AMD Athlong 4 AMD Athlon MP and Models 6 AMD Duron </code></tscreen> 你可以在开机的时候避开它们的Bug: 在 GRUB 中输入 mem=nopentium 或在 lilo.conf 设定档中加入 : append = "mem=nopentium" <p>设定 BIOS 中AGP的□围在 0xEA 和 0xEE 之间. <p>请升级你的 BIOS. <p>设定 AGP的速率档位: <tscreen><code> insmod NVdriver NVreg_ReqAGPRate=2 # 只使用第2档 insmod NVdriver NVreg_ReqAGPRate=1 # 只使用第1档 </code></tscreen> <p>也可以在 /etc/modules.conf 设定档中进行描述: <tscreen><code> alias char-major-195 NVdriver options NVdriver NVreg_ReqAGPRate=2 options NVdriver NVreg_ReqAGPRate=1 </code></tscreen> <sect1>为什麽我的 OpenGL 软体慢得要死? <p>可能它还在使用老的函式库. <sect1>在编译核心驱动程式时出现警讯: <p> <tscreen><code> You appear to be compiling the NVdriver kernel module with a compiler different from the one that was used to compile the running kernel. This may be perfectly fine, but there are cases where this can lead to unexpected behaviour and system crashes. If you know what you are doing and want to override this check, you can do so by setting IGNORE_CC_MISMATCH. In any other case, set the CC environment variable to the name of the compiler that was used to compile the kernel. </code></tscreen> <p>系统上的核心不是用当前的GCC编译的, 请重新编译核心, 并在重新启动时载入新核心. <sect1>X 挂掉了, 并出现警讯"Failed to allocate LUT context DMA" <p>解决方法同上一个问题一样. </article>