Instalación y configuración (y problemas) de los drivers NVIDIA


Las tarjetas NVidia, desde la TNT hasta las GeForce3 o las Quadro2 tienen
drivers oficiales de NVIDIA(1), aunque sus
drivers no son open source. En este artículo explico como instalarlos y
solucionar algunos problemas para Debian, aunque deberían servir para otras
distribuciones (si se siguen las instrucciones de NVIDIA(2)).

Los drivers de NVIDIA para Linux se encuentran disponibles en esta página(2).
Las instrucciones están en PDF(3) o
texto plano(4).

Hay ficheros tgz, rpm para RedHat 6.2, 7.0 y 7.1 y para Suse 7.0, 7.1, 7.2,
Mandrake 8.0. Todos en versiones para kernels de un procesador como de dos
procesadores.

Los módulos
Los drivers consisten de dos partes:

  • Un módulo del kernel: reemplaza el módulo nv del Linux y está compuesto
    de una parte “abierta” que sólo hace llamadas a funciones de módulos
    pecompilados. Estos módulos tienes que ser instalados con las funets
    normales del kernel y el kernel debe ser recompilado.
  • Los módulos GLX para el Xfree 4.0 o 4.1: Estos son las librerías que
    son cargadas por el Xfree para que funcionen las OpenGL.
  • Instalación de los paquetes en Debian
    En el caso de contar con algunos de las distribuciones Linux previamente
    mencionadas, se deben seguir las instrucciones de instalación. En caso de usar
    Debian (probada con la Sid), deben instalarse los siguientes
    paquetes:

    apt-get install nvidia-glx
    apt-get install nvidia-kernel-src

    Opcionalmente podéis instalar el nvidia-glx-dev si pensáis desarrollar
    con GL.

    IMPORTANTE: Los procedimientos de instalar los paquetes de Debian, incluyen
    bajarse los tgz de NVIDIA, pero a veces no funciona el URL especificado en las
    reglas de los paquetes, por lo que es recomendable antes bajarse ambos ficheros
    y ponerlos en /usr/src. El dpkg los detectará y los usará en vez de bajarlo de
    Internet.

    Con esos dos paquetes se pueden instalar y compilar el kernel. También se pueden
    bajar los paquetes previamente compilados, pero no los probé personalmente. Yo
    siempre he recompilado el kernel.

    Compilación e instalación de los paquetes

    Una vez instalados con el apt-get, encontraréis en /usr/src dos directorios
    (toda la información de los módulos se instala en el /usr/doc):

    nvidia-glx-1.0.GLXVER
    nvidia-kernel-src.tar.gz

    donde GLXVER es la versión de las GLX (al momento de escribir este artículo, la
    última versión es la 1.0.1541

    Lo primero que hay que hacer, después de compilar el kernel, es:

    tar xvzf nvidia-kernel-src.tar.gz
    cd kernel-source-KVER
    make-kpkg modules_image
    dpkg -i ../nvidia-kernel-KVER*.deb

    donde KVER es la versión del kernel que habéis compilado previamente (así se
    llaman los paquetes de los fuentes del kernel en Debian).

    Una vez realizado los pasos anteriores, ya están instalados los módulos del
    kernel de la targeta. Ahora hay que instalar las librerías GLX que serán usadas
    por el XFree. Para ello:

    cd nvidia-glx-1.0.GLXVER
    dpkg -i ../nvidia-glx*.deb

    Incompatibilidades del kernel
    Los módulos del kernel de NVIDIA son incompatibles con el framebuffer y el
    módulo nv del kernel. Así que hay que deshabilitarlos a la hora del make
    menuconfig.

    Incompatibilidades GLX
    hay que tener mucho cuidado que no queden viejas librerías de OpenGL instaladas
    en el sistema, ya que darán problemas a la hora de ejecutar programas GL. Por
    ejemplo, en mi sistema ha quedado (para las GLX 1.0.1541):

    gallir@linux:/usr/src$ locate GL | grep .so
    /usr/lib/libGL.so
    /usr/lib/libGL.so.1
    /usr/lib/libGL.so.1.0.1541
    /usr/lib/libGLcore.so.1
    /usr/lib/libGLcore.so.1.0.1541

    gallir@linux:/usr/src$ locate glx | grep .so

    /usr/X11R6/lib/modules/extensions/libglx.so
    /usr/X11R6/lib/modules/extensions/libglx.so.1.0.1541

    Estas son las librerías necesarias para las GLX.

    Si se ven otras librerías GL o
    GLX en los directorios /usr/lib o /usr/X11R6/lib/modules/extensions es porque
    tenéis otras versiones instaladas. Mirarlas y moverlas a otros directorios si
    tenéis problemas (nunca borrarlas hasta estar seguros que funciona todo
    correctamente).

    Configuración del XFree (/etc/X11/XF86Config-4)
    Antes de arrancar las X, hay que verificar que tenéis las siguientes opciones en
    el fichero de configuración del XFree:


    Section “Module”
    Load “dbe”
    Load “glx”
    Load “extmod”

    Section “Device”
    Identifier “GeForce”
    Driver “nvidia”

    Verificar que todo esté correcto
    Si tenéis todo esto hecho correctamente (no os olvidéis también de instalar el
    kernel que habéis compilado), la terjeta ya debe funcionar y suele ir muy rapido
    con las GL.

    Si tenéis problemas, lo primera que hay que verificar es que una vez arrancadas
    las X tengáis el módulo del kernel NVIDIA cargado

    gallir@linux:/usr/src$ /sbin/lsmod
    Module Size Used by
    NVdriver 723120 14 (autoclean)

    y que el XFree pudo cargar correctamente el módulo GLX. Si ejecutáis el comando
    xdpyinfo os tiene que aparecer NVIDIA-GLX en la sección number of
    extensions.

    Problemas con el APM

    El módulo del kernel de NVIDIA no deja que el sistema se ponga en estado suspend
    o sleep, por lo que es normal que encontréis los siguienes mensajes en
    /var/log/messages o dmesg.

    NVRM: avoiding suspend request, don’t want to shutdown!!
    nv_kern_pm event: rqst 0x0 data 0x3

    Esto es normal y una putada… porque es código cerrado y no se puede hacer
    nada, solo esperar o presionar a NVIDIA para que corrija dichos errores.

    Workaround

    Mientras tanto, yo lo solucioné haciendo que se descargue el módulo NVdriver
    antes que el sistema intente pasar a estado suspendido. Esto se hace gracias al
    apmd.

    El apmd es llamado por el kernel cada vez que se produce un evento de la BIOS
    para cambiar el estado del sistema. Luego el apmd llama al apmd_proxy
    que llamará a los scripts o programas ubicados en el /etc/apm/event.d:

    linux:/# ls /etc/apm/event.d/
    00hwclock 00nvidia

    En particular, yo he creado el fichero 00nvidia cuyo contenido es el
    siguiente:

    #!/bin/sh

    # get Debian config information
    . /etc/default/rcS

    if [ “$1” = “suspend” -o “$1” = “standby” ]; then
    /etc/init.d/kdm stop
    sleep 1
    /sbin/rmmod NVdriver

    elif [ “$1” = “resume” -o “$1” = “start” ]; then
    /etc/init.d/kdm start
    fi

    Lo que hace el script es que cada vez que se reciba el evento suspend o
    standby primero para al kdm y luego descarga el módulo NVdriver para
    que el sistema pueda pasar a suspendido. Luego cuando se reinicia el sistema,
    arranca nuevamente el kdm.
    Este fichero funciona perfectamente para mi ordenador, pero no los he probado
    con portátiles ni con diferentes versiones de BIOS
    . Por supuesto, tenéis que
    tener habilitado el módulo apm del kernel y el paquete apmd
    instalado
    . Si os encontráis con otros casos y lográis resolver este problema
    del APM, poned vuestras soluciones aquí…

    Nada más, que os vaya bien el Quake… sobre todo el Quake3 que va muy bien a
    pantalla completa, 16 bits (en el XF86COnfig) y resolución (en el Quake) de
    1024×768
    .

    Mas info en los hilos de discusión de Bulmailing:

    Hecho con Quanta 2Lista de enlaces de este artículo:

  • http://www.nvidia.com/
  • http://www.nvidia.com/view.asp?PAGE=linux
  • http://www.nvidia.com/docs/lo/1018/SUPP/NVLinuxNotes_1541.pdf
  • http://www.nvidia.com/docs/lo/1021/SUPP/README.txt
  • http://bulma.net/pipermail/bulmailing/2001-September/006162.html
  • http://bulma.net/pipermail/bulmailing/2001-September/006181.html
  • http://bulma.net/pipermail/bulmailing/2001-September/006269.html
  • Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=869 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.


    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.