<!-- $FreeBSD$ -->
<!-- The FreeBSD Documentation Spanish Project -->
  <sect>
    <heading>Configuraci&oacute;n del Kernel<label id="kernelconfig"></heading>

    <sect1>
      <heading>Me gustar&iacute;a personalizar mi kernel. &iquest;Es dif&iacute;cil?<label id="make-kernel"></heading>

      <p>No!, primero, necesitas la distribuci&oacute;n completa de fuentes o,
      por lo menos, la distribuci&oacute;n de fuentes del kernel. De esta manera
      tienes los fuentes necesarios para crearte un nuevo kernel. Al
      contrario que muchos Unix comerciales, nosotros tenemos la pol&iacute;tica
      de <bf/NO/ vender nuestro kernel en formato binario.

      <p>La instalaci&oacute;n de los fuentes ocupa un poco m&aacute;s de 
      espacio, pero te permite consultar los fuentes del kernel en caso de 
      dificultad o entender que est&aacute; ocurriendo realmente en la 
      ejecuci&oacute;n del sistema.

      <p>Una vez tienes instalada la distribuci&oacute;n completa de fuentes, o
      por lo menos la del kernel, haz lo siguiente como root:

      <enum>
        <item> <tt>cd /usr/src/sys/i386/conf</tt>
        <item> <tt/cp GENERIC MYKERNEL/
        <item> <tt/vi MYKERNEL/
        <item> <tt/config MYKERNEL/
        <item> <tt>cd ../../compile/MYKERNEL</tt>
        <item> <tt/make depend/
        <item> <tt/make all/
        <item> <tt/make install/
        <item> <tt/reboot/
      </enum>

      <p>El paso 2 no es necesario si todav&iacute;a tienes un fichero de
      configuraci&oacute;n del kernel de una release anterior de FreeBSD
      2.X. - simplemente, copia el fichero antiguo y exam&iacute;nalo
      cuidadosamente para asegurar que no haya cambiado la sintaxis
      da alg&uacute;n driver, o haya alguno anticuado.

      <p>Un buen fichero de configuraci&oacute;n para consultar es <tt/LINT/,
      el cual contiene ejemplos documentados para todas las posibles
      opciones del kernel. El fichero de configuraci&oacute;n <tt/GENERIC/ se
      usa para crear el kernel "por defacto" que es el que estar&aacute;s
      usando si no has creado ninguno nuevo.

      <p>Si no necesitas hacer ning&uacute;n cambio al fichero <tt/GENERIC/,
      puedes saltar al paso 3, donde personalizas el kernel para tu
      sistema. El paso 8 solo debe ejecutarse si los pasos 6 y 7 se
      han realizado de manera satisfactoria. Esto copiar&aacute; una 
      im&aacute;gen del nuevo kernel a <tt>/kernel</tt> y <bf/realizar&aacute; 
      una copia del antiguo kernel en/ <tt>/kernel.old</tt>. Es muy importante 
      recordar esto por si el nuevo kernel falla en algun momento - puedes
      seleccionar <tt>kernel.old</tt> en el prompt de arranque. Al hacer
      un reboot, por defecto se cargar&aacute; el nuevo kernel.

      <p>Si la compilaci&oacute;n en el paso 7 falla por alguna raz&oacute;n, es
      recomendable que empieces desde el paso 4 substituyendo
      <tt/GENERIC/ por <tt/MYKERNEL/. Si puedes generar el kernel
      <tt/GENERIC/, significa que algo en tu fichero de configuraci&oacute;n
      es incorrecto (o has decubierto un bug). Si la compilaci&oacute;n del
      kernel <tt/GENERIC/ falla, posiblemente tengas los fuentes
      corruptos.

      <p>Finalmente, si necesitas ver los mensajes originales de arranque
      del sistema para compilar un nuevo kernel, ejecuta el comando
      <htmlurl url="http://www.FreeBSD.org/cgi/man.cgi?dmesg"
      name="dmesg">. Este comando debe imprimir en pantalla todos los
      mensajes producidos por el kernel al arrancar, los cuales te
      pueden servir en la configuraci&oacute;n de tu nuevo kernel.

      <p><bf/NOTA/ Recomendamos hacer un historial fechado de los kernel
      que vayas creando, de la manera <tt/kernel.YYMMDD/ una vez est&eacute;n
      funcionando correctamente. De esta manera, si la pr&oacute;xima vez que
      juegues con el kernel algo no funciona, puedes arrancar desde el
      &uacute;ltimo kernel correcto. Esto es especialmente importante si ahora
      est&aacute;s arrancando desde una controladora no soportada por el kernel
      GENERIC (si, experiencia personal).

    <sect1>
      <heading>La compilaci&oacute;n del kernel falla por "<tt/&lowbar;hw&lowbar;float/ is missing."</heading>

      <p>Dejame adivinar. Has borrado <htmlurl 
      url="http://www.FreeBSD.org/cgi/man.cgi?npx(4)" name="npx0">
      de tu fichero de configuraci&oacute;n porque no tienes coprocesador
      matem&aacute;tico, no? Mal hecho :-) El dispositivo <tt/npx0/ es
      <bf/OBLIGATORIO/. Aunque no tengas coprocesador, debes incluir
      el dispositivo <tt/npx0/

    <sect1>
      <heading>Conflicto de interrupciones con tarjeta serie multi-port.</heading>

      <p>Cuando compilo el kernel con drivers para tarjetas serie
      multipuerto, el sistema me dice que s&oacute;lo el primer puerto es
      testeado y el resto son obviados debido a conflictos de 
      interrupci&oacute;n. C&oacute;mo soluciono esto?

      <p>El problema en este caso es que FreeBSD tiene c&oacute;digo interno que
      evita caidas del sistema por conflictos de hardware o software. La
      manera de solucionar esto es dejar en blanco la entrada correspondiente
      a la irq en todos los puertos excepto en uno. Aqu&iacute; tienes un 
      ejemplo:

      <verb>
        #
        # Multiport high-speed serial line - 16550 UARTS
        #
        device sio2 at isa? port 0x2a0 tty irq 5 flags 0x501 vector siointr
        device sio3 at isa? port 0x2a8 tty flags 0x501 vector siointr
        device sio4 at isa? port 0x2b0 tty flags 0x501 vector siointr
        device sio5 at isa? port 0x2b8 tty flags 0x501 vector siointr
      </verb>

    <sect1>
      <heading>&iquest;C&oacute;mo activo el soporte para discos QIC-40/80?</heading>

      <p>Necesitas "descomentar" la siguiente l&iacute;nea en el fichero 
      gen&eacute;rico de configuraci&oacute;n (o a&ntilde;adirla en tu propio 
      fichero), a&ntilde;ade un <tt/flags 0x1/ en la l&iacute;nea
      <htmlurl url="http://www.FreeBSD.org/cgi/man.cgi?fdc(4)" name="fdc">
      y recompila.

      <verb>
