Placas nVIDIA sobre Slackware con kernel 2.6.x
Desde que uso Slackware nunca puede instalar los drivers de Nvidia, algo que por ejemplo en Susue 8.2 era muy sencillo, creo haber leido cuanto articulo o tutorial da vuelta por Internet, pero nada... en cuanto ejecutaba el instalador, me daba un error, el siguiente articulo es una compilacion, traduccion y agregado de varias lecturas, lo he probado en una Gforce MX 4000 y en una Gforce 2 integrada a una motherboard Asus, todo corriendo con Slackware 10.2, con un kernel 2.6.13, el cual como leeran mas abajo tuve que compilar.
Bajando el driver de Nvidia
Para bajar el driver NVIDIA no es necesario ningún paso muy complicado.
El driver puede ser bajado directamente del sitio http://www.nvidia.com. En el sitio cliquee sobre el link Download Drivers directamente para ser direccionado a la página de drivers. en la página de drivers usted tendrá dos opciones:
Cliquear directamente sobre el link Linux and FreeBSD Drivers;
Seleccionar primero la caja Graphics Driver, seleccionar segundo la caja del modelo de su placa de vídeo y la tercera caja seleccionar la arquitectura LINUX que usted posee (IA32 es mi caso). Basta cliquear GO.
Listo te colocará sobre la página Linux Drivers Portal Page. Basta seleccionar la última versión del driver y hacer download. En mi caso era NVIDIA-Linux-x86-1.0-6111-pkg1.run.
Desactivando las X
Para verificar la incompatibilidad basta proceder con la instalación previa del driver.
Para instalar el driver es necesario estar en modo texto con la X11 desactivada. Usted puede hacer esto de dos formas. La primera basta con reinicializar el sistema en modo texto. La segunda consiste en solamente descargar la X11. Para descargar la X11 haga el siguiente procedimiento:
1 - Abra un terminal en modo root:
$ su
2 - Descargue la X11 con el comando:
# telinit 3
Descargado la X11, proceda a logearse como root.
Verificar se está compilando el driver
Un pré requisito básico para compilar el driver de Nvidia es que usted posea la fuente de su kernel. Para esto proceda con la instalación del kernel-headers primero.
Para compilar el driver no es necesario ningún. Usted deberá proceder con la ejecución de archivo:
# sh NVIDIA-Linux-x86-1.0-6111-pkg1.run
Siga el procedimiento del instalador. No hay misterios.
En caso de que no haya ningún problema durante la instalación, usted podrá ir directamente a la sección Configurando el X11.
En caso de que ocurra algún problema, verifique si aparecieron los siguientes mensajes en las cajas de dialogo:
Your kernel was configured to include rivafb support as
a loadable kernel module.
The rivafb driver conflicts with the NVIDIA driver; the
NVIDIA kernel module will still be built and installed,
but be aware that the NVIDIA driver will not be able to
function properly if the rivafb module is loaded!
seguidos de:
ERROR: Unable to build the NVIDIA kernel module.
y
ERROR: Installation has failed. Please see the file
'/var/log/nvidia-installer.log' for details. You
may find suggestions on fixing installation
problems in the README available on the Linux
driver download page at www.nvidia.com.
Este error indica que el kernel pré-compilado para su Linux está con la opcion de cargar el módulo rivafb, que causa conflictos con el driver propietario NVIDIA. Prosiga con el procedimiento de reconfiguracion del kernel.
Reconfigurando y recompilando el kernel
Primero, entre en el directorio donde se encuentra la fuente de su kernel. Generalmente se ubica e /usr/src/linux, en mi caso en /usr/src/linux-2.6.13, ya que tengo actualizado el kernel.
# cd /usr/src/linux
Una vez dentro del directorio, el kernel precisa ser reconfigurado para desabilitar el módulo RIVA Frame Buffer. Para configurar el kernel:
# make menuconfig
Siga con los cursores direccionales y seleccione el tipo de dispositivo del kernel que desea configurar presionando la tecla SPACE BAR.
Device Drivers --->
Graphic Support --->
nVidia Riva support
Con la selección sobre el nVidia Riva support, presione la tecla N para que el módulo sea desabilitado de la configuración del kernel. Note que después de deseleccionado, la caja de confirmación del módulo deberá aparecer vacía (< >).
Listo, presione a tecla ESC tantas veces cuantas sean necesarias para salir de la configuración, tomando el cuidado de salvar la misma cuando aparece la caja de diálogo apropiada.
Una vez reconfigurado el kernel, para que las configuraciones se tornen activas es necesario compilar el kernel y sus módulos nuevamente.
Para compilar el kernel, seguimos ubicados en el directorio /usr/src/linux:
# make clean; make bzImage
Para compilar los módulos:
# make modules
Para instalar los módulos:
# make modules_install
Esto puede demorar varios minutos dependiendo del tipo de maquina, procesador, memoria,etc, en mi caso un AtholnXp 2.0 con 256 de RAM tardo entre 30 y 40 minutos.
Realizando esto, ya tenemos todo lo que necesitamos en binarios, no mas compilaciones. La imagen comprimida de nuestro kernel se encuentra en la carpeta "/usr/src/linux-2.6.13/arch/i386/boot/" (si fue compilado para i386). Lo que haremos sera copiar el archivo bzImage a /boot/. Por seguridad cambiemos el nombre.
#cp bzImage /boot/vmlinux-generic-2.6.13 (le puedes poner cualquier nombre)
Ya en este lugar, lo que tendremos que hacer es una imagen de booteo (initrd).
Como genero una imagen initrd??
Entra en /boot
mkinitrd -c -k 2.6.13 -m jbd:ext3 -f ext3 -r /dev/hdb3 (si el sistema de archivos es ext3)
mkinitrd -c -k 2.6.13 -m reiserfs (para sistema de archivos reiserfs)
Ya por ultimo tendremos que ajustar nuestro gestor de arranque para que bootee con el nuevo kenel, en LiLo seria algo asi:
image=/boot/vmlinuz-generic-2.6.13
label="linux"
root=/dev/hdax <--- aca va tu numero de particion
initrd=/boot/initrd.gz
read-only
guardar y no olvidarse de ejecutar el comando "lilo" para que grabe los nuevos parametros en el MBR.
No es para nada recomendable, es mas seria algo "estupido", borrar la imagen del kernel anterior en /boot/, o eliminarla de nuestro gestor de arranque, pues, si por alguna razon nuestro kernel no es capaz de bootear, lo necesitaremos para corregir los errores. A menos que estemos COMPLETAMENTE SEGUROS de que nuestro kernel si funciona bien
Testeando a compilación del driver
Para testar a compilación del driver con el nuevo kernel compilado, es necesario reinicializar el linux con la el nuevo kernel.
# reboot
o
# shutdown -r now
Después de reiniciar con el nuevo kernel compilado, prosiga con la instalación:
# sh NVIDIA-Linux-x86-1.0-6111-pkg1.run
En caso de que la compilación e instalación del driver ocurra normalmente, prosiga con el paso de configuración de su X11.
En caso de que la compilación e instalación del kernel no sea concluida con éxito, verifique si el mensaje de error es el siguiente:
ERROR: Unable to build the NVIDIA kernel module.
ERROR: Installation has failed. Please see the file
'/var/log/nvidia-installer.log' for details. You
may find suggestions on fixing installation problems
in the README available on the Linux driver
download page at www.nvidia.com.
Significa que hubo un error en la compilación del driver. Examine el archivo del log de compilación (/var/log/nvidia.instaler) y verifique si aparece la siguiente línea:
*/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c: In
function `nv_acpi_event':
*/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c:3697:
error: `PM_SAVE_STATE' undeclared (first use in this
function)
El problema que está ocurriendo es con la funcion nv_acpi_event por causa de unma variable (PM_SAVE_STATE) que no está declarada anteriormente.
Esta variable fue desabilitada a partir del kernel 2.6.8. Es necesario hacer una corrección sobre el código fuente del driver de NVIDIA.
Corrigiendo el código fuente de NVIDIA
La instalación del driver automáticamente apaga los códigos fuente utilizados en la compilación así que termina a su ejecución. Para realizar una corrección es necesario algunos procedimientos.
Primero es necesario ejecutar el instalador solamente para extraer los archivos en un directorio:
# sh NVIDIA-Linux-x86-1.0-6111-pkg1.run --x
Esta opcion extraerá el código fuente de NVIDIA para el directorio NVIDIA-Linux-x86-1.0-6111-pkg1.
Es necesario entrar en el directorio y editar el archivo usr/src/nv/nv.c y cambiar las líneas:
case PM_SAVE_STATE:
nv_printf(NV_DBG_INFO, "NVRM: ACPI: received standby event\n");
por:
case PM_SUSPEND_MEM:
nv_printf(NV_DBG_INFO, "NVRM: ACPI: received suspend event\n");
y la línea:
case PM_RESUME:
por:
case PM_SUSPEND_ON:
y finalmente la línea:
return nv_acpi_event(dev, PM_RESUME);
por:
return nv_acpi_event(dev, PM_SUSPEND_ON);
Basta con salvar el archivo. Este "trueque" debe ser suficiente para hacer que el driver de NVIDIA pueda ser compilado.
Finalmente instalando el driver
Para compilar el driver ahora es necesario un procedimiento un poco diferente del anterior. Vamos compilar el driver a partir del directorio donde está el código fuente.
Para esto, entre en el directorio:
# cd NVIDIA-Linux-x86-1.0-6111-pkg1/
y después utilice el instalador de NVIDIA:
# ./nvidia-installer
Ahora todo deberá ocurrir normalmente y el siguiente mensaje aparecerá:
Installation of the NVIDIA Accelerated Graphics
Driver for Linux-x86 (versión: 1.0-6111) is now
complete. Please update your XF86Config or
xorg.conf file as appropriate; see the file
/usr/share/doc/NVIDIA_GLX-1.0/README for details.
Para tornar un nuevo módulo habilitado para cargar con el kernel, basta insertar la línea conteniendo el nombre del driver (nvidia) en el archivo de módulos pré cargados. En Slackware /etc/rc.d/rc.modules.
Listo, basta configurar el X11 ahora.
Configurando el X11
En caso de que usted este utilizando el XFree86, usted deberá editar el archivo XF86Config-4; en caso de que este utilizando el Xorg, edite el archivo xorg.conf. El procedimiento es el mismo.
Primero, en la sección Section "Module" modifique las líneas:
Load "v4l" # Video for Linux
## Load "glx" # 3D layer
por:
## Load "v4l" # Video for Linux
Load "glx" # 3D layer
Esto habilita el soporte GLX de la placa de vídeo.
En la sección Section "Device" substituya la línea:
Driver "nv"
por:
Driver "nvidia"
Salve el archivo. La configuración básica está terminada. Para configuraciones avanzadas, lea la documentación del driver.
Reinicializando el X
Para testar si todo ocurre bien, primero cargar el módulo nvidia en el kernel:
# modprobre nvidia
y reiniciar el X. Esto puede ser hecho de algunas maneras:
# telinit 5
o
# service gdm restart
o
# reboot
El logo de NVIDIA deberá aparecer durante la inicialización de X.
Después de entrar en un gerenciador de desktop (KDE, GDM, etc), testee el driver con algún programa GLX. El mas recomendado es:
# glxgears
Usted podrá verificar que el desempeño es mucho mas satisfactorio.
Buena suerte y buena diversión.