Next Previous Contents

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"

解决方法同上一个问题一样.


Next Previous Contents