--- title: Capítulo 8. Configuración del kernel de FreeBSD part: Parte II. Tareas comunes prev: books/handbook/multimedia next: books/handbook/printing showBookMenu: true weight: 11 params: path: "/books/handbook/kernelconfig/" --- [[kernelconfig]] = Configuración del kernel de FreeBSD :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 8 :partnums: :source-highlighter: rouge :experimental: :images-path: books/handbook/bibliography/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] == Sinopsis El kernel de FreeBSD es el corazón del sistema operativo. Es el responsable de la gestión y control de la memoria, reforzamiento de los controles de seguridad, gestión de redes, acceso a dispositivos y muchas cosas más. FreeBSD es un sistema dinámico y configurable, pero a veces sigue siendo necesario reconfigurar y recompilar un kernel hecho a la medida de nuestras necesidades. Una vez leido este capítulo sabrá usted: * Por qué puede ser necesario que compile un kernel personalizado. * Cómo crear un fichero de configuración del kernel, o bien editar un fichero existente. * Cómo utilizar el fichero de configuración para crear y compilar un nuevo kernel. * Cómo instalar su nuevo kernel. * Cómo resolver algunos problemas si algo sale mal. == ¿Qué razones hay para compilar un kernel personalizado? Tradicionalmente FreeBSD ha contado con lo que se conoce como un kernel "monolítico". Esto quiere decir que el kernel era un gran y único programa que se comunicaba con una lista previa de dispositivos, y que si se deseaba modificar el comportamiento del kernel se debía compilar un nuevo kernel y reiniciar el sistema con el nuevo kernel. Hoy en día FreeBSD evoluciona muy rápidamente hacia un modelo donde la funcionalidad del kernel se basa en módulos, los cuales pueden cargarse y descargarse dinámicamente de acuerdo a las necesidades del kernel. Esto permite al kernel adaptarse al nuevo hardware que sale al mercado (como las tarjetas PCMCIA en sistemas portátiles), o bien añadir nuevas funcionalidades al kernel que no eran al compilarlo la vez anterior. Esto es lo que conocemos como kernel modular. A pesar de lo dicho aún es necesario llevar a cabo cierta configuración estática en la configuración del kernel. A veces se debe a que la funcionalidad del sistema está tan ligada al kernel que no puede hacerse mediante carga dinámica de módulos. En otros casos puede tratarse simplemente de que nadie ha programado un módulo para esa funcionalidad concreta que pueda cargarse dinámicamente en el kernel. Compilar un kernel personalizado es uno de los ritos de iniciación más importantes a los que los usuarios de casi todos los BSD han de enfrentarse. Este proceso lleva su tiempo, pero le aportará grandes beneficios a su sistema FreeBSD. A diferencia del kernel [.filename]#GENERIC#, con el que puede funcionar una cantidad apabullante de hardware disponible en el mercado, un kernel personalizado contiene únicamente lo necesario para que funcione el hardware de _su_ sistema. Obviamente esto tiene sus ventajas: * Mayor rapidez en el arranque del sistema. Dado que el kernel sólo tiene que probar el hardware que realmente está en el sistema el tiempo que necesitará para arrancar se reducirá visiblemente. * Menor uso de memoria. Generalmente un kernel personalizado utiliza menos memoria que un kernel `GENERIC`, lo cual es importante ya que el kernel debe encontrarse siempre en memoria real. Por ésta razón un kernel personalizado puede ser de gran utilidad en sistemas con una cantidad limitada de memoria RAM. * Hacer funcionar hardware específico. Un kernel personalizado le permite añadir al sistema dispositivos como tarjetas de sonido, que no están incluidas en el kernel `GENERIC`. [[kernelconfig-devices]] == Inventario de hardware del sistema Antes de aventurarnos en la configuración del kernel nunca está de más disponer de un inventario completo del hardware que hay en la máquina. En los casos en los que FreeBSD no es el sistema operativo principal de la máquina puede conseguir el inventario consultando la configuración de otro sistema operativo. Por ejemplo, el Gestor de dispositivos de Microsoft(R) suele contener información importante sobre los dispositivos que haya en la máquina. El Gestor de dispositivos está en el panel de control. [NOTE] ==== Algunas versiones de Microsoft(R) Windows(R) tienen un icono de Sistema con forma de pantalla desde el que se puede acceder al Gestor de dispositivos. ==== Si no hay otro sistema operativo en la máquina el administrador tendrá que conseguir la información por su cuenta. Una forma de hacerlo es mediante man:dmesg[8] y man:man[1]. La mayoría de los controladores de dispositivo que hay en FreeBSD tienen una página de manual, que suele incluir una lista del hardware que puede hacer funcionar. En la prueba del sistema durante el arranque va apareciendo una lista del harware que hay en la máquina. Por ejemplo, las siguientes líneas indican que el controlador [.filename]#psm# ha encontrado un ratón: [.programlisting] .... psm0: irq 12 on atkbdc0 psm0: [GIANT-LOCKED] psm0: [ITHREAD] psm0: model Generic PS/2 mouse, device ID 0 .... Puede añadir este controlador al fichero de configuración de su kernel personalizado o cargarlo utilizando man:loader.conf[5]. A veces los datos que muestra `dmesg` solamente muestran mensajes del sistema en lugar de la salida de la prueba de arranque. En esos casos puede ver la verdadera salida de `dmesg` en el fichero [.filename]#/var/run/dmesg.boot#. Otro método para identificar el hardware del sistema es usar man:pciconf[8], que tiene una salida mucho más verbosa. Veamos un ejemplo: [.programlisting] .... ath0@pci0:3:0:0: class=0x020000 card=0x058a1014 chip=0x1014168c rev=0x01 hdr=0x00 vendor = 'Atheros Communications Inc.' device = 'AR5212 Atheros AR5212 802.11abg wireless' class = network subclass = ethernet .... Este fragmento, obtenido con `pciconf -lv` muestra cómo el controlador [.filename]#ath# ha encontrado un dispositivo Ethernet inalámbrico. Escriba `man ath` para consultar la página de manual de man:ath[4]. La opción `-k` de man:man[1] le suministrará valiosa información. Sigamos con el ejemplo anterior: [source,shell] .... # man -k Atheros .... Con esto obtendremos una lista de páginas de manual que contienen esa palabra en particular: [.programlisting] .... ath(4) - Atheros IEEE 802.11 wireless network driver ath_hal(4) - Atheros Hardware Access Layer (HAL) .... Una vez que tenemos nuestra flamante lista de hardware del sistema el proceso de compilar un kernel personalizado debería parecer un poco menos inquietante. [[kernelconfig-modules]] == Controladores del kernel, subsistemas y módulos Antes de compilar un kernel personalizado conviene pensar antes los motivos. Si lo que se necesita es añadir hardware específico al sistema es posible que sea posible utilizarlo mediante un módulo. Los módulos del kernel están en el directorio [.filename]#/boot/kernel# y se pueden cargar dinámicamente en un kernel en funcionamiento con man:kldload[8]. La mayoría, por no decir todos, los controladores del kernel tienen un módulo específico y una página de manual. Por ejemplo, en la sección anterior hablábamos del controlador Ethernet inalámbrico [.filename]#ath#. La página de manual de este dispositivo contiene la siguiente información: [.programlisting] .... Alternatively, to load the driver as a module at boot time, place the following line in loader.conf(5): if_ath_load="YES" .... Si hace lo que dice ahí, es decir, añadir la línea `if_ath_load="YES"` al fichero [.filename]#/boot/loader.conf# hará que el módulo se cargue dinámicamente cada vez que el sistema arranque. Hay casos, no obstante, en los que no existe el módulo correspondiente. Esto sucede con ciertos subsistemas y con controladores muy importantes, como por ejemplo el de FFS, que necesita el kernel. Igual sucede con la posibilidad de utilizar redes (INET). Por desgracia, en estos casos la única forma de saber si hace falta un controlador es buscar el módulo. [WARNING] ==== Es sumamente fácil quitar un dispositivo o una opción del kernel y encontrarse de manos a boca con un kernel que no funciona. Por ejemplo, si elimina el controlador man:ata[4] del fichero de configuración del kernel un sistema que utilice unidades de disco ATA no podrá arrancar a menos que se añada la línea correspondiente al fichero [.filename]#loader.conf#. Si tiene dudas busque el módulo y deje el kernel como está. ==== [[kernelconfig-building]] == Compilación e instalación de un kernel personalizado En primer lugar, hagamos un breve recorrido por el directorio donde se lleva a cabo la compilación del kernel. Todos los directorios mencionados hacen referencia al directorio principal, que es [.filename]#/usr/src/sys#, al que también podemos acceder desde [.filename]#/sys#. Existen gran cantidad de subdirectorios que representan diferentes partes del kernel, pero el más importante para lo que deseamos hacer son [.filename]#arch# y [.filename]#/conf#, que es donde se llevara a cabo la edición del fichero de configuración y la compilación propiamente dicha del mismo, el punto de partida para la personalización del kernel. El directorio [.filename]#arch# representa la arquitectura del sistema, por lo que puede ser [.filename]#i386#, [.filename]#alpha#, [.filename]#amd64#, [.filename]#ia64#, [.filename]#powerpc#, [.filename]#sparc64# o [.filename]#pc98# (una arquitectura alternativa, similar a PC y muy popular en Japón). Todo lo que existe dentro de un directorio de una arquitectura en particular, es específico para dicha arquitectura; el resto del código es común para todas las plataformas en las que FreeBSD puede funcionar. Observe la organización lógica de la estructura de los directorios, con cada dispositivo utilizable en el sistema, sistema de ficheros y opciones, cada cosa en su propio subdirectorio. A lo largo de este capítulo asumiremos que está utilizando la arquitectura i386, puesto que sobre ella son los ejemplos que vamos a ir exponiendo. Si no es este su caso debe hacer los cambios adecuados a su arquitectura de hardware en las rutas que vayamos utilizando. [NOTE] ==== Si _no existe_ el directorio [.filename]#/usr/src/sys# en su sistema quiere decir que no están instaladas las fuentes del kernel. La forma más sencilla de tenerlas es mediante `/stand/sysinstall`. Como usuario `root` seleccione `Configure`, luego `Distributions`, después `src` y finalmente `sys`. Si no le gusta mucho sysinstall y tiene acceso a un CDROM "oficial" de FreeBSD puede instalar las fuentes por medio de la siguiente línea de órdenes: [source,shell] .... # mount /cdrom # mkdir -p /usr/src/sys # ln -s /usr/src/sys /sys # cat /cdrom/sys/ssys.[a-d]* | tar -xzvf .... ==== Ahora vaya al al directorio [.filename]#arch/conf# y copie el fichero de configuración [.filename]#GENERIC# con el nombre que desee. Por ejemplo: [source,shell] .... # cd /usr/src/sys/i386/conf # cp GENERIC MIKERNEL .... Por tradición el nombre se escribe con mayúsuculas y si tiene varias maquinas FreeBSD, con diferente hardware es recomendable darle a cada kernel el mismo nombre que la máquina en la que va a ejecutarse. En este ejemplo usaremos el nombre de [.filename]#MIKERNEL# . [TIP] ==== Guardar su fichero de configuración directamente bajo el directorio [.filename]#/usr/src#, puede que no sea una idea muy astuta. Si empieza a tener problemas puede ser muy tentador borrar [.filename]#/usr/src# y comenzar desde cero. Cinco segundos después de haber hecho esto se dará cuenta de que ha eliminado el fichero de configuración de su kernel, en el que quizás llevaba horas trabajando. Le proponemos una alternativa: guardar su fichero de configuración cualquier otro sitio y crear un enlace simbólico al fichero que hay en el directorio [.filename]#i386#. Por ejemplo: [source,shell] .... # cd /usr/src/sys/i386/conf # mkdir /root/kernels # cp GENERIC /root/kernels/MIKERNEL # ln -s /root/kernels/MIKERNEL .... ==== Ahora edite el fichero de configuración [.filename]#MIKERNEL# con su editor de textos favorito. Si se trata de una instalación reciente probablemente el único editor disponible sea vi, del cual es complicado explicar su uso detallado en este documento, pero existen bastantes libros que detallan su uso; puede ver algunos en la crossref:bibliography[bibliography,bibliografía]. FreeBSD dispone de un editor de uso muy sencillo, llamado ee; si es usted principiante le será de mucha ayuda. Cambie los comentarios al principio del fichero con algo que refleje los cambios realizados o al menos para diferenciarlo del fichero [.filename]#GENERIC#. Si ha compilado un kernel en SunOS(TM) o algún otro sistema operativo BSD seguramente la mayor parte de fichero le será muy familiar. Si viene usted de otros sistemas operativos como DOS, el fichero [.filename]#GENERIC# puede parecerle intimidante, así que siga las instrucciones descritas en <> detenidamente y con sumo cuidado. [NOTE] ==== Asegúrese siempre de verificar el fichero [.filename]#/usr/src/UPDATING# antes de realizar cualquier actualización del sistema si ha crossref:cutting-edge[cutting-edge,sincronizado sus fuentes] para disponer de la última versión de los mismos. En el fichero [.filename]#/usr/src/UPDATING# está toda la información importante sobre las actualizaciones. Al distribuirse con FreeBSD dicha información deberá estar más actualizada que la que hay en este mismo texto. ==== Ahora es momento de llevar a cabo la compilación del código fuente del kernel. [.procedure] .Procedure: Compilación del kernel . Vaya al directorio [.filename]#/usr/src#: + [source,shell] .... # cd /usr/src .... . Compile el kernel: + [source,shell] .... # make buildkernel KERNCONF=MIKERNEL .... . Instale el nuevo kernel: + [source,shell] .... # make installkernel KERNCONF=MIKERNEL .... [NOTE] ==== Es imprescindible que disponga del código fuente completo de FreeBSD para poder compilar el kernel. ==== [TIP] ==== Por omisión, si compila un kernel personalizado _todos_ los módulos del kernel serán recompilados también. Si quiere que la actualización de su kernel sea mucho más rápida o compilar solamente ciertos módulos personalizados, edite kernel modules will be rebuilt as well. [.filename]#/etc/make.conf# antes de compilar el kernel: [.programlisting] .... MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs .... Esta variable crea una lista de módulos listos para ser compilados, sin tocar los demás. [.programlisting] .... WITHOUT_MODULES = linux acpi sound/sound sound/driver/ds1 ntfs .... Esta variable crea una lista de módulos que serán excluidos del proceso de compilación. Hay otras variables que pueden resultarle útiles durante este proceso; consulte la página de manual de man:make.conf[5]. ==== El nuevo kernel se copiará al directorio raíz como [.filename]#/kernel# y el kernel viejo tendrá el nombre de [.filename]#/kernel.old#. Ahora reinicie su sistema para poder probar su nuevo kernel. En caso de que se presente algun problema hay algunos consejos para la <> al final de este capítulo. Asegúrese de leer la sección que explica cómo recuperar el sistema en caso de que su kernel <>. [NOTE] ==== Ciertos ficheros relacionados con el proceso de arranque, como man:loader[8]y su configuración, se guardan en [.filename]#/boot#. Los módulos personalizados o de terceros se suelen guardar en [.filename]#/boot/kernel#, aunque debe tener presente que es muy importante que los módulos y el kernel estén sincronizados. Si intenta usar módulos con un kernel para el que no están destinados puede haber errores o incluso producirse intesatabilidades. ==== [[kernelconfig-config]] == El fichero de configuración El formato de un fichero de configuración es bastante simple. Cada línea contiene una palabra clave con uno o más argumentos. Para simplificar, hay muchas líneas que solamente contienen un argumento. Cualquier cosa detrás de un `\#` se considerará un comentario y en consecuencia será ignorado. Las siguientes secciones describen todas las palabras clave en el orden en el que aparecen en [.filename]##GENERIC##. [[kernelconfig-options]] Si quiere una lista exhaustiva de de opciones dependientes de arquitectura y de dispositivos puede consultar el fichero [.filename]##NOTES## en el mismo directorio donde está el fichero [.filename]##GENERIC##. Si quiere ver las opciones independientes de arquitectura consulte [.filename]##/usr/src/sys/conf/NOTES##. [NOTE] ==== Puede generar un fichero que contenga todas las opciones disponibles en un kernel. Esto es algo que solamente se usa para hacer pruebas. Si quiere generarlo ejecute, como `root`, lo siguiente: [source,shell] .... # cd /usr/src/sys/i386/conf && make LINT .... ==== A continuación veremos un ejemplo de fichero de configuración de un kernel [.filename]#GENERIC# al que se han añadido comentarios adicionales donde se ha visto que era necesario abundar un poco para mayor claridad. Este ejemplo es igual (o, en el peor de los casos, casi igual) que la copia del mismo que tiene usted en [.filename]#/usr/src/sys/i386/conf/GENERIC#. [.programlisting] .... machine i386 .... Esta es la arquitectura de la máquina. Debe ser `alpha`, `amd64`, `i386`, `ia64`, `pc98`, `powerpc` o `sparc64`. [.programlisting] .... cpu I486_CPU cpu I586_CPU cpu I686_CPU .... Las opciones anteriores definen el tipo de CPU que haya en su sistema. Puede dejar varias líneas de CPU (si, por ejemplo, no está seguro de usar `I586_CPU` o `I686_CPU`), pero si está personalizando su kernel es mucho mejor que solamente ponga la CPU que tenga. Si no está seguro de la CPU que tiene busque en los mensajes de arranque que se guardan en [.filename]#/var/run/dmesg.boot#. [.programlisting] .... ident GENERIC .... Este es el identificador del kernel. Modifíquelo para que cuadre con el nombre que le haya dado a su kernel, es decir, `MIKERNEL` si ha seguido los ejemplos anteriores. El valor que asigne a la cadena `ident` será el que se muestre cuando arranque con su kernel, así que es útil darle a su kernel un nombre distintivo que permita distinguirlo fácilmente de otros, por ejemplo, si está compilando un kernel experimental. [.programlisting] .... #To statically compile in device wiring instead of /boot/device.hints #hints "GENERIC.hints" # Default places to look for devices. .... man:device.hints[5] se usa para configurar opciones de controladores de dispositivo. La ubicación por defecto en la que man:loader[8] buscará durante el arranque es [.filename]#/boot/device.hints#. Si usa la opción `hints` puede compilar el contenido de [.filename]#device.hints# en su kernel, lo que hará innecesario crear ese fichero en [.filename]#/boot#. [.programlisting] .... makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols .... El proceso normal de compilación en FreeBSD incluye información de depuración de errores si se compila un kernel con la opción `-g`, que activa la información de depuración de errores al pasar a man:gcc[1]. [.programlisting] .... options SCHED_4BSD # 4BSD scheduler .... El planificador de tareas tradicional y por omisión de FreeBSD. Déjelo como está. [.programlisting] .... options PREEMPTION # Enable kernel thread preemption .... Permite que hilos que están en el kernel puedan asociarse con hilos cuya prioridad sea más alta. Ayuda con la interactividad y permite que los hilos interrumpidos puedan ejecutarse antes en lugar de tener que esperar. [.programlisting] .... options INET # InterNETworking .... Networking. Deje esto como está, incluso si no tiene en mente conectar la máquina a una red. Muchos programas necesitan al menos disponer de lo que se llama «loopback networking» (esto es, poder efectuar conexiones de red con su propia máquina) así que tener esto es obligatorio. [.programlisting] .... options INET6 # IPv6 communications protocols .... Activa los protocolos de comunicación IPv6. [.programlisting] .... options FFS # Berkeley Fast Filesystem .... El sistema de ficheros básico para discos duros. Debe dejarlo como está si pretende poder arrancar desde disco duro. [.programlisting] .... options SOFTUPDATES # Enable FFS Soft Updates support .... Activa Soft Updates en el kernel, lo que acelerará los accesos de escritura a sus discos. Esta funcionalidad la facilita el kernel, pero debe activarse para cada disco de forma específica. Revise la salida de man:mount[8] y verá si Soft Updates está activado en los discos de su sistema. Si no aparece la opción `soft-updates` actívela mediante man:tunefs[8] (para sistemas de ficheros ya existentes) o man:newfs[8] (en el caso de sistemas de ficheros nuevos). [.programlisting] .... options UFS_ACL # Support for access control lists .... Esta opción activa en el kernel las listas de control de acceso. Consiste en el uso de atributos extendidos y UFS2 junto con las características que se describen detalladamente en la crossref:security[fs-acl,Listas de control de acceso a sistemas de ficheros]. Las ACL por omisión están activadas, y no deben desactivarse del kernel una vez que hayan sido usadas en un sistema de ficheros puesto que eliminará las listas de control de acceso y el modo en el que se protegen esos ficheros de un modo totalmente fuera de control. [.programlisting] .... options UFS_DIRHASH # Improve performance on big directories .... This option includes functionality to speed up disk operations on large directories, at the expense of using additional memory. You would normally keep this for a large server, or interactive workstation, and remove it if you are using FreeBSD on a smaller system where memory is at a premium and disk access speed is less important, such as a firewall. [.programlisting] .... options MD_ROOT # MD is a potential root device .... Esta opción permite que la partición raíz esté en un disco virtual basado en memoria. [.programlisting] .... options NFSCLIENT # Network Filesystem Client options NFSSERVER # Network Filesystem Server options NFS_ROOT # NFS usable as /, requires NFSCLIENT .... NFS, el sistema de ficheros en red. Salvo que tenga intención de montar particiones de sistemas de ficheros UNIX(R) de un servidor a través de TCP/IP puede comentar estas opciones. [.programlisting] .... options MSDOSFS # MSDOS Filesystem .... El sistema de ficheros MS-DOS(R). Salvo que tenga en mente montar particiones de disco duro con formato DOS durante el arranque puede comentar esta opción. En caso de necesidad esta funcionalidad se cargará automáticamente. También tiene a su package:emulators/mtools[], que le permitirá acceder a disquetes DOS sin tener que montarlos y desmontarlos (y ni siquiera requiere `MSDOSFS`). [.programlisting] .... options CD9660 # ISO 9660 Filesystem .... El sistema de ficheros ISO 9660 para CDROM. Coméntelo si no tiene unidad CDROM o solamente monta CD muy de vez en cuando; cuando lo necesite el sistema lo cargará dinámicamente. Los CD de sonido no utilizan este sistema de ficheros. [.programlisting] .... options PROCFS # Process filesystem (requires PSEUDOFS) .... El sistema de ficheros de procesos. Es un sistema de ficheros "simulado" que se monta en [.filename]#/proc# y permite a programas como man:ps[1] suministrar más información sobre qué procesos están ejecutándose. En la mayoaría de los casos no es necesario usar `PROCFS`, puesto que la mayoría de las herramientas de monitorización y depuración han sido adaptadas para que funcionen sin `PROCFS`. De hecho aunque lo instale el sistema no lo montará por omisión. [.programlisting] .... options PSEUDOFS # Pseudo-filesystem framework .... Los kernel 6.X pueden usar `PSEUDOFS` al utilizar `PROCFS`. [.programlisting] .... options GEOM_GPT # GUID Partition Tables. .... Con esta opción se puede tener una gran cantidad de particiones en un único disco. [.programlisting] .... options COMPAT_43 # Compatible with BSD 4.3 [KEEP THIS!] .... Compatibilidad con 4.3BSD. Déjelo como está; ciertos programas pueden comportarse de formas muy extrañas si comenta esta opción. [.programlisting] .... options COMPAT_FREEBSD4 # Compatible with FreeBSD4 .... FreeBSD 5.X en sistemas i386(TM) y Alpha necesita esta opción para poder usar aplicaciones compiladas en versiones antiguas de FreeBSD que utilizan, por tanto, llamadas al sistema más antiguas. Esta opción no es necesaria en plataformas en las que funciona FreeBSD desde 5.X, como ia64 y sparc64. [.programlisting] .... options COMPAT_FREEBSD5 # Compatible with FreeBSD5 .... Esta opción hace falta en sistemas FreeBSD 6.X y versiones posteriores para poder ejecutar aplicaciones compiladas en FreeBSD 5.X, que usan interfaces de llamada al sistema FreeBSD 5.X. [.programlisting] .... options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI .... Hace que el kernel haga una pausa de 5 segundos antes de probar los dispositivos SCSI del sistema. Si solamente tiene discos IDE puede ignorar esta opción, o también puede asignarle un valor menos para evitar el retardo en el arranque. Si lo hace y FreeBSD tiene problemas para reconocer dispositivos SCSI en el sistema es obvio que tendrá que incrementar el valor. [.programlisting] .... options KTRACE # ktrace(1) support .... Activa las trazas en el kernel, algo muy útil para la depuración de errores. [.programlisting] .... options SYSVSHM # SYSV-style shared memory .... Facilita memoria compartida System V. El uso más habitual es la extensión XSHM de X, que utiliza la mayoría de programas que hacen uso intensivo de los gráficos para incrementar la velocidad. Si usa X es casi seguro que le vendrá bien esta opción. [.programlisting] .... options SYSVMSG # SYSV-style message queues .... Mensajes System V. Esta opción añade solamente unos cuantos bytes al kernel. [.programlisting] .... options SYSVSEM # SYSV-style semaphores .... Semáforos System V. No es demasiado frecuente que se utilicen, pero solamente añaden unos cuantos cientos de bytes al kernel. [NOTE] ==== La opción `-p` de man:ipcs[1] le mostrará una lista de procesos que estén utilizando características System V. ==== [.programlisting] .... options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions .... Extensiones en tiempo real añadidas en 1993 POSIX(R). Ciertas aplicaciones de la Colección de Ports las utilizan, por ejemplo StarOffice(TM). [.programlisting] .... options KBD_INSTALL_CDEV # install a CDEV entry in /dev .... This option is required to allow the creation of keyboard device nodes in [.filename]#/dev#. [.programlisting] .... options ADAPTIVE_GIANT # Giant mutex is adaptive. .... Giant es un mecanismo de exclusión mutua («sleep mutex») que protege un gran conjunto de recursos del kernel. Hoy en dia no es asumible tener un cuello de botella así por el impacto que tiene en el rendimiento, así que está siendo reemplazado por bloqueos que protegen los recursos de manera individual. `ADAPTIVE_GIANT` hace que Giant sea incluido en un conjunto de «mutextes» que va rotando Esto es, cuando un hilo quiere bloquear el Giant mutex (pero ya está bloqueado por un hilo de otra CPU) el primer hilo seguirá ejecutándose a la espera de que se libere el bloqueo. Generalmente el hilo volverá al estado de reposo y esperará hasta que aparezca otra oportunidad de ejecutarse. Si no está seguro de lo que está haciendo es mejor que deje esta opción tal y como está. [NOTE] ==== Tenga en cuenta que en FreeBSD 8.0-CURRENT y versiones siguientes todos los «mutexes» son adaptables por omisión, salvo que se use la opción `NO_ADAPTIVE_MUTEXES`. El resultado evidente que es Giant es adaptable por omisión, así que la opción `ADAPTIVE_GIANT` ha sido eliminada de la configuración. ==== [.programlisting] .... device apic # I/O APIC .... El dispositivo apic activa la E/S APIC en la entrega de interrupciones. El dispositivo apic puede usarse tanto en kernels para un procesador (UP) como para sistemas multiprocesador (SMP). Si añada `options SMP` funcionará en sistemas multiprocesador. [NOTE] ==== El dispositivo apic existe solamente en la arquitectura i386, de modo que no debe usarse esta línea en otras arquitecturas. ==== [.programlisting] .... device eisa .... Use esta opción si tiene una placa base EISA. Activa la detección automática y permite la configuración de todos los dispositivos que estén en el bus EISA. [.programlisting] .... device pci .... Use esta opción si tiene una placa PCI. Permite la detección automática de tarjetas PCI y permite la configuración entre el bus ISA y el PCI. [.programlisting] .... # Floppy drives device fdc .... Este dispositivo es el controlador de la unidad de disquetes. [.programlisting] .... # ATA and ATAPI devices device ata .... Este controlador permite utilizar dispositivos ATA y ATAPI. Si añade al kernel one `device ata` éste detectará cualquier dispositivo ATA/ATAPI PCI que conecte a una máquina moderna. [.programlisting] .... device atadisk # ATA disk drives .... Si usa `device ata` tendrá que añadir también esto para poder usar unidades de disco ATA. [.programlisting] .... device ataraid # ATA RAID drives .... Si usa `device ata` tendrá que añadir también esto para poder usar unidades de disco ATA RAID. [.programlisting] .... device atapicd # ATAPI CDROM drives .... Si usa `device ata` tendrá que añadir también esto para poder usar unidades ATAPI CDROM. [.programlisting] .... device atapifd # ATAPI floppy drives .... Si usa `device ata` tendrá que añadir también esto para poder usar unidades de disquete ATAPI. [.programlisting] .... device atapist # ATAPI tape drives .... Si usa `device ata` tendrá que añadir también esto para poder usar unidades de cinta ATAPI. [.programlisting] .... options ATA_STATIC_ID # Static device numbering .... Con esta opción hace que el número de controladores sea estático; si no se usa los números de dispositivo se asignan dinámicamente. [.programlisting] .... # SCSI Controllers device ahb # EISA AHA1742 family device ahc # AHA2940 and onboard AIC7xxx devices options AHC_REG_PRETTY_PRINT # Print register bitfields in debug # output. Adds ~128k to driver. device ahd # AHA39320/29320 and onboard AIC79xx devices options AHD_REG_PRETTY_PRINT # Print register bitfields in debug # output. Adds ~215k to driver. device amd # AMD 53C974 (Teckram DC-390(T)) device isp # Qlogic family #device ispfw # Firmware for QLogic HBAs- normally a module device mpt # LSI-Logic MPT-Fusion #device ncr # NCR/Symbios Logic device sym # NCR/Symbios Logic (newer chipsets + those of `ncr') device trm # Tekram DC395U/UW/F DC315U adapters device adv # Advansys SCSI adapters device adw # Advansys wide SCSI adapters device aha # Adaptec 154x SCSI adapters device aic # Adaptec 15[012]x SCSI adapters, AIC-6[23]60. device bt # Buslogic/Mylex MultiMaster SCSI adapters device ncv # NCR 53C500 device nsp # Workbit Ninja SCSI-3 device stg # TMC 18C30/18C50 .... Controladoras SCSI. Coméntelas si no las tiene en su sistema. Si en su sistema tiene solamente unidades IDE puede borrarlas todas. Las líneas `*_REG_PRETTY_PRINT` son opciones de depuración de errores de sus respectivos controladores de dispositivo. [.programlisting] .... # SCSI peripherals device scbus # SCSI bus (required for SCSI) device ch # SCSI media changers device da # Direct Access (disks) device sa # Sequential Access (tape etc) device cd # CD device pass # Passthrough device (direct SCSI access) device ses # SCSI Environmental Services (and SAF-TE) .... Periféricos SCSI. Estos también puede borrarlos sin problemas si no los tiene en su sistema o si solamente tiene hardware IDE. [NOTE] ==== El controlador USB man:umass[4] (y unos cuantos controladores más) utilizan el subsistema SCSI aunque no sean dispositivos SCSI reales. No elimine el subsistema SCSI del kernel si va a utilizar cualquiera de estos controladores. ==== [.programlisting] .... # RAID controllers interfaced to the SCSI subsystem device amr # AMI MegaRAID device arcmsr # Areca SATA II RAID device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID device ciss # Compaq Smart RAID 5* device dpt # DPT Smartcache III, IV - See NOTES for options device hptmv # Highpoint RocketRAID 182x device rr232x # Highpoint RocketRAID 232x device iir # Intel Integrated RAID device ips # IBM (Adaptec) ServeRAID device mly # Mylex AcceleRAID/eXtremeRAID device twa # 3ware 9000 series PATA/SATA RAID # RAID controllers device aac # Adaptec FSA RAID device aacp # SCSI passthrough for aac (requires CAM) device ida # Compaq Smart RAID device mfi # LSI MegaRAID SAS device mlx # Mylex DAC960 family device pst # Promise Supertrak SX6000 device twe # 3ware ATA RAID .... Controladoras RAID que pueden utilizarse en FreeBSD. Si no las tiene en su sistema puede borrarlas. [.programlisting] .... # atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc # AT keyboard controller .... El controlador de teclado (`atkbdc`) ofrece servicios de E/S con teclados AT y ratones PS/2. El controlador de teclado (`atkbd`) y el controlador de ratón PS/2 (`psm`) necesitan este dispositivo. [.programlisting] .... device atkbd # AT keyboard .... El controlador `atkbd`, junto con el controlador `atkbdc`, permiten utilizar el teclado AT 84 u otros tipos de teclados AT mejorados que se conecten mediante el controlador de teclado AT. [.programlisting] .... device psm # PS/2 mouse .... Utilice este dispositivo si conecta su ratón en el puerto PS/2. [.programlisting] .... device kbdmux # keyboard multiplexer .... Funcionalidad básica para múltiples teclados. Si no tiene en mente usar más de un teclado en el sistema puede borrar esta línea sin mayor problema. [.programlisting] .... device vga # VGA video card driver .... El controlador de la tarjeta gráfica. [.programlisting] .... device splash # Splash screen and screen saver support .... «Splash screen» en el arranque. Los salvapantallas necesitan este dispositivo. [.programlisting] .... # syscons is the default console driver, resembling an SCO console device sc .... `sc` por omisión es el controlador de dispositivo de la consola; se parece mucho a una consola de SCO. Dado que muchos programas de pantalla completa acceden a la consola a través de la biblioteca de bases de datos de terminal [.filename]#termcap# no tiene demasiada importancia si usa `vt`, el controlador de consola compatible `VT220`. Cuando acceda al sistema asigne a su variable `TERM` el valor `scoansi` si los programas a pantalla completa tienen algún problema para acceder a la consola. [.programlisting] .... # Enable this for the pcvt (VT220 compatible) console driver #device vt #options XSERVER # support for X server on a vt console #options FAT_CURSOR # start with block cursor .... El controlador de dispositivo VT220-compatible; es compatible con VT100/102, anterior a él. Funciona bien en ciertos sistemas portátiles que adolecen de incompatibilidad de harware con `sc`. Asigne a su variable de entorno `TERM` el valor `vt100` o `vt220` cuando acceda al sistema. Este controlador le puede ser de utilidad si tiene que acceder a gran cantidad de máquinas a través de una red, una situación en la que suele suceder que [.filename]#termcap# o [.filename]#terminfo# no están ahí para que las use `sc`. `vt100`, por el contrario, debería aparecer en práticamente cualquier plataforma. [.programlisting] .... device agp .... Utilice esta opción si tiene en el sistema una tarjeta AGP. Activará AGP y también AGP GART si su tarjeta puede usarla. [.programlisting] .... # Power management support (see NOTES for more options) #device apm .... Gestión avanzada de la energía. Muy útil en sistemas portátiles. Viene desactivada por omisión en el kernel [.filename]#GENERIC# . [.programlisting] .... # Add suspend/resume support for the i8254. device pmtimer .... Controlador del reloj para eventos de gestión de la energía, como APM y ACPI. [.programlisting] .... # PCCARD (PCMCIA) support # PCMCIA and cardbus bridge support device cbb # cardbus (yenta) bridge device pccard # PC Card (16-bit) bus device cardbus # CardBus (32-bit) bus .... Dispositivos PCMCIA. Si el sistema es portátil necesita tener esto activado. [.programlisting] .... # Serial (COM) ports device sio # 8250, 16[45]50 based serial ports .... Estos son los puertos serie a los que se conoce como puertos [.filename]#COM# en entornos MS-DOS(R)/Windows(R). [NOTE] ==== Si tiene un módem interno en [.filename]#COM4# un puerto serie en [.filename]#COM2# tendrá que asignar a la IRQ del módem el 2 (por razones técnicas ignotas IRQ2 = IRQ 9) para que pueda acceder al dispositivo desde FreeBSD. Si tiene una tarjeta serie multipuerto consulte la página de manual de man:sio[4] si quiere más detalles sobre los valores que debe añadir a [.filename]#/boot/device.hints#. Algunas tarjetas gráficas (sobre todo las que usan chips S3) utilizan direcciones IO del tipo `0x*2e8` y dado que muchas tarjetas serie de baja calidad no decodifican correctamente el espacio de direcciones de 16 bits chocan con estas tarjetas, haciendo que el puerto [.filename]#COM4# sea prácticamente inútil. Es necesario que cada puerto serie tenga una IRQ única (salvo que use una tarjeta multipuerto que permita compartir interrupciones), así que las IRQ de [.filename]#COM3# y de [.filename]#COM4# no se pueden utilizar. ==== [.programlisting] .... # Parallel port device ppc .... El interfaz del puerto paralelo de bus ISA. [.programlisting] .... device ppbus # Parallel port bus (required) .... El bus del puerto paralelo. [.programlisting] .... device lpt # Printer .... Permite usar el puerto paralelo para conectar impresoras. [NOTE] ==== Necesitará disponer de los tres anteriores para poder utilizar impresoras mediante el puerto paralelo. ==== [.programlisting] .... device plip # TCP/IP over parallel .... Este controlador es para la interfaz de red a través del puerto paralelo. [.programlisting] .... device ppi # Parallel port interface device .... La E/S de propósito general (conocida también como "puerto geek") + E/S IEEE1284. [.programlisting] .... #device vpo # Requires scbus and da .... Este dispositivo se usa con unidades Iomega Zip. Necesita `scbus` y `da` . El mejor rendimiento se alcanza con el uso de los puertos en modo EPP 1.9. [.programlisting] .... #device puc .... Puede utilizar este dispositivo si tiene una tarjeta PCI "tonta" (por puerto serie o paralelo) que funcione mediante el controlador man:puc[4]. [.programlisting] .... # PCI Ethernet NICs. device de # DEC/Intel DC21x4x (Tulip) device em # Intel PRO/1000 adapter Gigabit Ethernet Card device ixgb # Intel PRO/10GbE Ethernet Card device txp # 3Com 3cR990 (Typhoon) device vx # 3Com 3c590, 3c595 (Vortex) .... Diversos controladores para tarjetas de red PCI. Puede borrar todas las que no estén en su sistema. [.programlisting] .... # PCI Ethernet NICs that use the common MII bus controller code. # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs! device miibus # MII bus support .... El poder utilizar bus MII es necesario para ciertas tarjetas Ethernet PCI 10/100, más concretamente las que usan transceptores compatibles con MII o implementan interfaces de control de transceptores que funcionan como si fueran MII. Si incluye `device miibus` al kernel dispondrá de la API miibus genérica y todos los controladores PHY, incluyendo uno que hará funcionar hardware que, siendo del tipo PHY, no está bajo ninguno de los controladores PHY específicos. [.programlisting] .... device bce # Broadcom BCM5706/BCM5708 Gigabit Ethernet device bfe # Broadcom BCM440x 10/100 Ethernet device bge # Broadcom BCM570xx Gigabit Ethernet device dc # DEC/Intel 21143 and various workalikes device fxp # Intel EtherExpress PRO/100B (82557, 82558) device lge # Level 1 LXT1001 gigabit ethernet device msk # Marvell/SysKonnect Yukon II Gigabit Ethernet device nge # NatSemi DP83820 gigabit ethernet device nve # nVidia nForce MCP on-board Ethernet Networking device pcn # AMD Am79C97x PCI 10/100 (precedence over 'lnc') device re # RealTek 8139C+/8169/8169S/8110S device rl # RealTek 8129/8139 device sf # Adaptec AIC-6915 (Starfire) device sis # Silicon Integrated Systems SiS 900/SiS 7016 device sk # SysKonnect SK-984x & SK-982x gigabit Ethernet device ste # Sundance ST201 (D-Link DFE-550TX) device stge # Sundance/Tamarack TC9021 gigabit Ethernet device ti # Alteon Networks Tigon I/II gigabit Ethernet device tl # Texas Instruments ThunderLAN device tx # SMC EtherPower II (83c170 EPIC) device vge # VIA VT612x gigabit ethernet device vr # VIA Rhine, Rhine II device wb # Winbond W89C840F device xl # 3Com 3c90x (Boomerang, Cyclone) .... Controladores que utilizan el código del controlador de bus MII. [.programlisting] .... # ISA Ethernet NICs. pccard NICs included. device cs # Crystal Semiconductor CS89x0 NIC # 'device ed' requires 'device miibus' device ed # NE[12]000, SMC Ultra, 3c503, DS8390 cards device ex # Intel EtherExpress Pro/10 and Pro/10+ device ep # Etherlink III based cards device fe # Fujitsu MB8696x based cards device ie # EtherExpress 8/16, 3C507, StarLAN 10 etc. device lnc # NE2100, NE32-VL Lance Ethernet cards device sn # SMC's 9000 series of Ethernet chips device xe # Xircom pccard Ethernet # ISA devices that use the old ISA shims #device le .... Controladores Ethernet ISA. Consulte [.filename]#/usr/src/sys/i386/conf/NOTES# para más detalles sobre qué tarjetas hace funcionar qué controlador. [.programlisting] .... # Wireless NIC cards device wlan # 802.11 support .... 802.11 genérico. Necesitará esta línea si va a usar redes inalámbricas. [.programlisting] .... device wlan_wep # 802.11 WEP support device wlan_ccmp # 802.11 CCMP support device wlan_tkip # 802.11 TKIP support .... Criptografía en dispositivos 802.11. Necesita estas líneas si quiere utilizar criptografía y protocolos de seguridad 802.11. [.programlisting] .... device an # Aironet 4500/4800 802.11 wireless NICs. device ath # Atheros pci/cardbus NIC's device ath_hal # Atheros HAL (Hardware Access Layer) device ath_rate_sample # SampleRate tx rate control for ath device awi # BayStack 660 and others device ral # Ralink Technology RT2500 wireless NICs. device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs. #device wl # Older non 802.11 Wavelan wireless NIC. .... Diversas tarjetas inalámbricas. [.programlisting] .... # Pseudo devices device loop # Network loopback .... El dispositivo de «loopback» para TCP/IP. Si accede por telnet o FTP or FTP to `localhost` también conocido como `127.0.0.1`) lo hará a través de este dispositivo. Es _imprescindible_ tenerlo en el sistema. [.programlisting] .... device random # Entropy device .... Generador de números criptográficamente seguro. [.programlisting] .... device ether # Ethernet support .... `ether` solo es necesario si tiene alguna tarjeta Ethernet. Incluye código genérico del protocolo Ethernet. [.programlisting] .... device sl # Kernel SLIP .... `sl` permite utilizar SLIP. Ha sido sustituido casi totalmente por PPP, que es más fácil de usar, está mejor capacitado para la conexión de módem a módem y es, en general, claramente mejor. [.programlisting] .... device ppp # Kernel PPP .... Este dispositivo incluye en el kernel la capacidad de gestionar conexiones de llamada entrante «dial-up». Hay también una versión de PPP implementada como aplicación de usuario; utiliza `tun` y ofrece más flexibilidad y características como la llamada bajo petición. [.programlisting] .... device tun # Packet tunnel. .... Este dispositivo lo usa el software PPP de usuario. Consulte la sección sobre crossref:ppp-and-slip[userppp,PPP] de este mismo libro. [.programlisting] .... device pty # Pseudo-ttys (telnet etc) .... Este dispositivo es una "pseudoterminal", o un puerto de entrada al sistema simulado. Se usa en sesiones entrantes de `telnet` y `rlogin`; también lo usan xterm y otras aplicaciones, entre las que encontramos a Emacs. [.programlisting] .... device md # Memory disks .... Pseudodispositivos de disco basados en memoria. [.programlisting] .... device gif # IPv6 and IPv4 tunneling .... Este dispositivo implementa túneles de IPv6 sobre IPv4, IPv4 sobre IPv6, IPv4 sobre IPv4 e IPv6 sobre IPv6. El dispositivo `gif` se puede clonar a sí mismo, así que los nodos de dispositivo se van creando a medida que van haciendo falta. [.programlisting] .... device faith # IPv6-to-IPv4 relaying (translation) .... Este pseudodispositivo captura paquetes que se le hayan enviado y los dirige hacia el dæmon de traducción IPv4/IPv6. [.programlisting] .... # The `bpf' device enables the Berkeley Packet Filter. # Be aware of the administrative consequences of enabling this! # Note that 'bpf' is required for DHCP. device bpf # Berkeley packet filter .... El filtro de paquetes de Berkeley. Este pseudodispositivo permite poner interfaces de red en modo promíscuo, lo que significa que capturan todos los paquetes que circulen por una red broadcast (por ejemplo una Ethernet). Dichos paquetes pueden guardarse en disco para su posterior examen mediante man:tcpdump[1] (el análisis con man:tcpdump[1] no puede hacerse directamente también). [NOTE] ==== El dispositivo man:bpf[4] también lo usa man:dhclient[8] para obtener direcciones IP del encaminador (gateway) por omisión. Si usa DHCP deje esta opción como está. ==== [.programlisting] .... # USB support device uhci # UHCI PCI->USB interface device ohci # OHCI PCI->USB interface device ehci # EHCI PCI->USB interface (USB 2.0) device usb # USB Bus (required) #device udbp # USB Double Bulk Pipe devices device ugen # Generic device uhid # Human Interface Devices device ukbd # Keyboard device ulpt # Printer device umass # Disks/Mass storage - Requires scbus and da device ums # Mouse device ural # Ralink Technology RT2500USB wireless NICs device urio # Diamond Rio 500 MP3 player device uscanner # Scanners # USB Ethernet, requires mii device aue # ADMtek USB Ethernet device axe # ASIX Electronics USB Ethernet device cdce # Generic USB over Ethernet device cue # CATC USB Ethernet device kue # Kawasaki LSI USB Ethernet device rue # RealTek RTL8150 USB Ethernet .... Diversos dispositivos USB. [.programlisting] .... # FireWire support device firewire # FireWire bus code device sbp # SCSI over FireWire (Requires scbus and da) device fwe # Ethernet over FireWire (non-standard!) .... Diversos dispositivos Firewire. Tiene más información y una lista con más dispositivos que funcionan en FreeBSD consulte [.filename]#/usr/src/sys/i386/conf/NOTES#. === Configuraciones con grandes cantidades de memoria (PAE) Las máquinas que tienen configuraciones con grandes cantidades de memoria necesitan acceder a más de 4 gigabytes de espacio de direcciones KVA (User+Kernel Virtual Address). Debido a esta limitación Intel añadió a las CPU Pentium(R) Pro y modelos posteriores la posibilidad de acceso al espacio de direcciones físicas de 36 bits. PAE (Physical Address Extension) a las CPU Intel(R) Pentium(R) Pro y los modelos posteriores configuraciones de memoria de hasta 64 gigabytes. Para poder aprovechar esto en FreeBSD existe la opción del kernel `PAE`, disponible en todas las versiones modernas de FreeBSD. A causa de esta limitación de memoria en los Intel no hay nada que distinga de algún modo la memoria situada por debajo del límite de los 4 gigabytes. La memoria que esté por encima de los 4 gigabytes se coloca en el «pool» de memoria disponible. Si quiere activar PAE en el kernel tiene que añadir la siguiente liínea al fichero de configuración del kernel: [.programlisting] .... options PAE .... [NOTE] ==== En FreeBSD PAE solamente existe en procesadores Intel(R) IA-32. Hemos de advertirle de que PAE no ha sido probado todo lo necesario, así que debe considerarse de calidad beta, sobre todo si se le compara con otras características de FreeBSD. ==== PAE en FreeBSD tiene varias limitaciones: * Un solo proceso no puede acceder a más de 4 gigabytes de espacio VM. * No puede cargar módulos KLD en un kernel que tenga PAE activado debido a las diferencias existentes entre el «framework» de compilación del módulo y el del kernel mismo. * Los controladores de dispositivo que utilizan el interfaz man:bus_dma[9] pueden provocar corrupción de datos en un kernel con PAE activado, una excelente razón para no utilizarlos. Esta es la razón de que FreeBSD incorpore un fichero de configuración de un kernel [.filename]#PAE# del que se han extraído todos los módulos que se sabe que no funcionan en un kernel con PAE activado. * Algunos «system tunables» determinan el uso de recursos de memoria basándose en la memoria física disponible. Estos «tunables» pueden asignar más memoria de la que realmente debieran debido a que el sistema PAE está íntimamente ligado a cantidades bastante importantes de memoria. Un ejemplo de esto es la sysctl `kern.maxvnodes`, que controla el número máximo de vnodes permitidos en el kernel. Le recomendamos que ajuste este y otros tunables dentro valores razonables. * Es posible que tenga que aumentar el espacio virtual de direcciones del kernel (el KVA) o reducir la cantidad de recursos exclusivos del kernel que se utilicen exhaustivamente (ver más arriba) para evitar que KVA literalmente se ahogue. La opción del kernel `KVA_PAGES` permite incrementar el espacio KVA. Si quiere saber más sobre la estabilidad del sistema consulte la página de manual de man:tuning[7]. La página de manual de man:pae[4] contiene información actualizada sobre PAE y FreeBSD. [[kernelconfig-trouble]] == Qué hacer si algo va mal Hay cuatro categorías de problemas que podemos encontrarnos en el proceso de compilación de un kernel personalizado: Fallo de `config`::: Si man:config[8] falla cuando le pasa la descripción de su kernel seguramente ha cometido algún pequeño error. Por suerte man:config[8] les mostrará el número de la línea que le está dando problemas, así que no tendrá mayor problema para localizarla. Veamos un ejemplo: + [source,shell] .... config: line 17: syntax error .... + Si ve algo así asegúrese de que ha tecleado la palabra clave que hay en esa lína. Compare la de su fichero de configuración del kernel con la de [.filename]#GENERIC#. Fallo de `make`::: If the `make` command fails, it usually signals an error in your kernel description which is not severe enough for man:config[8] to catch. Again, look over your configuration, and if you still cannot resolve the problem, send mail to the link:mailto:http://lists.freebsd.org/mailman/listinfo/freebsd-questions[lista de correo para preguntas generales sobre FreeBSD] with your kernel configuration, and it should be diagnosed quickly. El kernel no arranca:[[kernelconfig-noboot]]:: Si su nuevo kernel no arranca o no reconoce sus dispositivos de hardware no desespere. FreeBSD dispone de excelentes mecanismos de recuperación ante kernels defectuosos. Elija el kernel con el que quiere arrancar en el gestor de arranque de FreeBSD. Puede acceder al gestor de arranque en el momento en el que aparece el menú de arranque. Elija la opción número seis, "Escape to a loader prompt" option, Escriba en el prompt `unload kernel` y después escriba `boot /boot/kernel.old/kernel`, o el nombre de cualquier otro kernel que tenga en el sistema y del que sepa que puede fiarse. Si va a reconfigurar un kernel es una buenísima idea guardar un kernel que sepa que funciona. + Tras arrancar con un kernel de fiar verifique el fichero de configuración e intente de nuevo una compilación. El fichero [.filename]#/var/log/messages# es una fuente de información muy valiosa puesto que registra, entre otras cosas, todos los mensajes que deja el kernel cada vez que hay un arranque satisfactorio. man:dmesg[8] le mostrará los mensajes que el kernel ha generado durante el último arranque. + [NOTE] ==== Si tiene problemas compilando un kernel recuerde que es de vital importancia que guarde una copia de un kernel [.filename]#GENERIC# u otro del que pueda fiarse y que (esto es muy importante) tenga un nombre distinto de [.filename]#kernel.old# para evitar que el sistema lo borre una vez que termine una nueva compilación. No puede confiar en su kernel [.filename]#kernel.old# porque al instalar un nuevo kernel (que aún no sabe si será el que funcione tal y como espera de él) el kernel [.filename]#kernel.old# se sobreescribe con el kernel que instale. Otra cosa importante es que copie ese kernel de fiar a [.filename]#/boot/kernel#, o ciertas herramientas como man:ps[1] no funcionarán. Basta con que haga lo siguiente: [source,shell] .... # mv /boot/kernel /boot/kernel.malo # mv /boot/kernel.bueno /boot/kernel .... ==== El kernel funciona, pero man:ps[1] no::: Si el kernel que tiene instalado es de una versión de FreeBSD y las utilidades del sistema son de otra, por ejemplo un kernel -CURRENT en una -RELEASE, hay muchas herramientas de monitorización del sistema como man:ps[1] y man:vmstat[8] no funcionarán. Ejecute un crossref:cutting-edge[makeworld,make buildworld y un make install world] con la misma versión de código fuente con la que ha compilado su kernel. Esta es una de las razones por las que no es una idea demasiado buena utilizar versiones diferentes de kernel y de sistema operativo.