Autor: Koji
Fecha: 16/09/2000

Módulos en FreeBSD


A partir de la version 3.0 de FreeBSD se introduce el kld (dynamic kernel linker facility), el nuevo interface para los módulos, dejando ya de lado al antiguo LKM (Loadable Kernel Modules).

Basicamente tenemos 3 programas que nos servirán para llevar todo esto de los módulos en FreeBSD. Los programas son: kldload, kldunload y kldstat.

kldload: Esta es la orden que ejecutaremos para cargar un modulo en concreto. Puede cargar tanto módulos .out como ELF.

kldunload: Esto nos servirá para descargar cualquier módulo que tengamos cargados en ese momento.

kldstat: por ultimo, esta orden nos mostrara información sobre los módulos que tenemos actualmente cargados.


Website templates are pre-designed websites all you need to do is add your own personal content and you're ready to jump start your own website. Website templates by Vooweb

NOTA: Os remitimos a las paginas man de cada uno de estos comandos para obtener mayor detalle de todas sus opciones disponibles.

Los módulos que podemos cargar y que tenemos compilados listos para ser usados los encontraremos en /modules. Como ejemplo vamos a cargar el modulo msdos.ko (ko es la extension por defecto de los módulos en FreeBSD) usando cada uno de los comandos explicados anteriormente para ir familiarizandonos con ellos.

Lo primero de todo es asegurarnos si efectivamente existe el modulo msdos.ko en nuestro directorio /modules:

# ls /modules/msdos.ko
/modules/msdos.ko


Antes de cargarlo sacaremos un kldstat para ver que tenemos actualmente:

# kldstat
Id Refs Address    Size     Name
 1    3 0xca8   kernel
 3    1 0xc    linux.ko
 4    1 0xc129d000 3000     daemon_saver.ko


Aquí podemos ver que la maquina tiene actualmente 3 módulos en memoria. Normalmente estos son los módulos que tendréis por defecto cargados. Si por ejemplo elegiis en la instalación soporte de binarios linux en FreeBSD, se os cargará en el arranque el modulo linux.ko. Los otros dos corresponden al kernel y al salvador de pantallas.

Ahora pasaremos a cargar el modulo msdos.ko que corresponde al soporte del sistema de archivos msdos (FAT, FAT32...):

# kldload msdos
#

Parece que ha ido bien. No hace falta especificar la extensión .ko, es algo optativo. Para asegurarnos de que todo ha ido bien sacaremos de nuevo un kldstat:

# kldstat
Id Refs Address    Size     Name
 1    4 0xca8   kernel
 3    1 0xc    linux.ko
 4    1 0xc129d000 3000     daemon_saver.ko
 5    1 0xc12fd000 c000     msdos.ko


Efectivamente, vemos el modulo msdos.ko además de todos los otros módulos. A partir de ahora tendríamos soporte para montar partición FAT por ejemplo.

Ahora si deseamos descargarlo solo tendremos que utilizar kldunload:

# kldunload msdos
#

Y sacamos de nuevo un kldstat:

# kldstat
Id Refs Address    Size     Name
 1    3 0xca8   kernel
 3    1 0xc    linux.ko
 4    1 0xc129d000 3000     daemon_saver.ko


Así de fácil.

Quizá mas de uno se pregunte las ventajas de usar módulos. La principal ventaja es la de tener un kernel mas pequeño y mas optimizado. Por defecto, el kernel de FreeBSD viene con soporte para muchas cosas. Continuando con nuestro ejemplo del modulo de msdos, FreeBSD trae soporte para el sistema de archivos de msdos en el propio kernel. Esto supone que el kernel tiene en memoria este soporte en todo momento, y en los momentos que no hagamos ningún tipo de operación con alguna partición msdos estaremos malgastando espacio y memoria.

Lo ideal es cargar el modulo de msdos cuando necesitemos hacer alguna operación con este tipo de sistema de archivos, consiguiendo así un kernel mas pequeño y mas rápido.

Si deseamos por ejemplo activar el módulo de msdos, lo primero que tenemos que hacer, es asegurarnos de que nuestro kernel no tiene soporte para esto. Por defecto FreeBSD trae soporte para sistemas de archivos msdos, asi que deberemos borrar la línea que pone:

options         MSDOSFS                 #MS DOS File System

NOTA: Es muy importante el asegurarnos de que cuando vayamos a usar un modulo para dar soporte a alguna cosa, no tengamos ya este soporte en el kernel, porque si aun sigue en el kernel no habremos ganado nada.

Una vez grabado y compilado el nuevo kernel, tenemos 3 alternativas para usar los modulos. La primera es usar 'a mano' el cargado y descargado de los modulos mediante los comandos que hemos visto antes.

La segunda es cargar el modulo msdos.ko (siguiendo con el ejemplo) en el arranque. Si deseamos hacer esto solo tenemos que especificarlo en el archivo /boot/loader.conf. Este archivo carga múltiples configuraciones antes de iniciarse FreeBSD. Pondremos algo asi:

msdos_load="YES"

De esta forma se cargaría el módulo solo iniciarse FreeBSD y lo tendríamos en todo momento en memoria.

La otra alternativa es no poner ni cargar nada. De esta forma al intentar montar una partición de msdos, y al no tener soporte de msdos en nuestro kernel, éste buscara en /modules a ver si hay algún modulo que haga esta función, y si lo encuentra lo cargará montando posteriormente la partición.

Es algo transparente para el usuario. Así que no teneis que preocuparos de nada. Lo único que no he visto, a sido que una vez desmontada la partición el modulo sigue en memoria, así que seguramente tengamos que desmontarlo nosotros a mano una vez dejemos de usar la partición (si es que nos importa el tenerlo en la memoria claro).

NOTA: En el archivo /boot/defaults/loader.conf teneis todas las líneas disponibles que podeis poner en /boot/loader.conf para cargar cualquier módulo disponible en FreeBSD.

 Si deseais obtener mas información sobre los módulos remitiros al manual de kld (man kld) en el que también
podreis encontrar información referente a como programaros vuestro propio modulo.

eldemonio.org El site BSD en Castellano Articles catalogue

Website templates are pre-designed websites all you need to do is add your own personal content and you're ready to jump start your own website. Website templates by Vooweb

eldemonio.org v 4_2