3D Accelerated With Nvidia HOWTO Author: Nvidia Support Team www.nvidia.com 译者: [1]陈敏剑 expns@yahoo.com 翻译日期: 2002年11月1日 reversion 0.23 _________________________________________________________________ 此文档为你提供一个在Linux作业系统上设定 Nvidia 3D加速卡的参考. _________________________________________________________________ 1. 声明 * 1.1 版权 2. 环境 * 2.1 硬体环境 * 2.2 软体环境 3. 下载驱动程式 * 3.1 下载 GLX 驱动程式 * 3.2 下载核心驱动程式 4. 安装 * 4.1 快速安装 * 4.2 升级 * 4.3 使用SRPM安装包 * 4.4 基於tar的安装 5. 设定 XF86Config-4 6. RedHat8.0 * 6.1 核心 kernel-2.4.18-17.8.0 7. 设定TWINVIEW * 7.1 设定XF86Config 8. 故障排除 * 8.1 我要如何得到故障信息的具体含义? * 8.2 不能执行 startx, 日志当中有这样的讯息:"(EE) NVIDIA(0): Failed to initialize the NVdriver kernel module!" * 8.3 我能启动X, 但是 OpenGL的应用无效 * 8.4 OpenGL 软体出现如下警讯是什麽问题? * 8.5 OpenGL 程式挂掉并且有如下警讯: * 8.6 在我执行 雷神III 切换显示模式时, 它挂掉了. * 8.7 当我执行 startx 时, X 挂掉了, 并在 XFree86 日志中留有如下记录: * 8.8 我的系统可以运行, 但不稳定, 这是怎麽回事? * 8.9 为什麽我的 OpenGL 软体慢得要死? * 8.10 在编译核心驱动程式时出现警讯: * 8.11 X 挂掉了, 并出现警讯"Failed to allocate LUT context DMA" _________________________________________________________________ 1. 声明 如果采用了此文档当中的方法而导致你的任何陨失(硬体损坏,函式库混乱等), 作者无权承担任何责任. 在开始设定之前紧记: * 你不一定非得按此文档来设定. * 你不必对此文档报以太大的期望. * 一切以 "Just for fun" 为原则. 1.1 版权 Copyright (C) 2002, by Nvidia 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. 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 [2]here 2. 环境 2.1 硬体环境 你至少有一块 Nvidia 系列3D加速卡和支持它的母板,下面是所有Linux支持的 Nvidia 系列3D加速卡: ______________________________________________________________ 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 ______________________________________________________________ 以下是不在支持之列的 范泽龙XGL(Quadro4) 系列的型号(AGP8X): ______________________________________________________________ NVIDIA Quadro4 980 XGL NVIDIA Quadro4 580 XGL NVIDIA Quadro4 380 XGL ______________________________________________________________ 2.2 软体环境 * 版本为 2.4.0 以上的核心. * XFree86版本为4.2.0或更新. * 版本为 3.0 以上的 Gcc 3. 下载驱动程式 3.1 下载 GLX 驱动程式 你可以下载的程式包格式有: rpm , tar, srpm. 请依据你的Linux 发行版来下 载: ______________________________________________________________ GLX RPM http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_GL X-1.0-3123.i386.rpm GLX SOURCE RPM http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_GL X-1.0-3123.src.rpm GLX Tar File http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_GL X-1.0-3123.tar.gz GLX RPM for SuSE 7.2 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_GL X-1.0-3123.suse72.i386.rpm GLX RPM for SuSE 7.3 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_GL X-1.0-3123.suse73.i386.rpm GLX RPM for SuSE 8.0 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_GL X-1.0-3123.suse80.i386.rpm GLX RPM for SuSE 8.1 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_GL X-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 ______________________________________________________________ 3.2 下载核心驱动程式 Redhat Linux 请注意Redhat不同版本之间是有差别的, 既便它们升级成相同的核心. ______________________________________________________________ RedHat 7.3 升级至 2.4.18-10 UP i386 架构 http://download.nvidia.com/XFr ee86_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/XFr ee86_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/XFr ee86_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/XFr ee86_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/XFr ee86_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/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73smp.i686.rpm RedHat 7.3 多CPU i586 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73smp.i586.rpm RedHat 7.3 Enterprise i686 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73bigmem.i686.rpm RedHat 7.3 UP Athlon 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73up.athlon.rpm RedHat 7.3 多CPU Athlon 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh73smp.athlon.rpm RedHat 7.2 UP i386 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh72up.i386.rpm RedHat 7.2 UP i686 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh72up.i686.rpm RedHat 7.2 Enterprise i686 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.rh72up.athlon.rpm ______________________________________________________________ Mandrake Linux ______________________________________________________________ Mandrake 8.2 UP i586 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk82up.i586.rpm Mandrake 8.2 多CPUi586 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk82smp.i586.rpm Mandrake 8.2 Enterprise i586 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk82enterprise.i586.rpm Mandrake 8.2 Secure i586 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk82secure.i586.rpm Mandrake 8.1 UP i386 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk81up.i386.rpm Mandrake 8.1 UP i686 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk81up.i686.rpm Mandrake 8.1 多CPU i686 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk81smp.i686.rpm Mandrake 8.1 Enterprise i686 架构 http://download.nvidia.com/XFr ee86_40/1.0-3123/NVIDIA_kernel-1.0-3123.mdk81enterprise.i686.rpm ______________________________________________________________ SuSE Linux ______________________________________________________________ SuSE 8.1 http://download.nvidia.com/XFree 86_40/1.0-3123/NVIDIA_kernel-1.0-3123.suse81.i586.rpm SuSE 8.0 http://download.nvidia.com/XFree 86_40/1.0-3123/NVIDIA_kernel-1.0-3123.suse80.i386.rpm ______________________________________________________________ 源代码 Kernel Source RPM http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123. src.rpm Kernel Tar 压缩档 http://download.nvidia.com/XFree86_40/1.0-3123/NVIDIA_kernel-1.0-3123. tar.gz 4. 安装 4.1 快速安装 下载相适的安装包, 然後执行类似下面的指令: ______________________________________________________________ rpm -ivh NVIDIA_kernel.i386.rpm rpm -ivh NVIDIA_GLX.i386.rpm ______________________________________________________________ 4.2 升级 我们不赞成直接升级, 请按如下步骤执行: ______________________________________________________________ rpm -e NVIDIA_kernel.i386 rpm -e NVIDIA_GLX rpm -i NVIDIA_GLX.i386.rpm ______________________________________________________________ 4.3 使用SRPM安装包 请执行类似以下的指令: ______________________________________________________________ rpm --rebuild NVIDIA_kernel.src.rpm rpm -ivh /你的NVIDIA_kernel.i386.rpm存放位置 rpm -ivh NVIDIA_GLX.i386.rpm ______________________________________________________________ 注意: RedHat Linux 的SRPM存放位置在: /usr/src/redhat/RPMS/i386/NVIDIA_kernel.i386.rpm 4.4 基於tar的安装 步骤如下: ______________________________________________________________ tar xvzf NVIDIA_kernel.tar.gz tar xvzf NVIDIA_GLX.tar.gz cd NVIDIA_kernel make install cd ../NVIDIA_GLX make install ______________________________________________________________ 注意: 执行 make instll 时,程式将自动移除旧的驱动程式. 5. 设定 XF86Config-4 注: 此设定基於 XFree86 的 4.0 或更高的版本. 如果XF86Config-4设定档中己经有了 NVIDIA 显示卡的描述, 请照下列步骤执 行: ______________________________________________________________ 将 Dirver "nv" 或 Driver "vesa" 变更为 Driver "nvidia" 在模组部份移除 Load "dri" 和 Load "GLcore" 并且加入 Load "glx" ______________________________________________________________ 以下是 Nvidia 3D 加速卡的驱动程式选项 描述方法为 Option"NvAGP" "整数值". 关於"整数值"的作用: * 0 AGP功能失效 * 1 使用卡自身的AGP加速 * 2 使用 AGPGART 加速 * 3 使用任何可用的 AGP 加速 描述方法为 Option "NoLogo" "布尔" 它用来决定 Logo 的开启和关闭. Option "NoRenderAccel" "布尔" . 它用来决定形渲染的加速开启和关闭. Option "NoRenderExtension" "布尔" 用於 8 depth 的渲染. 6. RedHat8.0 下载:NVIDIA_kernel-1.0-3123.src.rpm 下载:NVIDIA_GLX-1.0-3123.i386.rpm 确定作业系统上安装了开发软体包, 并且你有进行过一次核心的编译, 如果你在 编译之後 执行了 "make mrproper" 你得再执行一次核心的编译. 执行"rpmbuild --rebuild NVIDIA_kernel-1.0-3123.src.rpm" 结果 为:"/usr/src/redhat/RPMS/i386/NVIDIA_kernel-1.0-3123.i386.rpm" 安装:核心驱动程式 "rpm -ivh /usr/src/redhat/RPMS/i386/NVIDIA_kernel-1.0-3123.i386.rpm" 安装GLX:"rpm -ivh NVIDIA_GLX-1.0-3123.i386.rpm" 设定XFree86Config, 和刚才提到的一样 6.1 核心 kernel-2.4.18-17.8.0 注意:这些步骤是基於kernel-2.4.18-17.8.0来设定的. 下载 NVIDIA_kernel-1.0-3123.src.rpm 下载 NVIDIA_GLX-1.0-3123.i386.rpm 将 /etc/inittab 设定档中的 id:5:initdefault: 变更为 id:3:initdefault: 注意: 这将在下一次启动时开启多用户模式. 备份驱动程式: ______________________________________________________________ "cd /usr/src/redhat/RPMS/i386" "mv NVIDIA_kernel-1.0-3123.i386.rpm NVIDIA_kernel-1.0-3123.i386.rpm.old" ______________________________________________________________ 将核心升级为kernel-2.4.18-17.8.0 并同时升级源代码为 kernel-source-2.4.18-17.8.0 使用新核心重新启动机器. 用 root 帐号登录. 移除老的驱动程式: ______________________________________________________________ rpm -e NVIDIA_GLX-1.0-3123 rpm -e NVIDIA_kernel-1.0-3123 ______________________________________________________________ 执行 "rpmbuild --rebuild NVIDIA_kernel-1.0-3123.src.rpm" 它将依据新的 核心编译驱动程式. 结果为: "/usr/src/redhat/RPMS/i386/NVIDIA_kernel-1.0-3123.i386.rpm" 安装驱动程式: ______________________________________________________________ "rpm -ivh /usr/src/redhat/RPMS/i386/NVIDIA_kernel-1.0-3123.i386.rpm" ______________________________________________________________ 安装GLX驱动程式 ______________________________________________________________ "rpm -ivh NVIDIA_GLX-1.0-3123.i386.rpm" ______________________________________________________________ 按照上面的方法设定XF86Config-4 执行 "startx" . 将 /etc/inittab 设定档中的 id:3:initdefault: 变更为 id:5:initdefault: 最後,请享受Nvidia带给你的卓越性能吧! 7. 设定TWINVIEW TWINVIEW可以使用你同时连接两个莹幕. 以下型号的芯片支援TWINVIEW, 当然, 你的3D加速卡上还得有两个接口. ______________________________________________________________ GeForce2 MX, GeForce2 Go 范泽龙2 (Quadro2) MXR 范泽龙2 (Quadro2) Go GeForce4 GPUs. ______________________________________________________________ 7.1 设定XF86Config 在你的XF86Config设定档中必需有如下的描述: ______________________________________________________________ Option "TwinView" Option "SecondMonitorHorizSync" "" Option "SecondMonitorVertRefresh" "" Option "MetaModes" "" ______________________________________________________________ 你可能用到以下的 Options, 它们不是必需的: ______________________________________________________________ Option "TwinViewOrientation" "" Option "ConnectedMonitor" "" ______________________________________________________________ 它们的含义: * TwinViwe 开启功能, 没有这个描述,所有有关TwinViwe的Optins会被忽略. * SecondMonitorHorizSync, SecondMonitorVertRefresh 它们强制第二个莹 幕使用这些设定. 在 Monitor 部份有相应的描述可以参考,注意:请不要不 加任何修改地复制数值,这样做可能对硬体产生损坏. * MetaModes 模式设定 如 Option "MetaModes" "1280x1024,1280x1024; 1024x768,1024x768" * TwinViewOrientation 设定相对於第一个莹幕的位置.如: "RightOf" (the default) "LeftOf" "Above" "Below" "Clone" ConnectedMonitor 连接类型, 如 Option "ConnectedMonitor" "CRT, DFP" 8. 故障排除 8.1 我要如何得到故障信息的具体含义? 一般来说,这些都在 /var/lov/XFree86.*.log 日志当中. "(WW)"代表警讯 "(EE)"代表错误 8.2 不能执行 startx, 日志当中有这样的讯息:"(EE) NVIDIA(0): Failed to initialize the NVdriver kernel module!" 这是核心模组的问题, 请先用 lsmod 查看模组的载入情况, 如果没有AGP驱动模 组请用 modprobe 载入, 如果在载入的时候出现问题, 可能你所载入的模组并不 是为你的核心编译的. 在编译的驱动程式的时候可以指定你的核心: 'make install SYSINCLUDE=/path/to/kernel/headers' 模组的名称为 "NVdriver" 8.3 我能启动X, 但是 OpenGL的应用无效 这可能和函式库有关, 请执行 "ldconfig" ,另外请检视 XF86Config设定档, 确 信里面有加载glx的描述. 8.4 OpenGL 软体出现如下警讯是什麽问题? ______________________________________________________________ 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. ______________________________________________________________ 看起来像是PAM安全模组的问题(它变更了设备的访问权限), 如果要解决它,请关 闭PAM. 如果你的 /etc/security/ 目录里有 console.perms 设定档 请将以 < dri > 开头的字句整行移除. 如果你的系统里有 /etc/logindevperms 请移除与 /dev/nvidiactl 有关的字句. 然後执行 chmod 0666 /dev/nvidia* ; chown root /dev/nvidia* 8.5 OpenGL 程式挂掉并且有如下警讯: ______________________________________________________________ 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. ______________________________________________________________ 这是老版本的动态加载器造成的. 请设定环境变量 __GL_SINGLE_THREADED 为任 意值. 如果你使用bash shell ,请你这样执行: ______________________________________________________________ export __GL_SINGLE_THREADED ______________________________________________________________ 如果你使用 csh 和相关的shell 请这样执行: ______________________________________________________________ setenv __GL_SINGLE_THREADED ______________________________________________________________ 8.6 在我执行 雷神III 切换显示模式时, 它挂掉了. 照上面的方法设定 __GL_SINGLE_THREADED 8.7 当我执行 startx 时, X 挂掉了, 并在 XFree86 日志中留有如下记录: ______________________________________________________________ (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. ______________________________________________________________ nvidia_drv.o 需要一个符号连结, 有些rpm版本在安装时没有建立这种连结, 推 荐你用 NVIDIA_GLX 的 tar 安装包进行安装. 8.8 我的系统可以运行, 但不稳定, 这是怎麽回事? 这与AGP模式有关, 可以通过 Option "NvAgp" "0至3的值" 来设定. "0"表示关 闭加速; "1" 表示使用NVAGP; "2" 表示使用AGPGART; "3" 表示使用 AGPART, 如果失效, 就自动使用NVAGP模式. 注意: 要使用 AGPGART 模式, 你必需将它编 译进核心,或者是编译成模组. 如果系统核心当中有 AGPGART, NVAGP 模式将不 起任何作用. 所以推荐你将 AGPGART 编译成模组. 另外要注意的是, 变更驱动 程式後要重新启动你的机器才能生效. 以下的芯片集支援 NVAGP 模式, 其它的芯片集请使用 AGPGART 模式. ______________________________________________________________ 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 ______________________________________________________________ 一些 Linux 核心在AMD架构的CPU上运行时可能会出现与AGP有关的Bug. 它们是: ______________________________________________________________ AMD Athlon XP AMD Athlong 4 AMD Athlon MP and Models 6 AMD Duron ______________________________________________________________ 你可以在开机的时候避开它们的Bug: 在 GRUB 中输入 mem=nopentium 或在 lilo.conf 设定档中加入 : append = "mem=nopentium" 设定 BIOS 中AGP的□围在 0xEA 和 0xEE 之间. 请升级你的 BIOS. 设定 AGP的速率档位: ______________________________________________________________ insmod NVdriver NVreg_ReqAGPRate=2 # 只使用第2档 insmod NVdriver NVreg_ReqAGPRate=1 # 只使用第1档 ______________________________________________________________ 也可以在 /etc/modules.conf 设定档中进行描述: ______________________________________________________________ alias char-major-195 NVdriver options NVdriver NVreg_ReqAGPRate=2 options NVdriver NVreg_ReqAGPRate=1 ______________________________________________________________ 8.9 为什麽我的 OpenGL 软体慢得要死? 可能它还在使用老的函式库. 8.10 在编译核心驱动程式时出现警讯: ______________________________________________________________ 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. ______________________________________________________________ 系统上的核心不是用当前的GCC编译的, 请重新编译核心, 并在重新启动时载入 新核心. 8.11 X 挂掉了, 并出现警讯"Failed to allocate LUT context DMA" 解决方法同上一个问题一样. References 1. mailto:expns@yahoo.com 2. http://www.gnu.org/copyleft/gpl.html