<!--
     The FreeBSD Documentation Project

     $FreeBSD$
     $FreeBSDes: doc/es_ES.ISO8859-1/books/handbook/kernelconfig/chapter.sgml,v 1.2 2004/10/08 22:14:25 jesusr Exp $
-->

<chapter id="kernelconfig">
  <chapterinfo>
    <authorgroup>
      <author>
	<firstname>Jim</firstname>
	<surname>Mock</surname>
	<contrib>Actualizado y reestructurado por </contrib>
	<!-- Mar 2000 -->
      </author>
    </authorgroup>
    <authorgroup>
      <author>
	<firstname>Jake</firstname>
	<surname>Hamby</surname>
	<contrib>Contribuci&oacute;n original por </contrib>
	<!-- 6 Oct 1995 -->
      </author>
    </authorgroup>
  </chapterinfo>

  <title>Configuraci&oacute;n del Kernel de FreeBSD</title>

  <sect1>
    <title>Sin&oacute;psis</title>

    <indexterm>
      <primary>kernel</primary>
      <secondary>haciendo un kernel a la medida</secondary>
    </indexterm>

    <para>El kernel de FreeBSD es el coraz&oacute;n del sistema
      operativo.  Es responsable del manejo y control de la memoria,
      reforzamiento de los controles de seguridad, manejo de redes, 
      acceso a dispositivos, y mucho m&aacute;s.  Mientras que FreeBSD
      se torna a un sistema m&aacute;s din&aacute;mico y configurable,  
      en ocasiones es a&uacute;n necesario reconfigurar y recompilar
      un kernel hecho a la medida de nuestras necesidades.</para>

    <para>Al t&eacute;rmino de este cap&iacute;tulo, usted sabr&aacute;:</para>

    <itemizedlist>
      <listitem>
	<para>Por que puede ser necesario que compile un kernel personalizado.</para>
      </listitem>

      <listitem>
	<para>Como crear un fichero de configuraci&oacute;n del kernel, 
	  o bien, editar un fichero existente.</para>
      </listitem>

      <listitem>
	<para>Como utilizar el fichero de configuraci&oacute;n, para crear
	  y compilar un nuevo kernel.</para>
      </listitem>

      <listitem>
	<para>Como instalar un kernel nuevo.</para>
      </listitem>

      <listitem>
	<para>Como crear los ficheros en <filename>/dev</filename> que
	  pudiesen ser necesarios.</para>
      </listitem>

      <listitem>
	<para>Como resolver algunos problemas, si algo sale mal.</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1>
    <title>&iquest;Por qu&eacute; Constru&iacute;r un Kernel Propio?</title>

    <para>Tradicionalmente FreeBSD ha contado con lo que se conoce como
      un kernel <quote>monol&iacute;tico</quote>.  Esto quiere decir que 
      el kernel era un gran y &uacute;nico programa que soportaba una lista
      previa de dispositivos, y que si se deseaba modificar el comportamiento
      del kernel, se debia compilar un nuevo kernel, y reiniciar el sistema 
      con el nuevo kernel.</para>

    <para>Hoy en d&iacute;a, FreeBSD esta moviendose r&aacute;pidamente, 
      hac&iacute;a un modelo, donde la funcionalidad del kernel esta
      basada en m&oacute;dulos, los cuales pueden ser cargados y
      descargados din&aacute;micamente, de acuerdo a las necesidades del
      kernel. Esto permite que el kernel se adapte a nuevo hardware que
      sale al mercado (tal como las tarjetas PCMCIA en las laptop), o bien
      el a&ntilde;adir nuevas funcionalidades al kernel, que no eran 
      necesarias al momento de su compilaci&oacute;n original. El  
      t&eacute;rmino coloquial para esto es KLDs.</para>
      
    <para>A pesar de lo anterior, aun es necesario llevar a cabo cierta
      configuraci&oacute;n est&aacute;tica en la configuraci&oacute;n
      del kernel.  En algunos casos esto se debe a que la funcionalidad del
      sistema esta tan ligada al kernel, que no puede realizarse por medio
      de carga din&aacute;mica de los modulos.  En otros casos puede ser
      simplemente por que nadie se ha tomado el tiempo, para escribir un
      modulo que pueda ser cargado din&aacute;micamente por el kernel, para
      esa funcionalidad espec&iacute;fica.</para>

    <para>El construir un kernel propio, es uno de los m&aacute;s importantes
      rituales, que casi todo usuario de UNIX debe afrontar.  Este
      proceso, aun cuando lleva un tiempo, traer&aacute; grandes beneficios
      a su sistema FreeBSD.  A diferencia del kernel 
      <filename>GENERIC</filename>, que contiene soporte para todo el
      hardware soportado por el sistema, un kernel propio unicamente contiene
      soporte para el hardware de <emphasis>su</emphasis> PC.  Esto conlleva
      a grandes beneficios, como son:</para>
    
    <note>
      <para>N de T.: El kernel <filename>GENERIC</filename> es el kernel 
        <quote>GENERICO</quote> que instala el sistema por default, del cual
        su fichero de configuracion lleva el mismo nombre.</para>
    </note>
      
    <itemizedlist>
      <listitem>
	<para>Mayor rapidez en el arranque del sistema.  En virtud de que el
	  kernel solo tiene que probar el hardware que realmente esta en su
	  sistema, el tiempo que toma a su sistema arrancar, se reducir&aacute;
	  dram&aacute;ticamente.</para>
      </listitem>

      <listitem>
	<para>Menor uso de memoria.  Generalmente un kernel personalizado
	  utiliza menos recursos de memoria que un kernel 
	  <literal>GENERIC</literal>,  lo cual es importante, ya que el
	  kernel debe encontrarse presente en memoria real.  Por esta 
	  raz&oacute;n, un kernel personalizado puede ser de gran utilidad
	  en sistemas con peque&ntilde;a cantidad de memoria RAM.</para>
      </listitem>

      <listitem>
	<para>Soporte para hardware adicional.  Un kernel personalizado
	  le permite a&ntilde;adir dispositivos tal como tarjetas de sonido,
	  las cuales no estan incluidas en el kernel <literal>GENERIC</literal>.
	  </para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="kernelconfig-building">
    <title>Compilaci&oacute;n e Instalaci&oacute;n de un Kernel Personalizado</title>
    <indexterm>
      <primary>kernel</primary>
      <secondary>compilaci&oacute;n / instalaci&oacute;n</secondary>
    </indexterm>

    <para>En primer lugar, hagamos un breve recorrido por el directorio
      donde se lleva a cabo la compilaci&oacute;n del kernel.  Todos los
      directorios mencionados hacen referencia al directorio principal,
      que es <filename>/usr/src/sys</filename>, al cual tambi&eacute;n
      podemos acceder, mediante <filename>/sys</filename>.  Existen gran
      cantidad de subdirectorios, que representan diferentes partes del
      kernel, pero el m&aacute;s importante para lo que deseamos hacer son
      <filename><replaceable>arch</replaceable></filename> y 
      <filename>/conf</filename>, que es donde se llevara a cabo la 
      edici&oacute;n del fichero de configuraci&oacute;n y la 
      compilaci&oacute;n (<filename>compile</filename>) del mismo, que es
      el punto de partida para la personalizaci&oacute;n del kernel. El
      directorio <filename><replaceable>arch</replaceable></filename>
      representa la arquitectura del sistema, por lo que puede ser
      <filename>i386</filename>, <filename>alpha</filename> o bien
      <filename>pc98</filename> (una arquitectura alternativa, similar a PC
      muy popular en Jap&oacute;n).  Todo lo que existe dentro de un 
      directorio de una arquitectura en particular, es espec&iacute;fico
      para dicha arquitectura; el resto del c&oacute;digo es com&uacute;n
      para todas las plataformas a las que FreeBSD es potencialmente
      portable.  Note la organizaci&oacute;n l&oacute;gica de la estructura
      de los directorios, con cada soporte para dispositivos, sistema de
      ficheros y opciones, en su propio subdirectorio.</para>
      
    <note>
      <para>Si <emphasis>no existe</emphasis> el directorio
        <filename>/usr/src/sys</filename> en su sistema, quiere
        decir que las fuentes del kernel no fueron instaladas.  La
        forma m&aacute;s sencilla de hacer esto es mediante el
        programa <command>/stand/sysinstall</command>, siendo
        usuario <username>root</username>, y seleccionando
        <literal>Configure</literal>, posteriormente
        <literal>Distributions</literal>, despu&eacute;s
        <literal>src</literal> y finalmente <literal>sys</literal>.  
        Si a usted no le agrada mucho utilizar 
        <application>sysinstall</application>, y tiene acceso a un
        CDROM <quote>oficial</quote> de FreeBSD, entonces puede
        instalar las fuentes, por medio de la l&iacute;nea de
        comandos, de la siguiente forma:</para>

      <screen>&prompt.root; <userinput>mount</userinput> /cdrom
&prompt.root; <userinput>mkdir -p</userinput> <filename>/usr/src/sys</filename>
&prompt.root; <userinput>ln -s</userinput> /usr/src/sys /sys
&prompt.root; <userinput>cat /cdrom/sys/ssys.[a-d]* | tar -xzvf</userinput></screen>
    </note>

    <para>Posteriormente, dirijase al directorio
      <filename><replaceable>arch</replaceable>/conf</filename> 
      y copie el fichero de configuraci&oacute;n <filename>GENERIC</filename>
      con el nombre que desee.  Por ejemplo:</para>

    <screen>&prompt.root; <userinput>cd /usr/src/sys/i386/conf</userinput>
