Updated: 2006-11-06
Created: 2004-01-24
Each setup involves an alternative implementation of (non complete list) these components:
All these must be changed when switching from one setup to the other, as the components from one setup are not compatible with the equivalent component from the other setup (with the single exception of the XFree86 kernel AGP module, which can also be used with the NVIDIA setup).
This document uses as examples the NVIDIA package version 44.96 and the XFree86 package version 4.3.0, with kernel version 2.4.22
This section contains a list of the files that contain
overlapping functionality between the XFree86 and the NVIDIA
setup; there are some other files in each that contain special
purpose or shared functionality, like the XFree86/Mesa3d GLUT
library that is used with an NVIDIA setup too, and the runtime
library for the XvMCNVIDIA
extension.
It is important to note that all files listed as being in
/usr/lib/
might be instead in
/usr/lib/tls/
.
/lib/modules/
2.4.22/kernel/drivers/video/nvidia.o
contains both the NVIDIA AGP driver and the OpenGL GLX low
level implementation. It is essential./lib/modules/
2.4.22/kernel/drivers/char/agp/agpgart.o
contains the optional native LinuxAGP driver;
if it is loaded, and depending on a configuration
parameter, its AGP driver will be used instead of the
one in nvidia.o
, but the latter is still
neeed as it contains the low level GLX implementation./dev/nvidiactl
and
/dev/nvidia0
device files, and
/dev/agpgart
if the agpgart.o
kernel module is also loaded./usr/lib/GL/libGL.so.1.0.
4496.nv_glx
is the OpenGL runtime API library./usr/lib/libGLcore.so.1.0.
4496
contains the implementation of most of the runtime API
library semantics./usr/X11R6/lib/modules/drivers/nvidia_drv.o
is the NVIDIA chipset driver for the XFree86 server./usr/X11R6/lib/modules/extensions/libglx.so.1.0.
4496.nv_glx
is the NVIDIA GLX extension driver for the XFree86
server.XF86Config
directives that must be present
are:
Load "glx"
in the
"Module"
section.Driver "nvidia"
in the
"Device"
section.Load "dri"
and Load
"GLcore"
directive must not be present in the
"Module"
section./lib/modules/
2.4.22/kernel/drivers/char/agp/agpgart.o
contains the native Linux AGP driver./dev/agpgart
device file./usr/X11R6/lib/libGL.so.1.2
is the OpenGL runtime API library./usr/X11R6/lib/modules/drivers/nv_drv.o
is the XFree86 chipset driver for the XFree86 server./usr/X11R6/lib/modules/extensions/libglx.a
is the XFree86/Mesa3D GLX extension driver for the XFree86
server./usr/X11R6/lib/modules/extensions/libGLcore.a
is an extra module used and automatically loaded by
libglx.a
. It does not need to be listed in
the modules
section, and it should not be
therefore listed in it as it conflicts with the
NVIDIA libglx.so
module.XF86Config
directives that must be present
are:
Load "glx"
in the
"Module"
section.Load "dri"
directive should be
in the "Module"
section.Driver "nv"
in the
"Device"
section.XF86Config
file:
"Module"
section the Load "dri"
line."Device"
section so that the Driver
line is
Driver "nvidia"
, and add the appropriate
NVIDIA driver specific options, of which probably the
"NvAGP"
is the most important./usr/X11R6/lib/modules/extensions/libglx.so.1.0.
4496.nv_glx
to
/usr/X11R6/lib/modules/extensions/libglx.so
,
for example like this:
# cd /usr/X11R6/lib/modules/extensions/ # rm -f libglx.so # ln -s libglx.so.1.0.4496.nv_glx libglx.so
rm -f /usr/lib/libGL.so*
./usr/lib/GL/libGL.so.1.0.
4496.nv_glx
to both
/usr/lib/libGL.so.1.0.
4496
and /usr/lib/libGL.so
, for example like this:
# cd /usr/lib # ln -s GL/libGL.so.1.0.4496.nv_glx libGL.so.1.0.4496 # ln -s GL/libGL.so.1.0.4496.nv_glx libGL.so
ldconfig
.Option "NvAGP"
with values
"2"
or "3"
one must also load the
agpgart.o
kernel module first, otherwise
make sure it has never been loaded.
nvidia.o
kernel module is loaded,
with something like modprobe nvidia
or:
insmod /lib/modules/2.4.22/kernel/drivers/video/nvidia.o
/dev/nvidiactl
and
/dev/nvidia0
device files exist. if one is using
devfsd
then they will autocreated when the
nvidia.o
kernel module is loaded, otherwise
run the script makedevices.sh
that comes with the
NVIDIA kernel driver package.Composite
extension is
disabled, as it is incompatible with the
GLX
extension;
usually the RANDR
and RENDER
extensions should be enabled. For example:
Section "Extensions" Option "RANDR" "on" Option "RENDER" "on" Option "Composite" "off" EndSection
XF86Config
file:
"Module"
section the Load "dri"
line."Device"
section so
that the Driver
line is Driver
"nv"
, and add the appropriate XFree86 driver
specific options.rm -f /usr/X11R6/lib/modules/extensions/libglx.so
rm -f /usr/lib/libGL.so*
/usr/X11R6/lib/libGL.so.1.2
to both
/usr/lib/libGL.so.1.2
and
/usr/lib/libGL.so
, for example like this:
# cd /usr/lib # ln -s /usr/X11R6/lib/libGL.so.1.2 libGL.so.1.2 # ln -s /usr/X11R6/lib/libGL.so.1.2 libGL.so
ldconfig
, having checked that the
/usr/lib
directory comes the
/usr/X11R6/lib
in the dynamic loader search
path.nvidia.o
kernel module is loaded, ensure
it is removed with
rmmod nvidia.oEnsure that the
agpgart.o
kernel module is loaded,
with something like modprobe agpgart
or
insmod /lib/modules/2.4.22/kernel/drivers/char/agp/agpgart.o
/dev/agpgart
device file
exists. If one is using devfsd
then it will
autocreated when the nvidia.o
kernel module is
loaded, otherwise run /dev/MAKEDEV agpgart
.Composite
extension, but without RENDER
acceleration, which is not provided by the
nv
driver, it will be rather slow;
usually the RANDR
and RENDER
extensions should be enabled. For example:
Section "Extensions" Option "RANDR" "on" Option "RENDER" "on" Option "Composite" "on" EndSection
glxinfo
. If the lines
server glx vendor string: NVIDIA Corporation
client glx vendor string: NVIDIA Corporationare present the NVIDIA chipset driver and the NVIDIA GLX extension for the X server are correctly installed. If the line
OpenGL vendor string: NVIDIA Corporationis present the NVIDIA OpenGL libraries are correctly installed.
xdpyinfo
and check that there is an
extension called NV-GLX
.ldd /usr/X11R6/bin/glxgearsand verify that there is a line that points to
/usr/lib/libGL.so.1
.file /usr/lib/libGL.so.1and verify that it says it is a symbolic link to
libGL.so.1.0.
4496.file /usr/lib/libGL.so.1.0.4496and verify that it says it is a symbolic link to
GL/libGL.so.1.0.
4496.nv_glx
.file /usr/X11R6/lib/modules/extensions/libglx.soand check that is a symbolic link to
libglx.so.1.0.
4496.nv_glx
.Load "dri"
line in
XF86Config
.Load "glx"
line in the
"Modules"
section of XF86Config
,
and that it is a line like
Loading /usr/X11R6/lib/modules/extensions/libglx.soin
/var/log/XFree86.
0.log
.Driver
in the active
"Device"
section of XF86Config
says "nvidia"
.nvidia.o
kernel module is
actually loaded and working, by running
lsmod cat /proc/driver/nvidia/version cat /proc/driver/nvidia/agp/cardand checking both files exist and the values printed are plausible.
nvidia.o
kernel module exists by running
file /dev/nvidia*
Option "NvAGP"
have value
"2"
or "3"
the
agpgart.o
kernel module is loaded.If you have used the NVIDIA installer to install the
driver, modules and libraries, you can also try using
nvidia-installer --sanity
.
glxinfo
. If the lines
server glx vendor string: SGI
client glx vendor string: SGIare present the XFree86 chipset driver and the XFree86 GLX extension for the X server are correctly installed. If the line
OpenGL vendor string: Mesa project: www.mesa3d.orgis present the Mesa3D OpenGL libraries are correctly installed.
ldd /usr/X11R6/bin/glxgearsand verify that there is a line that points to
/usr/lib/libGL.so.1
.file /usr/lib/libGL.so.1and verify that it says it is a symbolic link to
libGL.so.1.2
.file /usr/lib/libGL.so.1.2and verify that it says it is a symbolic link to
/usr/X11R6/lib/libGL.so.1.2
.
file /usr/X11R6/lib/modules/extensions/libglx.soand verify that it does not exist.
Load "dri"
line in
XF86Config
.Load "glx"
line in
the "Modules"
section of
XF86Config
, and that it is a line like
Loading /usr/X11R6/lib/modules/extensions/libglx.ain
/var/log/XFree86.
0.log
.Driver
in the active
"Device"
section of XF86Config
says "nv"
.nvidia.o
kernel module is not
loaded by running
lsmod ls -ld /proc/driver/nvidia/versionand checking that there is no
nvidia
module
listed by lsmod
and that there is no file
called /proc/driver/nvidia/version
.agpgart.o
kernel module exists by running
file /dev/agpgart
agpgart.o
kernel module is
loaded by running
lsmod
Section "Module" Load "extmod" Load "fb" Load "xaa" Load "dbe" Load "i2c" Load "ddc" Load "libglx.so" EndSection Section "Device" Identifier "Generic GeForce NVIDIA" Driver "nvidia" Option "NvAGP" "1" Option "HWCursor" "false" Option "CursorShadow" "false" Option "RenderAccel" "false" Option "NoRenderExtension" "false" EndSection
Section "Module" Load "extmod" Load "fb" Load "xaa" Load "dbe" Load "i2c" Load "ddc" Load "dri" Load "libglx.a" EndSection Section "Device" Identifier "Generic GeForce XFree86" Driver "nv" Option "HW Cursor" "false" EndSection
Screen
directive in the Device
sections selects the
CRTC.Option
"ConnectedMonitor"
selects the output socket.Option "ConnectedMonitor"
can be other than
CRT
and DFP
, for example they can be
CRT-0
, CRT-1
, DFP-0
,
TV-0
or others depending on the types of sockets
the card has got. Look also at the
APPENDIX T: DISPLAY DEVICE NAMESin the NVIDIA
README.txt
.When installing the NVIDIA proprietary drivers there are two
steps, building and installing the nvidia.o
kernel
module, and installing the OpenGL libraries and X server plugin.
Building the nvidia.o
kernel module is the most
difficult part, because a large number of conditions must be
satisfied for a successful build, some of which are dependent on
the particular release of the driver package.
It is very important to read carefully the driver
package README.txt
in its entirety (perhaps a few
times), especially the FAQ section, and the help for the
extended options of the installer, before attempting a build.
Usually recetn releases of the driver combined with recent releases of the kernel source are not as reliable as less daring combinations.
Experts might find more comfortable to extract the contents of
the installer and do a manual build in its subdirectory
usr/src/nv/
.
/tmp/.X0-lock
.--kernel-name
option to the installer,
as documented in the FAQ section of the
README.txt
.make config
and then make dep
or
whatever is equivalent for the kernel version you are using.
kernel-headers
package is not sufficient./lib/modules/
2.4.22/build
and/or the location of the kernel include
directory
might have to be explicitly specified using the
--kernel-include-path
option to the
installer./lib/modules/
2.4.22
or it must be explicitly specified using the
--kernel-install-path
option to the installer.It is important in case of problems to read the installer log
at /var/log/nvidia-installer.log
.
It may be easier to do a manual build; with the
5x.xx installers, it is in the
usr/src/nv/
directory in the extracted contents
of the installer.
The build may be done for a 2.4.x kernel with:
make -f Makefile.nvidia \ SYSINCLUDE=/usr/local/src/linux-2.4.22/include \ module
or for a 2.6.x kernel with:
make -f Makefile.kbuild \ SYSSRC=/usr/local/src/linux-2.6.4 \ module
Option "FlatPanel" "on"
with the XFree86
driver, which otherwise may default to the analog VGA
connector.NVreg_SoftEDIDs
and
NVreg_Mobile
options, as documented in
APPENDIX Kof the NVIDIA
README.txt
. Read carefully
that appendix anyhow.RENDER
extension may be
buggy; you may have to disable it, or at least disable its
hardware acceleration.44.96
.Minion.DE
may
work well, but it may also be cause of trouble.3Ddiag
,
switch2nvidia
and switch2nv
commands. There is a nice discussion in German of their use
here.First of all read the NVIDIA
README.txt
.
very carefully, as it is far from simple and easy to do it
right, and it contains a lot of useful information.
APPENDIX G: ALI SPECIFIC ISSUES,
APPENDIX H: TNT SPECIFIC ISSUES,
KNOWN LAPTOP ISSUES,
APPENDIX N: KNOWN ISSUES,
HARDWARE ISSUES,
APPENDIX R: CONFIGURING MULTIPLE X SCREENS ON ONE CARDfor a discussion of some issues with TwinView, and
APPENDIX S: POWER MANAGEMENT SUPPORTfor power management issues.
You should also consult Minion.DE's NVIDIA page for very important advice on kernel and chipset compatibility issues.
COMPOSITE
extension acceleration must be disabled in the NVIDIA driver
configuration.rivafb
rivafb
kernel module is
not interfering by making sure it is not compiled, or if compiled
is not loaded, or if loaded it is not
not enabled.agpgart
kernel
driver work better with some motherboard chipsets, and some
versions of the nvidia
kernel driver work better
with other chipset. If you are using agpgart
and
setting Option "NvAGP"
to 2 or 3, make sure that
the agpgart
module is not loaded, and the option
is set to 1 instead; and viceversa.mem=nopentium
kernel boot argument.
Newer Linux kernels have a built in automagic workaround, but
this argument is safe, in that at worst it causes a small loss
of performance.NRM: Xid
beta) locks up if the
eeprom
driver is compiled in or is
loaded as a module.change_page_attr()
and
global_flush_tlb()
(thanks to Primer for these links:
1,
2).export LD_ASSUME_KERNEL LD_ASSUME_KERNEL=2.3.98before launching the 3D application, or fix your TLS mode libraries.
ServerFlags
(inspired by a note in
Primer's sample config).2. The "Debian" Way of Installing the Nvidia Drivers.
NVIDIA Display Driver Installation on Debian:
This document describes how to install the NVIDIA proprietary display drivers for e.g. the NVIDIA GeForce, Quadro and Riva TNT series graphics cards on Debian GNU/Linux by using the driver installer provided by NVIDIA.
Installing Nvidia kernel modules on a Debian machine..
Nvidia OpenGL Configuration mini-HOWTO