Guía de instalación y README del Juego de controladores FreeBSD de NVIDIA Última actualización: $Date: 2005/06/13 $ Última versión del controlador: 1.0-7676 Este README proporciona las directrices básicas de instalación y configuración del juego de controladores FreeBSD de NVIDIA en sistemas que ejecutan FreeBSD 5.x -STABLE. Su contenido se complementa con el README del juego de controladores NVIDIA para Linux, que contiene información común a ambos sistemas operativos. Recordamos que algunas partes del juego de controladores FreeBSD no han sido sometidas aún a las pruebas de alto nivel que pasan los controladores Linux cuando se publican. Si experimentas algún problema, no olvides notificarlo. __________________________________________________________________________ CONTENIDO: (sec-01) REQUISITOS DE SOFTWARE (sec-02) INSTRUCCIONES DE INSTALACIÓN BÁSICAS (sec-03) INSTRUCCIONES DE CONFIGURACIÓN BÁSICAS (sec-04) PAQUETES DE COMPATIBILIDAD CON LINUX (sec-05) SELECCIÓN DEL CONTROLADOR AGP GART (sec-06) CONFIGURACIÓN DE PARÁMETROS DE BAJO NIVEL (sec-07) PREGUNTAS FRECUENTES (ap-a) APÉNDICE A: CHIPS NVIDIA SOPORTADOS (ap-b) APÉNDICE B: DESARROLLO DE APLICACIONES MULTIHILO (ap-c) APÉNDICE C: INTERFAZ SYSCTL (ap-d) APÉNDICE D: RECONOCIMIENTOS (ap-e) APÉNDICE E: INFORMACIÓN DE CONTACTO __________________________________________________________________________ (sec-01) REQUISITOS DE SOFTWARE __________________________________________________________________________ Los requisitos mínimos de software para los controladores FreeBSD son: - FreeBSD -STABLE (versión 5.3 o posterior), o FreeBSD -CURRENT (5.2.1 o posterior) Consulte la información relacionada con AGP que encontrará en la sección 05: SELECCIÓN DEL CONTROLADOR AGP GART. - Árbol de archivos fuente del kernel en /usr/src/sys (paquete 'ssys' instalado) - Xorg 6.7.0 o XFree86 4.2 y versiones posteriores No se soportan las versiones intermediasde FreeBSD -STABLE anteriores a FreeBSD 5.3 y FreeBSD 6.x -CURRENT. __________________________________________________________________________ (sec-02) INSTRUCCIONES DE INSTALACIÓN BÁSICAS __________________________________________________________________________ Este procedimiento de instalación se simplificará bastante en el futuro, pero, por el momento, es preciso descargar los archivos del juego de controladores FreeBSD de NVIDIA de las páginas Web de NVIDIA, descomprimirlos en un directorio temporal elegido por el usuario y ejecutar lo siguiente desde el directorio raíz del árbol de directorios descomprimido: make install Con ello, se compila, se instala y se carga el módulo kernel de FreeBSD en el kernel (kldload). También se elimina cualquier librería de OpenGL que entre en conflicto con el módulo y se instalan las librerías OpenGL de NVIDIA. Asimismo, se crean los archivos de dispositivo /dev/nvidia (a menos que el sistema utilice devfs) y se actualiza el archivo /boot/loader.conf para cargar automáticamente el módulo kernel de NVIDIA al arrancar, así como el módulo de compatibilidad ABI para Linux, en caso de que no esté compilado en el kernel. En la lista siguiente figuran los archivos instalados por el script y sus directorios dentro del sistema de archivos. - libGL.so /usr/X11R6/lib - libGL.so.1 /usr/X11R6/lib - libnvidia-tls.so /usr/X11R6/lib - libnvidia-tls.so.1 /usr/X11R6/lib - libGLcore.so /usr/X11R6/lib - libGLcore.so.1 /usr/X11R6/lib - nvidia_drv.o /usr/X11R6/lib/modules/drivers - libglx.so /usr/X11R6/lib/modules/extensions - libglx.so.1 /usr/X11R6/lib/modules/extensions - nvidia0 /dev - nvidia1 /dev - nvidia2 /dev - nvidia3 /dev - nvidiactl /dev - libGL.so.1.0-7676 /compat/linux/usr/lib - libnvidia-tls.so.1.0-7676 /compat/linux/usr/lib - libGLcore.so.1.0-7676 /compat/linux/usr/lib __________________________________________________________________________ (sec-03) INSTRUCCIONES DE CONFIGURACIÓN BÁSICAS __________________________________________________________________________ En estas instrucciones se da por supuesto que hay instalado un archivo de configuración XFree86 o Xorg básico adaptado al sistema utilizado. El archivo XFree86/Xorg tiene al menos dos secciones de interés: - La sección "Module" - Las secciones "Device" correspondientes a los dispositivos NVIDIA Una sección "Module" típica configurada para el juego de controladores NVIDIA sería similar a la siguiente: Section "Module" Load "bitmap" Load "extmod" Load "dbe" Load "type1" Load "glx" Load "freetype" EndSection Importante: la línea 'Load "glx"' es la que indica al servidor X que cargue la extensión GLX de XFree86/Xorg de NVIDIA. Las líneas "dri" y "GLcore", que suelen estar presentes en archivos de configuración generados automáticamente, no son imprescindibles, pero tampoco perjudican. Una sección "Device" típica configurada para los controladores NVIDIA podría ser similar a ésta: Section "Device" Identifier "Device" Driver "nvidia" VendorName "NVIDIA" BoardName "GeForce2 Go" EndSection Importante: la línea 'Driver "nvidia"' es la que indica al servidor X que utilice el módulo del controlador XFree86/Xorg de NVIDIA (nvidia_drv.o) para este dispositivo. La mayoría de las utilidades de configuración eligen el controlador de código abierto "nv" (nv_drv.o) de forma predeterminada. Si el archivo XF86Config/xorg.conf tiene una sección "Device" con la línea 'Driver "nv"', es preciso cambiarla por 'Driver "nvidia"'. Consulta el archivo README del juego de controladores Linux de NVIDIA para ver una descripción completa de las opciones de configuración disponibles. __________________________________________________________________________ (sec-04) PAQUETES DE COMPATIBILIDAD CON LINUX __________________________________________________________________________ Para poder ejecutar aplicaciones OpenGL Linux en un sistema FreeBSD, es preciso cumplir ciertos requisitos. En primer lugar, hay que seguir las instrucciones de instalación de los paquetes básicos de compatibilidad con Linux que contiene el manual de FreeBSD (instalar el paquete linux_base, etc). Una vez instalados los componentes básicos, es necesario instalar las librerías OpenGL de NVIDIA para Linux en /compat/linux/usr/lib (¡no las marques con brandelf!). Si el directorio /compat/linux/usr/lib/ ya existe al instalar el controlador FreeBSD, las librerías OpenGL de compatibilidad con Linux se instalan automáticamente. Además, el módulo kernel nvidia.ko debe compilarse con soporte para la capa de compatibilidad ABI de Linux. Dado que esto es así de forma predeterminada, el módulo nvidia.ko necesita el módulo linux.ko para cargarse. Nota: si no necesitas compatibilidad ABI y no quieres cargar linux.ko, puedes compilar el módulo nvidia.ko sin soporte para la capa de compatibilidad ABI (consulta nv-freebsd.h para obtener más información). __________________________________________________________________________ (sec-05) SELECCIÓN DEL CONTROLADOR AGP GART __________________________________________________________________________ Al igual que ocurre con el juego de controladores Linux de NVIDIA, el usuario puede utilizar la opción "NvAGP" del archivo XFree86/Xorg para determinar si el controlador NVIDIA utilizará su controlador AGP interno o el controlador AGP del SO: - "NvAGP" "0" Desactiva AGP - "NvAGP" "1" Usa el controlador AGP GART de NVIDIA - "NvAGP" "2" Usa el controlador FreeBSD GART del SO (agp.ko) - "NvAGP" "3" Intenta la opción "2" y usa "1" si no lo consigue Pero, al revés de lo que ocurre con Linux, esta opción no es el único elemento de control. Debido a algunos problemas detectados, nvidia.ko debe compilarse inicialmente sin soporte para controlador AGP de FreeBSD, pero es posible cambiar este comportamiento (consulta nv-freebsd.h para obtener más información). Conviene recordar que, si se compila nvidia.ko con soporte para el controlador de FreeBSD, éste no se cargará a menos que se cargue el módulo agp.ko. El módulo agp.ko es especial en el sentido de que no se puede cargar después de arrancar el sistema, sino que es necesario añadir la línea siguiente a /boot/loader.conf para garantizar su precarga: # -- load FreeBSD AGP GART driver -- # agp_load="YES" Recordamos también que, si se carga agp.ko, puede entrar en conflicto con el controlador AGP GART (NvAGP) de NVIDIA y generar problemas de estabilidad. Por este motivo, el controlador de NVIDIA interrumpe la inicialización de NvAGP si detecta la presencia de agp.ko. Ten presente que las versiones actuales de FreeBSD se distribuyen con agp.ko integrado en el kernel. Para que NvAGP funciones, es posible recompiar el kernel sin 'device agp' o añadir la siguiente entrada al archivo /boot/device.hints: hint.agp.0.disabled="1" Cuando se compila con soporte para el controlador AGP de FreeBSD, nvidia.ko pasa a utilizar NvAGP si no detecta la presencia de agp.ko (este será el caso cuando agp.ko no soporte el chipset AGP instalado o se haya desinstalado explícitamente con el archivo device.hints). NOTA: recomendamos encarecidamente utilizar el controlador AGP de NVIDIA, NvAGP. Consulta el README del juego de controladores Linux(!) de NVIDIA para ver la lista completa de chipsets AGP soportados por el controlador AGP de NVIDIA (NvAGP). __________________________________________________________________________ (sec-06) CONFIGURACIÓN DE PARÁMETROS DE BAJO NIVEL __________________________________________________________________________ El administrador de recursos de NVIDIA (Resource Manager) reconoce varios parámetros de configuración de bajo nivel que pueden modificarse a través de la interfaz sysctl /antes/ de iniciar el servidor X. Normalmente no debería ser necesario modificar ninguno de estos parámetros, pero puede haber ocasiones en que es imprescindible o deseable hacerlo. Para ver los valores que tienen definidos estos parámetros, ejecuta el siguiente comando de sysctl (tiene que estar cargado el módulo nvidia.ko): sysctl -a hw.nvidia.registry Para cambiar alguno de esos valores, es preciso especificar el nombre completo del OID seguido de '=' y del nuevo valor, por ejemplo: sysctl hw.nvidia.registry.EnableVia4x=1 Es posible automatizar la configuración de los parámetros agregándolos al archivo /etc/sysctl.conf. Consulta ``man 5 sysctl.conf'' para obtener más información. nvidia.ko reconoce los siguientes parámetros: * * Opción: VideoMemoryTypeOverride * * Descripción: * * Normalmente detectamos el tipo de memoria de las tarjetas TNT * examinando la BIOS integrada. Lamentablemente, hemos detectado * casos en los que se ha actualizado la tarjeta con la BIOS inadecuada. * Por ejemplo, casos en que una tarjeta TNT con memoria SDRAM se ha * actualizado con una BIOS de SGRAM. Esta opción tiene como propósito * resolver esta situación. Asegúrate de configurar el valor * correspondiente a la memoria utilizada por la tarjeta. * * Valores posibles: * * 1: SDRAM * 2: SGRAM * * No hay mucho más que podamos hacer aquí. Existen casos extremos en * los que incluso esta solución falla. Por ejemplo, si hay dos tarjetas * TNT en el mismo sistema y una utiliza SGRAM y la otra SDRAM. * * Esta opción se encuentra desactivada de forma predeterminada. * Las instrucciones para activarla están a continuación. * * * Opción: EnableVia4x * * Descripción: * * Hemos tenido problemas al usar el modo 4x en algunos chipsets Via, * lo que nos ha obligado a utilizar el modo 2x de forma predeterminada. * Si quieres probar a mantener el modo 4x, configura el valor 1 en este * parámetro. Si el sistema se bloquea, no te quedará más remedio que * usar el modo 2x. No podemos hacer nada más al respecto. * * Valores posibles: * * 0: Desactiva AGP 4x en los chipsets Via (predeterminado) * 1: Activa AGP 4x en los chipsets Via * * * Opción: EnableALiAGP * * Descripción: * * Se ha comprobado que algunos chipsets ALi (ALi1541, ALi1647) * causan graves problemas de estabilidad en el sistema cuando * tienen AGP activado. Para evitar bloqueos, desactivamos AGP de * forma automática en sistemas con este tipo de chipsets. Parece * que, si se actualiza la BIOS del sistema y se utilizan versiones * recientes del controlador AGP Gart, los sistemas se vuelven mucho * más estables. Si tienes un sistema con alguno de estos chips y ha * funcionado razonablemente bien hasta ahora, o quieres probar con * nuevas versiones de la BIOS y AGPGART, puedes activar el soporte * de AGP definiendo el valor 1 en este parámetro. * * Valores posibles: * * 0: Desactiva AGP en Ali1541 y ALi1647 (predeterminado) * 1: Activa AGP en Ali1541 y ALi1647 * * * Opción: NvAGP * * Descripción: * * Esta opción controla qué controlador AGP GART se utiliza cuando * no se ha hecho ninguna petición explícita para cambiar el valor * predeterminado (servidor X). * * Valores posibles: * * 0 = desactivar el soporte de AGP * 1 = usar el controlador de NVIDIA (si es posible) * 2 = usar el controlador AGPGART del kernel (si es posible) * 3 = usar cualquier controlador disponible (intentar 2, luego 1) * * Ten en cuenta que el controlador AGP GART interno de NVIDIA no se * utilizará si AGPGART se ha vinculado estáticamente al kernel o se ha * compilado como un módulo kernel y cargado antes que el módulo kernel * de NVIDIA. * * * Opción: ReqAGPRate * * Descripción: * * En general, el controlador compara las velocidades del chipset y * la tarjeta y, de los valores comunes, elige la tasa más alta. * Esta opción impone un límite máximo para obligar al controlador * a utilizar velocidades más bajas. Al hacerlo, el controlador no * intentará utilizar velocidades superiores a las admitidas por el * chipset y la tarjeta. * * Es importante tener ciertos conocimientos para activar esta opción. * En principio, los controladores AGP habilitan la máxima velocidad * AGP admitida por la tarjeta y el chipset de la placa base, pero, en * algunos casos, imponen una velocidad inferior para sortear algunos * errores existentes en nuestros chipsets y los chipsets de la placa. * El uso de esta variable invalidará las correcciones aplicadas a * dichos errores, lo que puede ser aconsejable en algunas ocasiones, * pero no en la mayoría de ellas. * * ¡No ofrecemos ningún tipo de soporte para esta opción! * * Valores posibles: * * El parámetro espera una máscara de bits (7 = 1 | 2 | 4, 3 = 1 | 2, etc.) * * Esta opción se encuentra desactivada de forma predeterminada. * Las instrucciones para activarla se encuentran más adelante. * * Opción: EnableAGPSBA * * Descripción: * * Por razones de estabilidad, el controlador no efectúa * direccionamiento a través de canales adicionales (Side Band * Addressing) aunque lo soporten el chipset y la tarjeta AGP. * Este comportamiento se puede modificar cambiando la siguiente * clave en el registro. * * ¡No hay soporte para esta opción! * * Valores posibles: * * 0 = Desactiva Side Band Addressing (predeterminado en x86, * ver a continuación) * 1 = Activa Side Band Addressing (si el sistema soporta esta función) * * * Opción: EnableAGPFW * * Descripción: * * Al igual que el direccionamiento Side Band Addressing, la función * Fast Writes está desactivada de forma predeterminada. Si quieres * activarla en los sistemas que la soportan, puedes hacerlo con esta * clave del registro. Ten en cuenta que puede hacer que el sistema * se vuelva inestable si hay varios chipsets AGP. * * ¡No hay soporte para esta opción! * * Valores posibles: * * 0 = Desactiva Fast Writes (predeterminado) * 1 = Activa Fast Writes * * * Opción: SoftEDIDs * * Descripción: * * La clave SoftEDIDs activa la generación dinámica de un EDID * apropiado para pantallas LCD de dispositivos portátiles. Para ello, * utiliza los datos almacenados en la BIOS de vídeo. Si se desactiva * esta clave, el EDID se obtiene de las tablas del código del sistema * portátil a partir del valor de la clave Mobile del registro. * * Valores posibles: * * 0 = Desactiva la generación dinámica de EDID * 1 = Activa la generación dinámica de EDID (predeterminado) * * * Opción: Mobile * * Descripción: * * La clave Mobile sólo es necesaria para sistemas portátiles si * se ha desactivado la clave SoftEDIDs (ver opción anterior), en * cuyo caso, el valor de esta clave se utilizará para obtener * el EDID correcto para la pantalla LCD del portátil. * * Valores posibles: * * ~0 = Detecta automáticamente el valor correcto (predeterminado) * 1 = Portátiles Dell * 2 = Toshiba que no sean Compal * 3 = Todos los demás portátiles * 4 = Toshiba/Compal * 5 = Gateway * * Asegúrate de especificar el valor adecuado según el portátil utilizado. * __________________________________________________________________________ (sec-07) PREGUNTAS FRECUENTES __________________________________________________________________________ P: He leído que el controlador de NVIDIA para FreeBSD no es un driver nativo, sino que reside sobre la capa de compatibilidad ABI de Linux. ¿Es cierto? R: No, el juego de controladores de NVIDIA para FreeBSD es un driver nativo. Proporciona bibliotecas OpenGL para Linux además de las bibliotecas nativas de FreeBSD para que los usuarios puedan ejecutar aplicaciones OpenGL en Linux. P: X se bloquea durante `startx` y el archivo XFree86.0.log registra este mensaje de error: (EE) NVIDIA(0): Failed to obtain a shared memory identifier. R: Los controladores NVIDIA para OpenGL y X necesitan utilizar memoria compartida para comunicarse. Es preciso tener: a) SYSVSHM compilada en el kernel b) XFree86-Server-4.2.1_3 o una versión posterior Descargar XFree86 4.2.1 del sitio FTP de XFree86 no basta. Se corrigió un problema de la memoria compartida de XFree86 entre las versiones 4.2.1 y XFree86-Server-4.2.1_3. P: X no consigue arrancar y, durante el arranque, recibo mensajes de error como este: nvidia0: NVRM: NVIDIA REG resource alloc failed. o: nvidia0: NVRM: NVIDIA IRQ resource alloc failed. P: X no consigue arrancar y durante el proceso de arranque recibo el siguiente error: nvidia0: NVRM: NVIDIA MEM resource alloc failed. R: En algunos kernels de FreeBSD puede ser necesario añadir la línea siguiente al archivo /boot/loader.conf: hw.pci.allow_unsupported_io_range="1" Esto permitirá al módulo kernel de NVIDIA conectarse. R: La BIOS del sistema no ha configurado correctamente la tarjeta gráfica. FreeBSD no puede configurar los dispositivos PCI que la BIOS deja sin configurar. Desactiva la opción "PNP-OS" en la BIOS del sistema. P: ¿Por qué las bibliotecas de compatibilidad con Linux no detectan correctamente si se están utilizando en una aplicación multihilo? R: Las bibliotecas de compatibilidad con Linux no son capaces de detectar si se están utilizando en una aplicación multihilo (multithreaded) porque el registro de segmento %gs no se inicializa correctamente para compatibilidad Linux. Como solución alternativa, se puede utilizar la variable de entorno __GL_SINGLE_THREADED (configurada con "1"), aunque a costa de poner en peligro la integridad de los threads. P: Cuanto trato de arrancar X, sólo obtengo una pantalla en negro. R: El problema puede deberse a varias razones. Si aún no lo has hecho, prueba a desactivar el soporte de ACPI y consulta la sección de preguntas frecuentes del controlador de NVIDIA para Linux. P: ¿Cuándo trato de iniciar `nvidia-settings`, recibo un mensaje parecido a éste: Shared object "libgtk-x11-2.0.so.400" not found, required by nvidia-settings R: Debido a las diferencias entre los paquetes de puertos de gtk+-2.x incluidos en las distintas versiones de FreeBSD 5.x, es posible que el archivo binario de nvidia-settings que se entrega ya compilado con el controlador de NVIDIA no funcione con versiones de FreeBSD anteriores a la 5.3. Si tienes un paquete de puertos de gtk+-2.x y gmake instalado en el sistema, puedes compilar la utilidad nvidia-installer desde los archivos fuente para resolver el problema. Descarga nvidia-settings-1.0.tar.gz (o la última versión) desde esta dirección: ftp://download.nvidia.com/XFree86/nvidia-settings Una vez hecho, puedes descomprimir, compilar e instalar la utilidad (en /usr/local/bin) con: tar zxf nvidia-settings-1.0.tar.gz cd nvidia-settings-1.0 gmake install __________________________________________________________________________ (ap-a) APÉNDICE R: CHIPS NVIDIA SOPORTADOS __________________________________________________________________________ Consulta el README del Juego de controladores NVIDIA para Linux para ver la lista completa de chips gráficos soportados. __________________________________________________________________________ (ap-b) APÉNDICE B: DESARROLLO DE APLICACIONES MULTIHILO __________________________________________________________________________ Esta versión del juego de controladores de NVIDIA para FreeBSD permite utilizar aplicaciones multihilo (multi-threaded) con seguridad en sistemas FreeBSD 5.3 o posteriores que utilicen las bibliotecas KSE libpthread o libthr. En estos sistemas, las bibliotecas de compatibilidad ABI de Linux también aceptan hilos (son thread-safe). __________________________________________________________________________ (ap-c) APÉNDICE C: INTERFAZ SYSCTL __________________________________________________________________________ La interfaz sysctl permite obtener información de tiempo de ejecución sobre el controlador, las tarjetas gráficas NVIDIA instaladas y el estado de AGP. También permite modificar algunas opciones de configuración de bajo nivel y/o el uso de diversas funcionalidades. Los distintos tipos de información se almacenan jerárquicamente bajo hw.nvidia y pueden obtenerse mediante el comando sysctl(8): - hw.nvidia.version Muestra la revisión del controlador instalado. - hw.nvidia.cards.n.* Estos identificadores proporcionan información sobre el dispositivo 'n' de NVIDIA: - model: nombre de producto del dispositivo - irP: IRQ solicitada por el dispositivo - vbios: revisión de VBIOS del dispositivo - type: tipo de bus del dispositivo - hw.nvidia.agp.host-bridge.* - hw.nvidia.agp.card.* Estos identificadores proporcionan información sobre la capacidad AGP de la tarjeta gráfica AGP y el puente de comunicación con el bus del sistema (host-bridge) respectivamente. Los valores correctos se obtienen normalmente después de arrancar el sistema y antes de iniciar el servidor X (y el subsistema AGP). - rates: velocidades AGP soportadas por el dispositivo - fw: indica si el dispositivo soporta fast-writes de AGP - sbR: indica si el dispositivo soporta side-band-addressing de AGP - registers: registros de AGP, estado:comando - hw.nvidia.agp.status.* Muestra la información de estado de AGP basándose en los registros de comando de AGP del puente de comunicación con el bus del sistema (host-bridge) y de la tarjeta AGP. - status: indica si AGP está activado o desactivado - driver: controlador en uso - rate: velocidad AGP programada - fw: indica si fast-writes está activada o desactivada - sbR: indica si side-band-addressing está activada o desactivada - hw.nvidia.registry.* Opciones de configuración de bajo nivel para el módulo kernel. Normalmente, el cambio de estas opciones es innecesario y potencialmente peligroso. Si realmente necesitas cambiarlas, tienes que hacerlo *antes* de iniciar el servidor X. __________________________________________________________________________ (ap-d) APÉNDICE D: RECONOCIMIENTOS __________________________________________________________________________ El puerto del controlador NVIDIA para FreeBSD se debe en gran medida a las aportaciones de Christian Zander y Matthew N. Dodd . __________________________________________________________________________ (ap-e) APÉNDICE E: INFORMACIÓN DE CONTACTO __________________________________________________________________________ Si crees que has encontrado algún un defecto en el controlador o tienes algún problema para el que no encuentras solución en ningún otro sitio, puedes enviarnos un mensaje a la siguiente dirección de correo electrónico: freebsd-gfx-bugs@nvidia.com.