&prompt.root; <userinput>cp GENERIC MYKERNEL</userinput></screen>

    <para>Tradicionalmente, este nombre se escribe con may&uacute;suculas y,
      si usted cuenta con varias maquinas FreeBSD, con diferente hardware, es
      una buena idea nombrar el kernel, igual que el nombre de host de cada
      maquina.  En este caso, para efectos de este ejemplo,  le llamaremos 
      <filename>MYKERNEL</filename> .</para>
      
    <tip>
      <para>El guardar su fichero de configuraci&oacute;n directamente bajo
        el directorio <filename>/usr/src</filename>, puede ser una mala
        idea.  Si usted esta experimentando problemas, puede ser tentador
        simplemente eliminar <filename>/usr/src</filename> y comenzar de
        nuevo.  Cinco segundos despu&eacute;s de haber hecho esto, se dar&aacute;
        cuenta de que ha eliminado el fichero de configuraci&oacute;n de
        su kernel.</para>
      
      <para>Una alternativa es guardar este fichero de configuraci&oacute;n en
        cualquier otra parte y crear un enlace simb&oacute;lico  al fichero
        localizado bajo el directorio <filename>i386</filename>.</para>

      <para>Por ejemplo:</para>

      <screen>&prompt.root; <userinput>cd /usr/src/sys/i386/conf</userinput>
&prompt.root; <userinput>mkdir /root/kernels</userinput>
&prompt.root; <userinput>cp GENERIC /root/kernels/<replaceable>MYKERNEL</replaceable></userinput>	
&prompt.root; <userinput>ln -s /root/kernels/<replaceable>MYKERNEL</replaceable></userinput></screen>
    </tip>

    <note>
      <para>Todo esto deber&aacute; llevarse a cabo como superusuario
        (<username>root</username>), o de lo contrario se tendra como
        resultado errores de negaci&oacute;n de permisos
        (<errortype>permission denied</errortype>).</para>
    </note>

    <para>Ahora edite el fichero de configuraci&oacute;n 
      <filename>MYKERNEL</filename>, con su editor de textos favorito.  
      Si se trata de una instalaci&oacute;n reciente probablemente el
      &uacute;nico editor disponible sea <application>vi</application>,
      del cual es complicado explicar su uso detallado en este
      documento, pero existen bastantes libros que detallan su uso, puede
      ver algunos en la <link 
      linkend="bibliography">bibliograf&iacute;a</link>. De cualquier
      manera FreeBSD ofrece un editor de uso muy sencillo, llamado
      <application>ee</application>, el cual, si usted es principiante,
      ser&aacute; el editor de su elecci&oacute;n.  Sientase en libertad
      de modificar los comentarios en la parte superior, para que reflejen
      su configuraci&oacute;n o bien los cambios realizados, para diferenciarlo
      del fichero <filename>GENERIC</filename>.</para>
      
    <para>Si ha compilado un kernel, bajo SunOS o algun otro sistema operativo
      BSD, seguramente la informaci&oacute;n de este fichero le ser&aacute; muy
      familiar.  Por otro lado, si usted esta emigrando de otros sistemas 
      operativos como DOS, el fichero <filename>GENERIC</filename> puede
      parecerle intimidante, as&iacute; que siga las instrucciones descritas
      en <link linkend="kernelconfig-config">El Fichero de Configuraci&oacute;n
      </link> detenidamente y con sumo cuidado.</para>
      
    <note>
      <para>Asegurese siempre de verificar el fichero
        <filename>/usr/src/UPDATING</filename>, antes de realizar cualquier
        actualizaci&oacute;n del sistema, en el caso de que se
        <link linkend="cutting-edge">sincronice con el source-tree</link>,
        para contar con la &uacute;ltima versi&oacute;n de FreeBSD.  
        El fichero <filename>/usr/src/UPDATING</filename> cuenta con toda
        la informaci&oacute;n importante, relacionada con actualizaciones.  
        Al ser distribuida con FreeBSD, esta informaci&oacute;n deber&aacute;
        estar m&aacute;s actualizada que la provista por el handbook.</para>
    </note>

    <para>Ahora es momento de llevar a cabo la compilaci&oacute;n del
      c&oacute;digo fuente del kernel.  Existen dos procedimientos para
      llevar esto a cabo, y el que usted utilice depender&aacute; del por
      que esta personalizando su kernel, as&iacute; como la versi&oacute;n
      de FreeBSD que este utilizando.</para>

    <itemizedlist>
      <listitem>
	<para>Si <emphasis>unicamente</emphasis> ha instalado el c&oacute;digo
	  fuente del kernel, utilice el procedimiento 1.</para>
      </listitem>

      <listitem>
	<para>Si usted esta ejecutando un versi&oacute;n de FreeBSD anterior a 
	  4.0, y <emphasis>no</emphasis> esta actualizando a la versi&oacute;n
	  4.0 o mayor, mediante el procedimiento <maketarget>make world</maketarget>,
	  utilice el procedimiento 1.</para>
      </listitem>

      <listitem>
	<para>Si esta personalizando su kernel, sin actualizar el
	  c&oacute;digo fuente (quiz&aacute;s solo para a&ntilde;adir una
	  nueva opci&oacute;n como <literal>IPFIREWALL</literal>) puede
	  utilizar cualquier de los dos procedimientos.</para>
      </listitem>

      <listitem>
	<para>Si esta reconstruyendo su kernel, como parte del proceso de
	  actualizaci&oacute;n por medio de <maketarget>make world</maketarget>,
	  entonces utilice el metodo 2.</para>
      </listitem>
    </itemizedlist>
    
    <procedure>
      <title>Procedimiento 1.  Compilando el Kernel de la forma <quote>tradicional</quote></title>

      <step>
	<para>Ejecute &man.config.8; para generar el c&oacute;digo fuente del kernel.</para>
	
	<screen>&prompt.root; <userinput>/usr/sbin/config <replaceable>MYKERNEL</replaceable></userinput></screen>
      </step>

      <step>
	<para>Cambie de ruta, hacia el directorio de compilaci&oacute;n.</para>

	<screen>&prompt.root; <userinput>cd ../../compile/<replaceable>MYKERNEL</replaceable></userinput></screen>
      </step>

      <step>
	<para>Compile el kernel.</para>
	
	<screen>&prompt.root; <userinput>make depend</userinput>
