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