Capítulo 7. Configuración del Kernel

7.1. Me gustaría personalizar mi kernel. ?Es difícil?
7.2. La compilación del kernel falla por "_hw_float is missing."
7.3. Conflicto de interrupciones con tarjeta serie multi-port.
7.4. ?Cómo activo el soporte para discos QIC-40/80?

7.1.

Me gustaría personalizar mi kernel. ?Es difícil?

No!, primero, necesitas la distribución completa de fuentes o, por lo menos, la distribució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ítica de NO vender nuestro kernel en formato binario.

La instalación de los fuentes ocupa un poco más de espacio, pero te permite consultar los fuentes del kernel en caso de dificultad o entender que está ocurriendo realmente en la ejecución del sistema.

Una vez tienes instalada la distribución completa de fuentes, o por lo menos la del kernel, haz lo siguiente como root:

  1. cd /usr/src/sys/i386/conf

  2. cp GENERIC MYKERNEL

  3. vi MYKERNEL

  4. config MYKERNEL

  5. cd ../../compile/MYKERNEL

  6. make depend

  7. make all

  8. make install

  9. reboot

El paso 2 no es necesario si todavía tienes un archivo de configuración del kernel de una release anterior de FreeBSD 2.X. - simplemente, copia el archivo antiguo y examínalo cuidadosamente para asegurar que no haya cambiado la sintaxis da algún driver, o haya alguno anticuado.

Un buen archivo de configuración para consultar es LINT, el cual contiene ejemplos documentados para todas las posibles opciones del kernel. El archivo de configuración GENERIC se usa para crear el kernel "por defacto" que es el que estarás usando si no has creado ninguno nuevo.

Si no necesitas hacer ningún cambio al archivo 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á una imágen del nuevo kernel a /kernel y realizará una copia del antiguo kernel en /kernel.old. Es muy importante recordar esto por si el nuevo kernel falla en algun momento - puedes seleccionar kernel.old en el prompt de arranque. Al hacer un reboot, por defecto se cargará el nuevo kernel.

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

Finalmente, si necesitas ver los mensajes originales de arranque del sistema para compilar un nuevo kernel, ejecuta el comando dmesg. Este comando debe imprimir en pantalla todos los mensajes producidos por el kernel al arrancar, los cuales te pueden servir en la configuración de tu nuevo kernel.

NOTA Recomendamos hacer un historial fechado de los kernel que vayas creando, de la manera kernel.YYMMDD una vez estén funcionando correctamente. De esta manera, si la próxima vez que juegues con el kernel algo no funciona, puedes arrancar desde el último kernel correcto. Esto es especialmente importante si ahora estás arrancando desde una controladora no soportada por el kernel GENERIC (si, experiencia personal).

7.2.

La compilación del kernel falla por "_hw_float is missing."

Dejame adivinar. Has borrado npx0 de tu archivo de configuración porque no tienes coprocesador matemático, no? Mal hecho :-) El dispositivo npx0 es OBLIGATORIO. Aunque no tengas coprocesador, debes incluir el dispositivo npx0

7.3.

Conflicto de interrupciones con tarjeta serie multi-port.

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

El problema en este caso es que FreeBSD tiene có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í tienes un ejemplo:

        #
        # 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
        

7.4.

?Cómo activo el soporte para discos QIC-40/80?

Necesitas "descomentar" la siguiente línea en el archivo genérico de configuración (o añadirla en tu propio archivo), añade un flags 0x1 en la línea fdc y recompila.


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
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        

A continuación, crea un nuevo dispositivo llamado /dev/ft0 entrando en el directorio /dev y ejecutando el comando:

        sh ./MAKEDEV ft0
        

Para el primer dispositivo. ft1 para el segundo y así para todos los dispositivos de este tipo que tengas.

Tendrás un dispositivo llamado /dev/ft0, al cual puedes escribir a través de un programa especial de manejo llamado ft - mira el man en ft para más detalles.

Versiones anteriores a la -current tení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 última versión del programa ft que encontrarás en /usr/src/sbin/ft en -current.

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.

Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.