&prompt.root; <userinput>make</userinput></screen>
      </step>

      <step>
	<para>Instale el nuevo kernel.</para>
	
	<screen>&prompt.root; <userinput>make install</userinput></screen>
      </step>
    </procedure>

    <procedure>
      <title>Procedimiento 2.  Compilando el kernel de una <quote>nueva</quote>
	forma</title>
      
      <step>
	<para>Dirijase al directorio <filename>/usr/src</filename> .</para>
	
	<screen>&prompt.root; <userinput>cd /usr/src</userinput></screen>
      </step>

      <step>
	<para>Compile el kernel.</para>
	
	<screen>&prompt.root; <userinput>make buildkernel KERNCONF=<replaceable>MYKERNEL</replaceable></userinput></screen>
      </step>

      <step>
	<para>Instale el nuevo kernel.</para>

	<screen>&prompt.root; <userinput>make installkernel KERNCONF=MYKERNEL</userinput></screen>
      </step>
    </procedure>
    
    <note>
      <para>Para versiones de FreeBSD 4.2 y anteriores, deber&aacute;
        reemplazar <literal>KERNCONF=</literal> con
        <literal>KERNEL=</literal>.
        Para versiones 4.2-STABLE que fueron obtenidas posterior al 2 de Febrero
        del 2001, si se reconoce este par&aacute;metro como
        <literal>KERNCONF=</literal>.</para>
    </note>

    <indexterm>
      <primary><command>cvsup</command></primary>
    </indexterm>
    <indexterm><primary>CVS an&oacute;nimo</primary></indexterm>
    <indexterm><primary>CTM</primary></indexterm>
    <indexterm>
      <primary>CVS</primary>
      <secondary>an&oacute;nimo</secondary>
    </indexterm>

    <para>Si usted aun <emphasis>no</emphasis> ha actualizado su
      sistema fuente (<quote>source tree</quote>)
      (no ha ejecutado <application>CVSup</application>,
      <application>CTM</application> o bien usado 
      <application>anoncvs</application>), entonces deberia utilizar la
      siguiente secuencia de comandos; 
      <command>config</command>, <maketarget>make depend</maketarget>,
      <command>make</command>, <maketarget>make install</maketarget>.
    </para>

    <indexterm>
      <primary><filename>kernel.old</filename></primary>
    </indexterm> 

    <para>El kernel nuevo ser&aacute; copiado al directorio ra&iacute;z
      como <filename>/kernel</filename> y el antiguo kernel, ser&aacute;
      renombrado como <filename>/kernel.old</filename>.  Ahora deber&aacute;
      reiniciar su sistema, utilizando su nuevo kernel.  En caso de que se
      presente algun problema, hay algunos consejos para la <link
      linkend="kernelconfig-trouble">resoluci&oacute;n de problemas</link>, al
      final de este cap&iacute;tulo.  Asegurese de leer la secci&oacute;n que
      explica como recuperar el sistema, en caso de que su kernel <link
      linkend="kernelconfig-noboot">no desee <quote>bootear</quote></link>.
      </para>
    
    <note>
      <para>Si usted ha a&ntilde;adido nuevos dispositivos (tales como
        tarjetas de sonido) puede ser necesario que deba crear los <link
        linkend="kernelconfig-nodes">ficheros de dispositivos</link>, 
        bajo el directorio <filename>/dev</filename>, antes de poder
        utilizarlos.  Para m&aacute;s informaci&oacute;n al respecto,
        revise la secci&oacute;n "Creaci&oacute;n de Ficheros de Dispositivos" m&aacute;s
        adelante en este cap&iacute;tulo.</para>
    </note>
  </sect1>

  <sect1 id="kernelconfig-config">
    <title>El Fichero de Configuraci&oacute;n</title>
    <indexterm>
      <primary>kernel</primary>
      <secondary>LINT</secondary>
    </indexterm>
    <indexterm><primary>LINT</primary></indexterm>
    <indexterm>
      <primary>kernel</primary>
      <secondary>fichero de configuraci&oacute;n</secondary>
    </indexterm>

    <para>En realidad el formato general de un fichero de 
      configuraci&oacute;n es simple.  Cada l&iacute;nea contiene una palabra
      clave con uno o m&aacute;s argumentos.  Para efecto de simplificar,
      la mayor&iacute;a de las l&iacute;neas contienen s&oacute;lo un
      argumento.  Cualquier cosa que precede a <literal>#</literal> es
      considerado como un comentario, y por lo tanto es ignorado.  La
      siguiente secci&oacute;n describe cada palabra clave, en el orden que
      normalmente encontrar&aacute; en el fichero <filename>GENERIC</filename>,
      aunque algunas palabras claves han sido agrupadas de acuerdo a su uso
      (como es el caso de lo que se refiere a redes), aun cuando las podr&aacute;
      encontrar dispersas en el fichero <filename>GENERIC</filename>.  <anchor
      id="kernelconfig-options"> Una mayor lista de opciones, as&iacute; como
      explicaciones detalladas de cada dispositivo, podr&aacute;n encontrarse
      en el fichero de configuraci&oacute;n de ayuda <filename>LINT</filename>,
      localizado en el mismo subdirectorio que <filename>GENERIC</filename>.  
      Si usted tiene alguna duda sobre si es necesaria alguna l&iacute;nea u
      opci&oacute;n, consulte el fichero <filename>LINT</filename>.</para>

    <important>
      <title>El uso de numeros</title>

      <para>En todas las versiones de FreeBSD posteriores e
        incluyendo la 3.X, el proceso de &man.config.8; requiere que el
        uso de numeros como cadenas de texto, en el fichero de 
        configuraci&oacute;n, deben encontrarse entre comillas dobles.</para>

      <para>Este requerimiento ha sido removido, desde la rama 4.X, que es
        la que estamos cubriendo en este libro, por lo que si usted cuenta 
        con un sistema anterior a 4.X, revise los ficheros
	    <filename>/usr/src/sys/i386/conf/LINT</filename> y
	    <filename>/usr/src/sys/i386/conf/GENERIC</filename> de su sistema
	    para ver algunos ejemplos.</para>
    </important>
    <indexterm>
      <primary>kernel</primary>
      <secondary>ejemplo del fichero de configuraci&oacute;n</secondary>
    </indexterm>

    <para>A continuaci&oacute;n encontrar&aacute; un ejemplo del fichero
      <filename>GENERIC</filename>, con algunos comentarios adicionales
      para aclaraciones donde haya sido necesario.  Este ejemplo debe ser
      igual, o muy simlar, a su copia localizada en
      <filename>/usr/src/sys/i386/conf/GENERIC</filename> . Para ver mas
      detalles sobre las posibles opciones del kernel, vea el fichero
      <filename>/usr/src/sys/i386/conf/LINT</filename>.</para>

    <note>
      <para>N de T: En virtud de que el fichero que usted encontrar&aacute;
        en su sistema es un fichero en ingl&eacute;s ;), he decidido dejar
        lo que corresponde al fichero <filename>GENERIC</filename>, tal como
        usted lo ver&aacute;, y s&oacute;lo traducir los comentarios previos
        de cada opci&oacute;n.  En caso de que alg&uacute;n comentario del
        fichero sea traducido (por claridad), favor de considerarlo como un
        <quote>extra</quote>, que no encontrar&aacute; en su fichero
        original. Gracias por su comprensi&oacute;n.</para>
        </note>
        
    <programlisting>#
# GENERIC -- Generic kernel configuration file for FreeBSD/i386
#
# For more information on this file, please read the handbook section on
# Kernel Configuration Files:
#
#    http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
#
# The handbook is also available locally in /usr/share/doc/handbook
# if you've installed the doc distribution, otherwise always see the
# FreeBSD World Wide Web server (http://www.FreeBSD.ORG/) for the
# latest information.
#
# An exhaustive list of options and more detailed explanations of the
# device lines is also present in the ./LINT configuration file. If you are
# in doubt as to the purpose or necessity of a line, check first in LINT.
#
# &dollar;FreeBSD: src/sys/i386/conf/GENERIC,v 1.246 2000/03/09 16:32:55 jlemon Exp &dollar;</programlisting>

    <para>Las siguientes palabras claves son <emphasis>obligatorias</emphasis>
      en <emphasis>todo</emphasis> kernel que se vaya a recompilar:</para>
    <indexterm>
      <primary>opciones del kernel</primary>
      <secondary>machine</secondary>
    </indexterm>

    <programlisting>machine		i386</programlisting>

    <para>Esto se refiere a la arquitectura de la maquina.  La cual debe ser
      <literal>i386</literal>, <literal>alpha</literal>, o
      <literal>pc98</literal>.</para>

    <indexterm>
      <primary>opciones del kernel</primary>
      <secondary>cpu</secondary>
    </indexterm>
    <programlisting>cpu          I386_CPU
cpu          I486_CPU
cpu          I586_CPU
cpu          I686_CPU</programlisting>

    <para>Lo anterior especif&iacute;ca el tipo de procesador con que
      cuenta su sistema.  En este caso puede dejar varias opciones
      (por ejemplo en el caso de que no este seguro si su procesador es
      <literal>I586_CPU</literal> o bien <literal>I686_CPU</literal>), de
      cualquier forma para un kernel personalizado siempre es preferible
      especificar el tipo de procesador con que cuenta su sistema.  Si
      usted no esta seguro del tipo de procesador con que cuenta su sistema, 
      puede utilizar el comando <command>dmesg</command>, para ver los
      mensajes de envi&oacute; el kernel al arrancar el sistema, y donde
      podr&aacute; ver como detecto el CPU.</para>
    <indexterm>
      <primary>opciones del kernel</primary>
      <secondary>cpu type</secondary>
    </indexterm>

    <para>La arquitectura Alpha cuenta con diferentes valores para
      el <literal>cpu</literal>. Los cuales incluyen:</para>

    <programlisting>cpu          EV4
cpu          EV5</programlisting>

    <para>Si usted utiliza un sistema Alpha, debe estar utilizando un tipo
      de CPU descrito en la parte superior.</para>
    <indexterm>
      <primary>opciones del kernel</primary>
      <secondary>ident</secondary>
    </indexterm>

    <programlisting>ident          GENERIC</programlisting>

    <para>Este es el identificador del kernel.  Esta opci&oacute;n
      deber&aacute; cambiarla a como desee nombrar su kernel, como en 
      el ejemplo anterior; <literal>MYKERNEL</literal>.  El valor que 
      asigne en la opci&oacute;n <literal>ident</literal>, ser&aacute; el
      nombre que aparecer&aacute; en la pantalla, al momento de iniciar el
      kernel del sistema, de tal forma que es recomendable personalizar
      este par&aacute;metro, m&aacute;s aun si usted piensa contar con
      un kernel diferente al usual (por ejemplo, en el caso de que desee
      contar con un kernel experimental).</para>
    <indexterm>
      <primary>opciones del kernel</primary>
      <secondary>maxusers</secondary>
    </indexterm>

    <programlisting>maxusers          <replaceable>n</replaceable></programlisting>

    <para>La opci&oacute;n <literal>maxusers</literal>, establece el
      tama&ntilde;o de un numero importante de tablas del sistema.  Este
      numero supuestamente debe ser muy similar al numero de usuarios que
      usted espera ejecutar simultaneamente en su sistema.</para>

    <para>Comenzando con FreeBSD 4.5, el sistema autom&aacute;ticamente
      configurar&aacute; esta opci&oacute;n para usted, si es que
      explicitamente le asigna el valor de <literal>0</literal> a esta
      opci&oacute;n<footnote>
      <para>El algoritmo de <quote>auto-configuraci&oacute;n</quote>, establece
        para <literal>maxusers</literal> la cantidad igual a la cantidad de
        memoria en el sistema, con m&iacute;nimo de 32 y un m&aacute;ximo de
        384.</para>
    </footnote>.  Si usted esta utilizando una versi&oacute;n
      de FreeBSD anterior, o bien usted desea controlar este 
      par&aacute;metro, deber&aacute; establecer cuando menos un valor
      de 4, especialmente si usted utiliza el Sistema de Ventanas X, o
      compila software.  La raz&oacute;n de esto es que una de las tablas
      m&aacute;s importantes que controla <literal>maxusers</literal>, es
      la que controla el numero m&aacute;ximo de procesos que se pueden
      ejecutar simultaneamente en el sistema, lo cual se establece como;
      <literal>20 + 16 * maxusers</literal>, por lo que si establece este
      valor como 1, quiere decir que podr&aacute; ejecutar 36 procesos
      simultaneamente, incuyendo los de inicio, algo as&iacute; como 18, y
      los 15 que se ejecutaran al arrancar el Sistema de Ventanas X.  Incluso
      una simple tarea, como leer una pagina de ayuda man, incia como
      nueve procesos, para efecto de filtrar, descomprimir y visualizar.  
      Establecer un valor de 64 a <literal>maxusers</literal>, le permitira
      ejecutar 1044 procesos simultaneamente, que debe ser suficiente para
      casi cualquier uso.  De cualquier forma, si llega a notar su tabla de
      proc llena (<errortype>proc table full</errortype>), al tratar de 
      iniciar alg&uacute;n proceso, o bien esta ejecutando un servidor con
      bastantes usuarios simultaneos 
      (como <hostid role="fqdn">ftp.FreeBSD.org</hostid>), siempre puede
      incrementar este numero y recompilar su kernel.</para>

    <note>
      <para>La opci&oacute;n <literal>maxusers</literal>
        <emphasis>no</emphasis> limita el numero de usuarios que
        pueden ingresar al sistema.  Simplemente establece valores, para
        el tama&ntilde;o de varias tablas del sistema, a valores
        razonables, considerando el numero de usuarios que usted
        espera tener en su sistema y el numero de procesos que cada
        uno de estos usuarios requiere correr.  Una palabra clave que
        <emphasis>efectivamente</emphasis> limita el numero de
        <emphasis>logins remotos</emphasis>, es <link
        linkend="kernelconfig-ptys"><literal>pseudo-device pty 16</literal>
        </link>.</para>
    </note>
    
    <programlisting># Floating point support - do not disable.