controller  fdc0  at isa? port "IO_FD1" bio irq 6 drq 2 flags 0x1 vector fdintr
disk        fd0   at fdc0 drive 0                       ^^^^^^^^^
disk        fd1   at fdc0 drive 1
#tape       ft0   at fdc0 drive 2
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      </verb>

      <p>A continuaci&oacute;n, crea un nuevo dispositivo llamado
      <tt>/dev/ft0</tt> entrando en el directorio <tt>/dev</tt> y ejecutando 
      el comando:

      <verb>
        sh ./MAKEDEV ft0
      </verb>

      <p>Para el primer dispositivo. <tt/ft1/ para el segundo y as&iacute; para
      todos los dispositivos de este tipo que tengas.

      <p>Tendr&aacute;s un dispositivo llamado <tt>/dev/ft0</tt>, al cual puedes
      escribir a trav&eacute;s de un programa especial de manejo llamado
      <tt/ft/ - mira el man en <htmlurl
      url="http://www.FreeBSD.org/cgi/man.cgi?ft" name="ft"> para m&aacute;s
      detalles.

      <p>Versiones anteriores a la <tt/-current/ ten&iacute;an algunos problemas
      al encontrase con cintas en mal estado; si tienes problemas en los
      que parece que la cinta se rebovina siempre al llegar al mismo
      lugar, intenta utilizar la &uacute;ltima versi&oacute;n del programa 
      <tt/ft/ que encontrar&aacute;s en <tt>/usr/src/sbin/ft</tt> en 
      <tt/-current/.

  </sect>

