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.
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 Genérico, 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 Genérico, 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 Genérico.
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.
Si
no hay otro sistema operativo en la máquina el administrador tendrá que
conseguir la información por su cuenta. 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.
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.
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 /boot/kernel y se pueden cargar
dinámicamente en un kernel en funcionamiento con 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.
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.
Bibliografía:
http://www.freebsd.org/doc/es_ES.ISO8859-1/books/handbook/kernelconfig.html
http://www.freebsd.org/doc/es_ES.ISO8859-1/books/handbook/x9095.html
http://www.freebsd.org/doc/es_ES.ISO8859-1/books/handbook/kernelconfig-devices.html
http://www.freebsd.org/doc/es_ES.ISO8859-1/books/handbook/kernelconfig-modules.html
http://www.freebsd.org/doc/es_ES.ISO8859-1/books/handbook/kernelconfig-building.html
http://www.freebsd.org/doc/es_ES.ISO8859-1/books/handbook/kernelconfig-config.html
http://www.freebsd.org/doc/es_ES.ISO8859-1/books/handbook/kernelconfig-trouble.html