device          npx0     at nexus? port IO_NPX irq 13</programlisting>
    
    <para>El dispositivo <literal>npx0</literal> es la interfaz del punto
      flotante en FreeBSD, el cual es parte del hardware como co-procesador
      o bien el software emulador matem&aacute;tico. Este 
      <emphasis>no</emphasis> es opcional.</para>

    <programlisting># Pseudo devices - the number indicates how many units to allocate.
pseudo-device   loop          # Network loopback</programlisting>

    <para>Este es el dispositivo gen&eacute;rico de TCP/IP, loopback.  Si
      usted hace telnet o FTP a <hostid>localhost</hostid> (ej. <hostid
      role="ipaddr">127.0.0.1</hostid>), el enlace se realiza por medio
      de este pseudo-dispositivo.  Este es 
      <emphasis>obligatorio</emphasis>.</para>

    <para>Todo lo que veremos a continuaci&oacute;n, es m&aacute;s o menos
      opcional.  Vea las notas debajo de cada opci&oacute;n, para m&aacute;s
      informaci&oacute;n al respecto.</para>

    <programlisting>#makeoptions     DEBUG=-g          #Build kernel with gdb(1) debug symbols
options          MATH_EMULATE      #Support for x87 emulation</programlisting>

    <para>Mediante esta l&iacute;nea podemos indicarle al kernel que
      simule un co-procesador matem&aacute;tico, si su maquina no
      cuenta con uno (386 o 486SX).  Si usted cuenta con una 486DX, o
      una 387 o 486SX (con chip separado de 387 o 487), o m&aacute;s
      actual (Pentium, Pentium II, etc.), puede comentar esta 
      l&iacute;nea sin problemas (N de T. Para comentar las
      l&iacute;neas de este fichero deber&aacute; agregar el
      simbolo <literal>#</literal> antes de la l&iacute;nea, con
      lo cual la l&iacute;nea ser&aacute; ignorada).</para>

    <note>
      <para>La rutina de emulaci&oacute;n del co-procesador
    matem&aacute;tico que viene con FreeBSD, <emphasis>no</emphasis>
    es muy exacta.  Si usted no cuenta con un co-procesador
    metam&aacute;tico, y requiere la mayor exactitud posible, es
    recomendable que modifique esta opci&oacute;n a quedar como
    <literal>GPL_MATH_EMULATE</literal>, para usar el soporte de
    GNU, que no se incluye por omisi&oacute;n, por cuestiones de
    licencia.</para>
    </note>

    <programlisting>options          INET          #InterNETworking</programlisting>

    <para>Soporte para redes.  Deje esta opci&oacute;n incluida, aun si
      no planea esta conectado a una red.  La mayor&iacute;a de los
      programas requieren cuando menos conexi&oacute;n con el
      dispositivo loopback (ej. al hacer conexi&oacute;n con su propia
      maquina), asi que esto es obligatorio.</para>

    <programlisting>options          INET6          #IPv6 communications protocols</programlisting>

    <para>Esto habilita los protocolos de comunicaci&oacute;n IPv6.</para>

    <programlisting>options          FFS          #Berkeley Fast Filesystem
options          FFS_ROOT     #FFS usable as root device [keep this!]</programlisting>

    <para>Esto es el sistema de ficheros b&aacute;sico del disco
      duro.  Incluyalo si desea arrancar su sistema del disco duro.</para>

    <programlisting>options          UFS_DIRHASH  #Improve performance on big directories</programlisting>

    <para>Esta opci&oacute;n  incluye c&oacute;digo para acelerar las
      operaciones del disco duro en directorios de gran tama&ntilde;o,
      aunque esto implique sacrificar algo de memoria adicional.  Usted
      normalmente dejaria esta opci&oacute;n si es para un servidor grande
      o bien una estaci&oacute;n de trabajo interactiva y eliminarlo si esta
      utilizando FreeBSD en un sistema peque&ntilde;o donde es importante
      conservar la memoria o bien si la velocidad del disco duro no es
      tan importante, tal como un firewall.</para>

    <programlisting>options          SOFTUPDATES  #Enable FFS soft updates support</programlisting>

    <para>Esta opci&oacute;n habilita soft updates en el kernel, lo cual
      acelera la escritura en los discos.  Esta opci&oacute;n se habilita
      por default desde la rama 4.X, pero es posible que no este habilitada.  
      Revise la respuesta que le da &man.mount.8; para verificar si cuenta
      con esta opci&oacute;n.  Si no ve la opci&oacute;n soft-updates, 
      deber&aacute; activarla usando &man.tunefs.8; o &man.newfs.8; para 
      nuevos sistemas de ficheros.</para>

    <programlisting>options          MFS          #Memory Filesystem
options          MD_ROOT      #MD is a potential root device</programlisting>

    <para>Este es el sistema de mapeo de memoria.  Esto basicamente es
      el mapeo de la memoria RAM del disco para acceso r&aacute;pido y
      almacenar ficheros temporales, &uacute;til si cuenta con
      bastante memoria swap, de la cual desee tomar ventaja.  Un sitio
      perfecto para montar la partici&oacute;n MFS es el directorio 
      <filename>/tmp</filename>, esto lo puede hacer
      a&ntilde;adiendo la siguiente l&iacute;nea al fichero
      <filename>/etc/fstab</filename>:</para>

    <informalexample>
      <programlisting>/dev/ad1s2b	/tmp mfs rw 0 0</programlisting>
    </informalexample>

    <para>Ahora simplemente necesita reiniciar su sistema o bien, ejecutar 
      el comando <command>mount /tmp</command>.</para>

    <indexterm>
      <primary>opciones del kernel</primary>
      <secondary>NFS</secondary>
    </indexterm>
    <indexterm>
      <primary>opciones del kernel</primary>
      <secondary>NFS_ROOT</secondary>
    </indexterm>
    <programlisting>options          NFS          #Network Filesystem
options          NFS_ROOT     #NFS usable as root device, NFS required</programlisting>

    <para>El sistema de ficheros de red.  A menos de que planee montar
      particiones desde un servidor Unix atrav&eacute;s de TCP/IP, esta
      l&iacute;nea puede ser comentada.</para>

    <indexterm>
      <primary>opciones del kernel</primary>
      <secondary>MSDOSFS</secondary>
    </indexterm>
    <programlisting>options          MSDOSFS      #MSDOS Filesystem</programlisting>

    <para>El sistema de ficheros de MS-DOS.  A menos de que planee
      montar una partici&oacute;n con formato de DOS, al momento de
      arrancar el sistema, puede deshabilitar esta opci&oacute;n sin
      problema alguno.  Autom&aacute;ticamente ser&aacute; cargado la
      primera vez que monte una partici&oacute;n DOS, como se explic&oacute;
      anteriormente.  As&iacute; mismo la excelente aplicaci&oacute;n
      <application>mtools</application> (que esta disponible de la
      colecci&oacute;n de ports), le permite accesar a diskettes con
      formato DOS, sin necesidad de montarlos o desmontarlos (y no
      requiere para nada de <literal>MSDOSFS</literal>).</para>

    <programlisting>options          CD9660       #ISO 9660 Filesystem
