A partir da version 3.0 de FreeBSD se introduz o kld (dynamic kernel
linker facility), o novo interface para os módulos, deixando já de lado
ao antigo LKM (Loadable Kernel Modules).
Basicamente temos 3 programas que nos servirão para levar todo isto dos módulos
em FreeBSD. Os programas são: kldload, kldunload e kldstat.
kldload: Esta é a ordem que executaremos para carregar um modulo
em concreto. Pode carregar tanto módulos .out como ELF.
kldunload: Isto nos servirá para descarregar qualquer módulo que
tenhamos carregados nesse momento.
kldstat: por ultimo, esta ordem nos mostrasse informação sobre
os módulos que temos atualmente carregados.
NOTA: Remetemos-vos às
paginas man de cada um destes comandos para obter maior detalhe de todas
suas opções disponíveis.
Os módulos que podemos carregar e que temos compilados prontos para ser usados
os encontraremos em modules /. Como exemplo vamos carregar o
modulo msdos.ko (ko é a extension por defeito dos módulos em FreeBSD
) usando cada um dos comandos explicados anteriormente para ir
familiarizandonos com eles.
O primeiro de todo é assegurar-nos se efetivamente existe o modulo msdos.ko
em nosso diretório /modules:
# ls /modules/msdos.ko
/modules/msdos.ko
Antes de carregá-lo sacaremos um kldstat para ver que temos atualmente:
# kldstat
Ide Refs Address Size
Name
1
3 0xc0100000 3021a8 kernel
3
1 0xc1279000 10000 linux.ko
4 1
0xc129d000 3000 daemon_saver.ko
Aqui podemos ver que a maquina tem atualmente 3 módulos em memória.
Normalmente estes são os módulos que tereis por defeito carregados. Se por exemplo
elegiis na instalação suporte de binários linux em FreeBSD, se vos carregará
no arranque o modulo linux.ko. Os outros dois correspondem ao
kernel e ao salvador de telas.
Agora passaremos a carregar o modulo msdos.ko que corresponde ao suporte
do sistema de arquivos msdos (FAT, FAT32...):
# kldload msdos
#
Parece que tem ido bem. Não faz defeituosa especificar a extensão .ko, é
algo optativo. Para assegurar-nos de que todo tem ido bem sacaremos de novo um kldstat:
# kldstat
Ide Refs Address Size
Name
1
4 0xc0100000 3021a8 kernel
3
1 0xc1279000 10000 linux.ko
4
1 0xc129d000 3000
daemon_saver.ko
5
1 0xc12fd000 c000
msdos.ko
Efetivamente, vemos o modulo msdos.ko além de todos os outros módulos.
A partir de agora teríamos suporte para montar partición FAT por exemplo.
Agora se desejamos descarregá-lo só teremos que utilizar kldunload:
# kldunload msdos
#
E sacámos de novo um kldstat:
# kldstat
Ide Refs Address Size
Name
1
3 0xc0100000 3021a8 kernel
3
1 0xc1279000 10000 linux.ko
4
1 0xc129d000 3000
daemon_saver.ko
Assim de fácil.
Quiçá mas de um se pergunte as vantagens de usar módulos. A principal
vantagem é a de ter um kernel mas pequeno e mas optimizado. Por defeito, o
kernel de FreeBSD vem com suporte para muitas coisas. Continuando com nosso
exemplo do modulo de msdos, FreeBSD traz suporte para o sistema de arquivos de msdos
no próprio kernel. Isto supõe que o kernel tem em memória este
suporte em todo momento, e nos momentos que não façamos nenhum tipo
de operação com alguma partición msdos estaremos malgastando espaço e memória.
O ideal é carregar o modulo de msdos quando precisemos fazer alguma operação
com este tipo de sistema de arquivos, conseguindo assim um kernel mas pequeno e
mas rápido.
Se desejamos por exemplo ativar o módulo de msdos, o primeiro que temos que
fazer, é assegurar-nos de que nosso kernel não tem suporte para
isto. Por defeito FreeBSD traz suporte para sistemas de arquivos msdos, asi que
deveremos apagar a linha que põe:
options MSDOSFS
#MS DOS File System
NOTA: É
muito importante o assegurar-nos de que quando vamos usar um modulo para dar
suporte a alguma coisa, não tenhamos já este suporte no kernel, porque se mesmo
segue no kernel não teremos ganhado nada.
Uma vez gravado e compilado o novo kernel, temos 3 alternativas para usar
os modulos. A primeira é usar 'a mão' o carregado e descarregado dos modulos
mediante os comandos que vimos antes.
A segunda é carregar o modulo msdos.ko (seguindo com o exemplo) no arranque
Se desejamos fazer isto só temos que o especificar no arquivo /boot/loader.conf.
Este arquivo carga múltiples configurações antes de iniciar-se FreeBSD.
Poremos algo asi:
msdos_load="YES"
Desta forma se carregaria o módulo só iniciar-se FreeBSD e o teríamos em todo
momento em memória.
A outra alternativa é não pôr nem carregar nada. Desta forma ao tentar montar
uma partición de msdos, e ao não ter suporte de msdos em nosso kernel, este
procurasse em modules / a ver se há algum modulo que faça esta função, e
se o encontra o carregará montando posteriormente a partición.
É algo transparente para o usuário. Assim que não teneis que vos preocupar de nada
O único que não vi, a sido que uma vez desmontada a partición o
modulo segue em memória, assim que seguramente tenhamos que desmontarlo nós
a mão uma vez deixemos de usar a partición (se é que nos importa o tê-lo
na memória claro).
NOTA: No arquivo /boot/defaults/loader.conf teneis todas
as linhas disponíveis que podeis pôr em boot //loader.conf para carregar
qualquer módulo disponível em FreeBSD.
Se deseais obter mas informação sobre os módulos remeter-vos ao manual
de kld (man kld) no que também podreis encontrar
informação referente a como programar-vos vosso próprio modulo.