options          CD9660_ROOT  #CD-ROM usable as root, CD9660 required</programlisting>

    <para>El sistema de ficheros ISO 9660 para CDROMs.  Comente esta
      opci&oacute;n si usted no cuenta con una unidad de CDROM o bien
      s&oacute;lo monta CDs de datos ocasionalmente (en virtud de que
      ser&aacute; cargado din&aacute;micamente la primera vez que se
      utilice para un CD de datos). Los CDs de audio no requieren de
      esta opci&oacute;n.</para>

    <programlisting>options          PROCFS       #Process filesystem</programlisting>

    <para>El sistema de ficheros de procesos.  Este es un sistema de
      ficheros <quote>virtual</quote>, montado en 
      <filename>/proc</filename>, que permite que programas como
      &man.ps.1; le den mayor informaci&oacute;n sobre los
      procesos que se est&aacute;n ejecutando.</para>

        <programlisting>options          COMPAT_43    #Compatible with BSD 4.3 [KEEP THIS!]</programlisting>

    <para>Compatibilidad con 4.3BSD.  Conserve esta opci&oacute;n; algunos
      programas se comportaran de una forma extra&ntilde;a si esta
      opci&oacute;n es comentada.</para>

    <programlisting>options          SCSI_DELAY=15000    #Delay (in ms) before probing SCSI</programlisting>

    <para>Esta opci&oacute;n le indica al kernel hacer una pausa de
      15 segundos antes de realizar una prueba en cada dispositivo
      SCSI de sus sistema.  Si usted s&oacute;lo cuenta con dispositivos
      IDE, puede ignorar esta opci&oacute;n, de otra forma quiz&aacute;s
      desee reducir el tiempo a 5 segundos, para efecto de acelerar el
      arranque.  Claro esta, que si hace esto, y FreeBSD tiene problemas
      para reconocer sus dispositivos SCSI, deber&aacute; incrementar
      este valor nuevamente.</para>

    <programlisting>options          UCONSOLE            #Allow users to grab the console</programlisting>

    <para>Permite el uso de la consola, que es muy &uacute;til para
      usuarios del sistema X.  Por ejemplo, puede crear una consola
      xterm, al teclear <command>xterm -C</command>, que servira para
      desplegar mensajes (usando <command>talk</command>), as&iacute; 
      como enviar (usando <command>write</command>) mensajes, o bien,
      visualizar cualquier otro mensaje enviado por el kernel, sin
      necesidad de salir de su entorno gr&aacute;fico.</para>

    <programlisting>options          USERCONFIG          #boot -c editor</programlisting>

    <para>Esta opci&oacute;n le permite ejecutar el editor de
      configuraci&oacute;n, desde el men&uacute; de arranque.</para>

    <programlisting>options          VISUAL_USERCONFIG   #visual boot -c editor</programlisting>

    <para>Esta opci&oacute;n le permite ejecutar el editor visual de
      configuraci&oacute;n, desde el men&uacute; de arranque.</para>

    <programlisting>options          KTRACE              #ktrace(1) support</programlisting>

    <para>Esta opci&oacute;n habilita el proceso de rastreo del kernel,
      que es de utilidad para efecto de depuraci&oacute;n.</para>

    <programlisting>options          SYSVSHM             #SYSV-style shared memory</programlisting>

    <para>Esta opci&oacute;n provee memoria compartida, para el System V.  
      El uso m&aacute;s com&uacute;n de esto es la extensi&oacute;n XSHM del
      servidor X, del cual muchos programas de gr&aacute;ficos-intensos, toman
      ventaja, para contar con mayor velocidad.  Si usted utiliza el entorno
      gr&aacute;fico X, definitivamente querra incluir esta opci&oacute;n.</para>

    <programlisting>options          SYSVSEM             #SYSV-style semaphores</programlisting>

    <para>Soporte para los semaforos del System V.  Con menos uso que el
      anterior, pero s&oacute;lo agregar&aacute; unos cuantos cientos de
      bytes a su kernel.</para>

    <programlisting>options          SYSVMSG             #SYSV-style message queues</programlisting>

    <para>Soporte para mensajes de System V.  Nuevamente, s&oacute;lo
      a&ntilde;adir&aacute; unos cientos de bytes a su kernel.</para>

    <note>
      <para>El comando &man.ipcs.1; le mostrar&aacute; cualquier proceso
        que haga uso de estas componentes de System V.</para>
    </note>

    <programlisting>options 	P1003_1B		#Posix P1003_1B real-time extensions
options 	_KPOSIX_PRIORITY_SCHEDULING</programlisting>

    <para>Extensiones de tiempo-real a&ntilde;adidas en POSIX en 1993.
      Algunas aplicaciones de la colecci&oacute;n de ports, utilizan estas
      extensiones (tal como <application>StarOffice</application>).</para>

    <indexterm>
      <primary>opciones del kernel</primary>
      <secondary>ICMP_BANDLIM</secondary>
    </indexterm>
    <indexterm>
      <primary>Negaci&oacute; de Servicio (DoS)</primary>
    </indexterm>
    <programlisting>options		ICMP_BANDLIM		#Rate limit bad replies</programlisting>

    <para>Esta opci&oacute;n permite a ICMP manejar errores,en cuanto al 
      l&iacute;mite de ancho de banda a utilzar.  Es recomendable dejar esta
      opci&oacute;n tal cual, en virtud de que le permite protejer su sistema
      contra ataques de paquetes de Negaci&oacute;n de Servicio
      (Denial of Service - DoS).</para>

    <indexterm>
      <primary>opciones del kernel</primary>
      <secondary>SMP</secondary>
    </indexterm>
    <programlisting># To make an SMP kernel, the next two are needed
#options        SMP                     # Symmetric MultiProcessor Kernel
#options        APIC_IO                 # Symmetric (APIC) I/O</programlisting>

    <para>Las opciones anteriores son necesarias si desea soporte para
      SMP.</para>

    <programlisting>device          isa</programlisting>

    <para>Todas las PCs soportadas por FreeBSD cuentan con uno de estos.  Si
      usted cuenta con una IBM PS/2 (Arquitectura de Micro Canal), en este
      momento usted no puede ejecutar FreeBSD (se esta trabajando en este 
      soporte).</para>

    <programlisting>device          eisa</programlisting>

    <para>Incluya esta opci&oacute;n, si cuenta con una tarjeta madre de
      tipo EISA.  Esto habilita la autodetecci&oacute;n y configuraci&oacute;n
      del soporte para los dispositivos que hacen uso del bus EISA.</para>

    <programlisting>device          pci</programlisting>

    <para>Incluya esta opci&oacute;n si cuenta con una tarjeta madre
      basada en PCI.  Esto habilita la auto-detecci&oacute;n de las
      tarjetas PCI y de los canales a utilizar en los buses PCI
      e ISA.</para>

    <programlisting># Floppy drives
device          fdc0        at isa? port IO_FD1 irq 6 drq 2
device          fd0         at fdc0 drive 0
device          fd1         at fdc0 drive 1</programlisting>

    <para>Este es el controlador para diskettes.  El dispositivo
      <literal>fd0</literal> corresponde a la disquetera
      <devicename>A:</devicename> y <literal>fd1</literal> corresponde
      a la disquetera <devicename>B:</devicename>.</para>

    <programlisting>device          ata</programlisting>

    <para>Este controlador da soporte a todos los dispositivos ATA y 
      ATAPI.  Usted s&oacute;lo necesita incluir esta opci&oacute;n
      una sola vez (<literal>device ata</literal>), para que el kernel
      detecte todos los dispositivos PCI ATA/ATAPI de sus sistema.</para>

    <programlisting>device          atadisk                 # ATA disk drives</programlisting>

    <para>Este es necesario junto con <literal>device ata</literal> para  
      controladores de discos ATAPI.</para>

    <programlisting><anchor id="kernelconfig-atapi">
device          atapicd                 # ATAPI CDROM drives</programlisting>

    <para>Este es necesario junto con <literal>device ata</literal> para  
      controladores de CDROM ATAPI.</para>
      
    <programlisting>device          atapifd                 # ATAPI floppy drives</programlisting>

    <para>Este es necesario junto con <literal>device ata</literal> para  
      controladores de disqueteras ATAPI.</para>

    <programlisting>device          atapist                 # ATAPI tape drives</programlisting>

    <para>Este es necesario junto con <literal>device ata</literal> para  
      controladores de cintas ATAPI.</para>

    <programlisting>options         ATA_STATIC_ID           #Static device numbering</programlisting>

    <para>Esta hace que el numero de controlador sea est&aacute;tico
      (como en el viejo controlador) o de lo contrario este numero es
      asignado din&aacute;micamente.</para>

    <programlisting># ATA and ATAPI devices
device          ata0        at isa? port IO_WD1 irq 14
device          ata1        at isa? port IO_WD2 irq 15</programlisting>

    <para>Utilice estos para sistemas antiguos no-PCI.</para>

    <programlisting># SCSI Controllers
device          ahb        # EISA AHA1742 family
device          ahc        # AHA2940 and onboard AIC7xxx devices
device          amd        # AMD 53C974 (Teckram DC-390(T))
device          dpt        # DPT Smartcache - See LINT for options!
device          isp        # Qlogic family
device          ncr        # NCR/Symbios Logic
device          sym        # NCR/Symbios Logic (newer chipsets)

device          adv0       at isa?
device          adw
device          bt0        at isa?
device          aha0       at isa?
device          aic0       at isa?</programlisting>

    <para>Controladores SCSI.  Comente cualquiera que no se encuentre en
      su sitema.  Si cuenta con un sistema unicamente IDE, puede eliminar
      todos.</para>

    <programlisting># SCSI peripherals
device          scbus      # SCSI bus (required)
device          da         # Direct Access (disks)
device          sa         # Sequential Access (tape etc)
device          cd         # CD
device          pass       # Passthrough device (direct SCSI
access)</programlisting>

    <para>Perif&eacute;ricos SCSI.  Nuevamente, comente todos los que no 
      esten presentes en su sistema, si s&oacute;lo cuenta con hardware
      IDE, puede eliminarlos por completo.</para>

    <programlisting># RAID controllers
device          ida        # Compaq Smart RAID
device          amr        # AMI MegaRAID
device          mlx        # Mylex DAC960 family</programlisting>

    <para>Controladores de soporte RAID.  Si su sistema no cuenta con
      estos, puede comentarlos o eliminarlos.</para>

    <programlisting># atkbdc0 controls both the keyboard and the PS/2 mouse
device          atkbdc0    at isa? port IO_KBD</programlisting>

    <para>Este controlador (<literal>atkbdc</literal>) provee
      servicios de E/S a teclados AT y dispositivos de tipo PS/2.  Este
      controlador es necesario para el teclado (<literal>atkbdc</literal>)
      y el dispositivo puntero (N de T: Mejor conocido como 
      <quote>rat&oacute;n</quote>) tipo PS/2 (<literal>psm</literal>).</para>

    <programlisting>device          atkbd0     at atkbdc? irq 1</programlisting>

    <para>El controlador <literal>atkbd</literal>, junto con el controlador
      <literal>atkbdc</literal>, provee acceso al teclado AT 84 o bien al
      teclado de tipo AT mejorado, que es conectado al controlador de
      teclado AT.</para>

    <programlisting>device          psm0       at atkbdc? irq 12</programlisting>

    <para>Utilice este controlador si su rat&oacute;n se conecta al
      puerto PS/2.</para>

    <programlisting>device          vga0        at isa?</programlisting>

    <para>El controlador para la tarjeta de video.</para>

    <programlisting># splash screen/screen saver
pseudo-device          splash</programlisting>

    <para>Pantalla Splash al arranque!  El protector de pantallas requiere
      de esto tambi&eacute;n.</para>

    <programlisting># syscons is the default console driver, resembling an SCO console
device          sc0          at isa?</programlisting>

    <para>El dispositivo <literal>sc0</literal> es el controlador por 
      defaault, que recuerda a la consola SCO.  Dado que la mayor&iacute;a de
      los programas de pantalla&mdash;completa, accesan a su consola por medio
      de una librer&iacute;a de base de datos para terminales, como
      <filename>termcap</filename>, no debe importar si utiliza este o bien
      <literal>vt0</literal>, el controlador de compatibilidad de
      <literal>VT220</literal>.  Si cuando accesa al sistema, tiene problemas
      para manejar programas que utilizan pantalla completa, cuando ingrese al 
      sistema, establezca su variable <envar>TERM</envar>
      a <literal>scoansi</literal>.</para>

    <programlisting># Enable this and PCVT_FREEBSD for pcvt vt220 compatible console driver
#device          vt0     at isa?
#options         XSERVER          # support for X server on a vt console
#options         FAT_CURSOR       # start with block cursor
# If you have a ThinkPAD, uncomment this along with the rest of the PCVT lines
#options         PCVT_SCANSET=2   # IBM keyboards are non-std</programlisting>

    <para>Este es el controlador de consola compatible con VT220, 
      anteriormente compatible con VT100/102.  Este sirve para algunas
      laptops que tienen incompatibilidad de hardware con 
      <literal>sc0</literal>.  Tambi&eacute;n es recomendable establecer
      su variable de entorno <envar>TERM</envar> como <literal>vt100</literal>
      o <literal>vt220</literal>.  Este controlador ha probado ser de
      gran utilidad en diferentes m&aacute;quinas en una red, donde las
      entradas para <filename>termcap</filename> o <filename>terminfo</filename>
      para el dispositivo <literal>sc0</literal> no est&aacute;n disponibles 
      &mdash; <literal>vt100</literal> debe estar disponible en
      practicamente cualquier plataforma.</para>
      
    <programlisting># Power management support (see LINT for more options)
device          apm0     at nexus? disable flags 0x20  # Advanced Power Management</programlisting>

    <para>Soporte para la Administraci&oacute;n Avanzada de
      Energ&iacute;a.  Muy &uacute;til en laptops.</para>

    <programlisting># PCCARD (PCMCIA) support
device          card
device          pcic0    at isa? irq 10 port 0x3e0 iomem 0xd0000
device          pcic1    at isa? irq 11 port 0x3e2 iomem 0xd4000 disable</programlisting>

    <para>Soporte para tarjetas PCMCIA.  Debe conservar estas si usted
      utiliza una laptop.</para>

    <programlisting># Serial (COM) ports
device          sio0     at isa? port IO_COM1 flags 0x10 irq 4
device          sio1     at isa? port IO_COM2 irq 3
device          sio2     at isa? disable port IO_COM3 irq 5
device          sio3     at isa? disable port IO_COM4 irq 9</programlisting>

    <para>Estos son los cuatro puertos seriales, conocidos en el mundo
      MS-DOS/Windows como COM1 a COM4.</para>

    <note>
      <para>Si usted cuenta con un m&oacute;dem interno conectado al
        puerto COM4 y un puerto serial en COM2, deber&aacute; cambiar 
        el IRQ del m&oacute;dem al 2 (por alguna obscura raz&oacute;n
        el IRQ 2 = IRQ 9), de manera que pueda accederlo desde FreeBSD.  
        Si usted cuenta con una tarjeta serial de puertos m&uacute;ltiples,
        verifique la p&aacute;gina de ayuda &man.sio.4; para m&aacute;s
        informaci&oacute;n sobre los valores que debe utilizar en estas
        l&iacute;neas.  Algunas tarjetas de video (principalmente aquellas
        basadas en chips S3) utilizan direcciones de E/S de la forma
        <literal>0x*2e8</literal>, y dado que muchos chips no
        decodifican completamente el espacio de direcci&oacute;n de
        E/S de 16-bit, se congelan con estas tarjetas, haciendo que el
        uso del puerto COM4 sea pr&aacute;cticamente imposible.</para>
        
      <para>Es necesario que cada puerto serial cuente con su propia 
        direcci&oacute;n IRQ (a menos que este utilizando una tarjeta de
        puertos m&uacute;ltiples, donde se permite el compartir IRQs), 
        as&iacute; que los IRQs que por default manejan los puertos COM3 y
        COM4, no pueden ser utilizados.</para>
    </note>

    <programlisting># Parallel port
device          ppc0    at isa? irq 7</programlisting>

    <para>Esta es la interfaz para el puerto paralelo ISA.</para>

    <programlisting>device          ppbus      # Parallel port bus (required)</programlisting>

    <para>Provee soporte para el bus del puerto en paralelo.</para>

    <programlisting>device          lpt        # Printer</programlisting>

    <para>Soporte para impresoras de puerto en paralelo.</para>

    <note>
      <para>Los tres anteriores son necesarios para habilitar el soporte para
        impresoras que esten conectadas al puerto en paralelo.</para>
    </note>

    <programlisting>device          plip       # TCP/IP over parallel</programlisting>

    <para>Este es el controlador para dispositivos de red que utilizan el
      el puerto en paralelo.</para>

    <programlisting>device          ppi        # Parallel port interface device</programlisting>

    <para>El puerto de E/S para prop&oacute;sitos generales 
      (<quote>geek port</quote>) + E/S IEEE1284.</para>

    <programlisting>#device         vpo        # Requires scbus and da</programlisting>

    <indexterm><primary>unidad zip</primary></indexterm>
    <para>Este es para la unidad Iomega Zip.  Que requiere soporte
      <literal>scbus</literal> y <literal>da</literal>.  Se tiene
      conocimiento de un mejor desempe&ntilde;o con puertos en modo
      EPP 1.9.</para>

    <programlisting># PCI Ethernet NICs.
device          de         # DEC/Intel DC21x4x (<quote>Tulip</quote>)
device          fxp        # Intel EtherExpress PRO/100B (82557, 82558)
device          tx         # SMC 9432TX (83c170 <quote>EPIC</quote>)
device          vx         # 3Com 3c590, 3c595 (<quote>Vortex</quote>)
device          wx         # Intel Gigabit Ethernet Card (<quote>Wiseman</quote>)</programlisting>

    <para>Varios controladores de tarjetas de red PCI.  Puede comentar
      o eliminar todas aquellas que no esten presentes en su sistema.</para>

    <programlisting># PCI Ethernet NICs that use the common MII bus controller code.
device          miibus     # MII bus support</programlisting>

    <para>El soporte del bus MII, es requerido por algunas tarjetas de
      red Ethernet PCI 10/100, espec&iacute;ficamente aquellas con
      transistores dependientes de MII o bien aquellos con transistores
      que operan igual que MII.  El a&ntilde;adir  el soporte 
      <literal>device miibus</literal> al fichero de configuraci&oacute;n
      del kernel nos permite contar con soporte para todos los
      dispositivos API genericos de MII y controladores de PHY,
      incluyendo los gen&eacute;ricos de PHY para los cuales no hay un
      controlador espec&iacute;fico.</para>

    <programlisting>device          dc         # DEC/Intel 21143 and various workalikes
device          rl         # RealTek 8129/8139
device          sf         # Adaptec AIC-6915 (<quote>Starfire</quote>)
device          sis        # Silicon Integrated Systems SiS 900/SiS 7016
device          ste        # Sundance ST201 (D-Link DFE-550TX)
device          tl         # Texas Instruments ThunderLAN
device          vr         # VIA Rhine, Rhine II
device          wb         # Winbond W89C840F
device          xl         # 3Com 3c90x (<quote>Boomerang</quote>, <quote>Cyclone</quote>)</programlisting>

    <para>Controladores que utilizan el c&oacute;digo del bus MII.</para>

    <programlisting># ISA Ethernet NICs.
device          ed0    at isa? port 0x280 irq 10 iomem 0xd8000
device          ex
device          ep
# WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really
# exists only as a PCMCIA device, so there is no ISA attachment needed
# and resources will always be dynamically assigned by the pccard code.
device          wi
# Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will
# work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP
# mode (the factory default). If you set the switches on your ISA
# card for a manually chosen I/O address and IRQ, you must specify
# those parameters here.
device          an
# The probe order of these is presently determined by i386/isa/isa_compat.c.
device          ie0    at isa? port 0x300 irq 10 iomem 0xd0000
device          fe0    at isa? port 0x300
device          le0    at isa? port 0x300 irq 5 iomem 0xd0000
device          lnc0   at isa? port 0x280 irq 10 drq 0
device          cs0    at isa? port 0x300
device          sn0    at isa? port 0x300 irq 10
# requires PCCARD (PCMCIA) support to be activated
#device         xe0    at isa?</programlisting>

    <para>Controladores para tarjetas Ethernet ISA.  Vea el fichero
      <filename>/usr/src/sys/i386/conf/LINT</filename> para ver que tarjetas
      est&aacute;n soportadas, y por cuales controladores.</para>

    <programlisting>pseudo-device   ether         # Ethernet support</programlisting>

    <para>El soporte <literal>ether</literal> s&oacute;lo es necesario si
      cuenta con una tarjeta Ethernet.  Este incluye el soporte gen&eacute;rico
      para el c&oacute;digo Ethernet.</para>

    <programlisting>pseudo-device   sl      1     # Kernel SLIP</programlisting>

    <para>El dispositivo <literal>sl</literal> es el soporte para SLIP.  
      El cual casi ha sido suplantado por PPP, que es m&aacute;s sencillo
      de configurar, m&aacute;s adecuado para conexiones de m&oacute;dem a
      m&oacute;dem y m&aacute;s poderoso.  El <replaceable>numero</replaceable>
      posterior a <literal>sl</literal>, especif&iacute;ca cuantas sesiones
      simultaneas se pueden soportar por SLIP.</para>

    <programlisting>pseudo-device   ppp     1     # Kernel PPP</programlisting>

    <para>Este es el soporte del kernel para conexiones PPP, por medio de
      tel&eacute;fono.   Existe tambi&eacute;n una versi&oacute;n de PPP
      como aplicaci&oacute;n (<quote><literal>userland</literal></quote>), 
      que utiliza el dispositivo <literal>tun</literal> y ofrece mayor
      flexibilidad y funciones, tal como el marcado a petici&oacute;n.  El
      <replaceable>numero</replaceable> posterior a <literal>ppp</literal>
      especif&iacute;ca cuantas conexiones PPP se pueden mantener de
      manera simultanea.</para>

    <programlisting>pseudo-device   tun           # Packet tunnel.</programlisting>

    <para>Este dispositivo es utilizado por la aplicaci&oacute;n PPP
      userland.  El <replaceable>numero</replaceable> posterior a
      <literal>tun</literal>, especif&iacute;ca el soporte m&aacute;ximo
      de sesiones PPP simultaneas.  Vea la secci&oacute;n
      PPP de este libro, para mayor informaci&oacute;n al respecto.</para>

    <programlisting><anchor id="kernelconfig-ptys">
pseudo-device   pty           # Pseudo-ttys (telnet etc)</programlisting>

    <para>Esta es una <quote>pseudo-terminal</quote> o bien un puerto
      de acceso simulado.  Es utilizado para conexiones por medio de
      <command>telnet</command> y sesiones <command>rlogin</command>,
      <application>xterm</application>, y algunas otras aplicaciones tal como
      <application>emacs</application>.  Un
      <replaceable>numero</replaceable> despu&eacute;s de <literal>pty</literal> 
      indica el numero de 
      <literal>pty</literal>s a crear.  Si usted requiere de m&aacute;s de las
      16 <application>xterm</application> y/o logins remotos que se crean por 
      default, asegurese de incrementar el numero de acuerdo a sus necesidades,
      sin exceder el m&aacute;ximo de 256.</para>

    <programlisting>pseudo-device   md            # Memory <quote>disks</quote></programlisting>

    <para>Pseudo-dispositivos para la memoria de discos.</para>

    <programlisting>pesudo-device   gif</programlisting>

    <para>o</para>

    <programlisting>pseudo-device   gif     4     # IPv6 and IPv4 tunneling</programlisting>

    <para>Esto permite el env&iacute;o de IPv6 sobre IPv4, IPv4 sobre IPv6,
      IPv4 sobre IPv4 e IPv6 sobre IPv6.  Desde la versi&oacute;n 4.4 de
      FreeBSD, el dispositivo <literal>gif</literal> es
      <quote>auto-clonable</quote>, y usted debiese utilizar el primer
      ejemplo (sin el numero despu&eacute;s de <literal>gif</literal>).  
      Versiones anteriores de FreeBSD requieren de este numero.</para>

    <programlisting>pseudo-device   faith   1     # IPv6-to-IPv4 relaying (translation)</programlisting>

    <para>Este pseudo-dispositivo captura los paquetes que han sido
      enviados y los redirecciona hacia el demonio 
      <quote>traductor</quote> de IPv4/IPv6.</para>

    <programlisting># The `bpf' pseudo-device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
pseudo-device   bpf           # Berkeley packet filter</programlisting>

    <para>Este es el Filtro de Paquetes de Berkeley.  Este pseudo-dispositivo
      permite a las interfaces de red colocarse en modo promiscuo, 
      capturando cada paquete en una transmisi&oacute;n de red (ej. una
      Ethernet).  Estos paquetes pueden ser capturados y examinados por
      medio del programa &man.tcpdump.1;.</para>

    <note>
      <para>La opci&oacute;n <literal>bpf pseudo-device</literal> tambi&eacute;n
        es utilizada por &man.dhclient.8; para obtener la direcci&oacute;n IP
        del ruteador por default (gateway).  Si usted utiliza DHCP, deje esta
        opci&oacute;n habilitada.</para>
    </note>

    <programlisting># USB support
#device         uhci          # UHCI PCI-&gt;USB interface
#device         ohci          # OHCI PCI-&gt;USB interface
#device         usb           # USB Bus (required)
#device         ugen          # Generic
#device         uhid          # <quote>Human Interface Devices</quote>
#device         ukbd          # Keyboard
#device         ulpt          # Printer
#device         umass         # Disks/Mass storage - Requires scbus and da
#device         ums           # Mouse
# USB Ethernet, requires mii
#device         aue           # ADMtek USB ethernet
#device         cue           # CATC USB ethernet
#device         kue           # Kawasaki LSI USB ethernet</programlisting>

    <para>Soporte para varios dispositivos USB.</para>

    <para>Para m&aacute;s informaci&oacute;n y para ver todos los dispositivos
      soportados por FreeBSD, favor de consultar el fichero
      <filename>/usr/src/sys/i386/conf/LINT</filename>.</para>
  </sect1>

  <sect1 id="kernelconfig-nodes">
    <title>Creaci&oacute;n de Nodos para los Dispositivos</title>

    <indexterm><primary>nodos para los dispositivos</primary></indexterm>
    <indexterm>
      <primary><command>MAKEDEV</command></primary>
    </indexterm>
    <para>Casi todo dispositivo se&ntilde;alado en el kernel, cuenta con
      su correspondiente <quote>fichero nodo</quote>, bajo el directorio
      <filename>/dev</filename>.  Estos nodos parecen ficheros comunes, pero
      de hecho son ficheros especiales que indican que dispositivos deben
      ser utilizados por cada programa.  El script de shell
      <filename>/dev/MAKEDEV</filename>, que es ejecutado cuando usted
      instala por primera vez el sistema operativo, crea el nodo para
      casi todos los dispositivos soportados.  Aun as&iacute; no los crea
      a <emphasis>todos</emphasis>, as&iacute; que cuando recompila su 
      kernel y agrega soporte para un nuevo dispositivo, es importante
      asegurarse de que existen las entradas correspondientes en este 
      directorio, y si no es as&iacute; crearlas.  He aqui un 
      peque&ntilde;o ejemplo:</para>

    <para>Supongamos que ha a&ntilde;adido soporte en su kernel para un
      dispositivo CDROM tipo IDE.  La l&iacute;nea a a&ntilde;adir es:</para>

    <programlisting>device acd0</programlisting>

    <para>Esto significa que debe buscar alguna entrada que comience con
      <filename>acd0</filename> en el directorio <filename>/dev</filename>,
      posiblemente seguido de una letra, tal como
      <literal>c</literal>, o bien precedido de una letra como
      <literal>r</literal>, que significa que es el dispositivo 
      <quote>raw</quote> .  Resulta que esos ficheros no existen en el
      directorio <filename>/dev</filename>, as&iacute; que debe dirijirse
      a este directorio y teclear lo siguiente:</para>

    <indexterm>
      <primary><command>MAKEDEV</command></primary></indexterm>
    <screen>&prompt.root; <userinput>sh MAKEDEV acd0</userinput></screen>

    <para>Cuando este script termine, encontrar&aacute; que ahora
      existen los ficheros <filename>acd0c</filename> y
      <filename>racd0c</filename> en el directorio <filename>/dev</filename>,
      de tal forma que sabr&aacute; que se ha ejecutado con exito.</para>

    <para>Para tarjetas de sonido, debe ejecutar el siguiente comando
      para crear las entradas correspondientes:</para>

    <screen>&prompt.root; <userinput>sh MAKEDEV snd0</userinput></screen>

    <note>
      <para>Si existen otras personas con acceso a su sistema, cuando
        cree ficheros-nodo para dispositivos tales como tarjetas
        de sonido, es recomendable proteger estos dispositivos,
        a&ntilde;adiendolos al fichero <filename>/etc/fbtab</filename>.  
        Vea la p&aacute;gina de ayuda &man.fbtab.5; para m&aacute;s
        informaci&oacute;n al respecto.</para>
    </note>

    <para>El procedimiento mencionado puede servirle para
      a&ntilde;adir cualquier otro dispositivo no-generico o bien que no
      exista en el fichero <filename>/usr/src/sys/i386/conf/GENERIC</filename>, 
      para el cual no existan las entradas apropiadas.</para>

    <note>
      <para>Todos los controladores SCSI utilizan las mismas entradas en
        <filename>/dev</filename>, as&iacute; que no es necesario crearlas.  
        As&iacute; mismo, las tarjetas de red y pseudo-dispositivos de tipo
        SLIP/PPP, no cuentan con entradas en el directorio 
        <filename>/dev</filename>, por lo que tampoco tiene por que
        preocuparse de estas.</para>
    </note>
  </sect1>

  <sect1 id="kernelconfig-trouble">
    <title>En Caso de que Algo No Funcione</title>

    <para>Existen cinco tipos de problemas que se pueden presentar al momento
      de estar personalizando/compilando un kernel.  Estas son:</para>

    <variablelist>
      <varlistentry>
	<term>Que el comando <command>config</command> de como resultado un error:</term>

	<listitem>
	  <para>Si el comando <command>config</command> da como resultado un
	    error al momento de de su ejecuci&oacute;n, puede ser que simplemente
	    haya cometido un error de tipograf&iacute;a en su documento personal
	    de configuraci&oacute;n (que habiamos llamado <quote>MYKERNEL</quote>).  
	    Afortunadamente el comando <command>config</command> le dar&aacute;
	    informaci&oacute;n sobre el error, como es el numero de l&iacute;nea
	    que contiene el error, de tal forma que puede dirijirse directamente
	    a dicha l&iacute;nea con <command>vi</command> y corregir el 
	    error.  Por ejemplo si visualiza:</para>
	    
	  <screen>config: line 17: syntax error</screen>

	  <para>Puede ir directamente al problema en <command>vi</command>, al
	    teclear <command>17G</command> en el modo de comando.  Asegurese
	    de que la palabra clave ha sido escrita correctamente, al
	    compararla con la que corresponde al fichero <filename>GENERIC</filename>
	    o alguna otra referencia.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Cuando el comando <command>make</command> falla:</term>

	<listitem>
	  <para>Cuando el comando <command>make</command> da como
	    resultado un error, generalmente es indicio de que el
	    fichero de configuraci&oacute;n tiene un error, pero que este
	    error no es tan grave como para que <command>config</command>
	    lo detecte.  Revise nuevamente su fichero y si aun as&iacute;
	    no puede detectar el error, env&iacute;e un correo a
	    &a.questions; adjuntando el fichero personalizado de su 
	    kernel, y debiese ser diagnosticado r&aacute;pidamente.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Al instalar el nuevo kernel se presenta una falla</term>
	
	<listitem>
	  <para>Si el kernel termino de compilarse correctamente, pero
	    presenta una falla al instalarlo (esto es cuando el comando
	    <command>make install</command> o 
	    <command>make installkernel</command> da como resultado un Error),
	    lo primero que es necesario revisar, es si su sistema esta
	    ejecutandose en securelevel 1 o mayor (vea &man.init.8;).  Aqui
	    lo que sucede es que la instalaci&oacute;n del kernel intenta
	    remover la <quote>marca</quote> (flag) de inmutable del
	    kernel actual y colocar dicha marca al nuevo kernel.  Y en
	    virtud de que securelevel 1 o mayor evita que dicha marca sea
	    removida de cualquier fichero del sistema, la instalaci&oacute;n
	    del nuevo kernel debe ser realizada en securelevel 0
	    o menor.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>El nuevo kernel no arranca:<anchor
	  id="kernelconfig-noboot"></term>

	<listitem>
	  <para>Si su nuevo kernel no se ejecuta correctamente al arrancar
	    el sistema, o bien falla en reconocer sus dispositivos, no
	    entre en p&aacute;nico!  Afortunadamente BSD cuenta con un
	    excelente mecanismo para recuperarse de un kernel recien
	    instalado que presenta este tipo de errores.  Simplemente 
	    seleccione el kernel que desea arrancar, al momento que se esta
	    incializado en su sistema FreeBSD, el cargador de arranque
	    (boot loader).  Puede accesar a este cuando su sistema se
	    encuentra en cuenta regresiva desde 10.  Pulse cualquier tecla
	    excepto la tecla <keycap>enter</keycap>, posteriormente teclee
	    <command>unload</command> y posteriormente teclee
	    <command>boot <replaceable>kernel.old</replaceable></command>,
	    o bien el nombre de fichero de cualquier otro kernel que usted
	    sabe que arranacar&aacute; correctamente.  Cuand personalice un
	    kernel, siempre es buena idea contar con un kernel que sabemos
	    que su funcionamiento es correcto, a la mano.</para>

	  <note>
	    <para>Recuerde que si tiene problemas para personalizar su
	      kernel, es recomendable asegurarse de contar con un kernel
	      de tipo <filename>GENERIC</filename>, o alg&uacute;n otro
	      que tenga la seguridad de su funcionamiento y que tenga un
	      nombre que no ser&aacute; borrado en la siguiente
	      compilaci&oacute;n de kernel.  No puede confiar en el
	      <filename>kernel.old</filename>, ya que en cada
	      instalaci&oacute;n de un nuevo kernel, este se sustituye
	      con el &uacute;ltimo kernel instalado, que pudiese se un
	      kernel no funcional.  Tambi&eacute;n recuerde que, en cuanto
	      le sea posible, debe mover el kernel funcional a la 
	      ubicaci&oacute;n correcta del <filename>kernel</filename>, o
	      bien, comandos como &man.ps.1; no trabajar&aacute;n 
	      correctamente.  El comando para <quote>desbloquear</quote> el
	      fichero del <filename>kernel</filename> que instala el 
	      comando <command>make</command> (para efecto de usar
	      permanentemente otro kernel) es:</para>

	    <screen>&prompt.root; <userinput>chflags noschg /kernel</userinput></screen>

	    <para>Si no puede ejecutar esto, probablemente su sistema se
	      este ejecutando en un valor mayor a cero de
	      &man.securelevel.8;.  Edite la l&iacute;nea
	      <literal>kern_securelevel</literal> del fichero 
	      <filename>/etc/rc.conf</filename> y establezca este valor como
	      <literal>-1</literal>, y reinicie su sistema.  Posteriormente
	      puede regresar este al valor original, cuando este contento
	      con su nuevo kernel.</para>

	    <para>Y si usted desea <quote>bloquear</quote> su nuevo kernel
	      en su ubicaci&oacute;n, o cualquier otro fichero, de tal
	      forma que no pueda ser movido o modificado, puede hacerlo
	      con el comando:</para>

	    <screen>&prompt.root; <userinput>chflags schg /kernel</userinput></screen>
	  </note>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>El kernel funciona, pero <command>ps</command> ha dejado de
	  funcionar!:</term>

	<listitem>
	  <para>Si usted ha instalado un kernel que pertenece a una 
	    versi&oacute;n diferente a la del sistema en cuesti&oacute;n, por
	    ejemplo, un kernel 4.X sobre un sistema 3.X, gran variedad de
	    comandos de sistema, como son: &man.ps.1; y &man.vmstat.8; ya no
	    van a funcionar.  Deber&aacute; recompilar la librer&iacute;a
	    <filename>libkvm</filename>, as&iacute; como sus utilidades.  Es
	    por esta raz&oacute;n, que no es una buena idea utilizar un
	    kernel de una versi&oacute;n diferente al resto del sistema
	    operativo.</para>
	</listitem>
      </varlistentry>
    </variablelist>
  </sect1>
</chapter>

<!-- 
     Local Variables:
     mode: sgml
     sgml-declaration: "../chapter.decl"
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     sgml-parent-document: ("../book.sgml" "part" "chapter")
     End:
-->

