sábado, 9 de junio de 2012

Manéjo de módulos




Esta entrada es una explicación rápida y lo mas breve posible sobre el uso de módulos dinámicos en linux.

Por favor, no estoy muy fino en esto, y si cometo algún error ruego a que me lo comentéis para modificar el texto, al fin y al cabo esto lo hago para ayudar y para que todos podamos aprender de una forma menos compleja de lo necesario y no quiero liar a nadie.






Antes de nada, ¿Que es un módulo?

En Linux, los módulos son archivos con extensión '.so' (shared objects) que vienen a significar "Objetos compartidos"

Estos módulos sirven para especificar como funciona determinado hardware, digamos que es el equivalente a las DLL de Microsoft, en castellano.... son los controladores, los drivers o como queráis llamarlo.

En Linux hay dos tipos de módulos.
-Estáticos
-Dinámicos

Los módulos estáticos son los módulos con los que se ha compilado el núcleo de Linux, es decir, el Kernel, de manera que el núcleo conocerá como funcionan las cosas que valla reconociendo (Hardware) porque ya tiene los módulos disponibles en su interior.

Y los dinámicos son módulos que se cargan con posteridad desde el mismo disco duro.

Y diréis, pero vaya chorrada, ¿porqué no los meten todos juntos dentro del núcleo?

Pues porque a veces es necesario deshabilitar alguno, o habilitar varios, o cargar uno mas antiguo que no hay.... etc

¿Quieres liarte a recompilar el kernel de linux a cada rato que tengas que quitar un módulo?

Para eso están los módulos dinámicos.

Estos se cargan desde el disco duro, y permiten hacer conocer al núcleo de linux el funcionamiento de determinado hardware.
La mayor ventaja es que se pueden cargar en frío, sin necesidad de reiniciar y de efecto inmediato.

Por ejemplo, hay un módulo que se encarga de hacer funcionar el altavoz interno del pc, y hace emitir un 'bep' cuanto llegas al tope en un texto, o cuando presionas tabulador y no hay opciones a mostrar....

Puede llegar a ser molesto si no se requiere, así que la solución es quitar el módulo.....


Manejos de módulos

lsmod > listar módulos
modprobe nombre-modulo > añadir módulo
modprobe -r nombre-modulo > eliminar módulo


¿Qué módulos hay cargado en mi sistema?

Para ver los módulos cargados actualmente se puede usar  lsmod que es una herramienta que ya tendrás instalada en tu sistema, pues es una muy usada y viene instalada por defecto en todos los sistemas al menos en los basados en Debian.

Así que para verlos puedes usar ese comando como usuario normal.

scorpyomint@pc-citomint ~ $ lsmod

Te listará una serie de módulos cargados.

Sí, son muchos módulos y a lo mejor quieres encontrar uno en concreto, como por ejemplo el que se encarga del pitido molesto que he comentado antes que sale del altavoz interno, para eso hay que filtrar un poco el comando anterior con 'grep' para buscar el módulo pcspkr (pc speaker)

scorpyomint@pc-citomint ~ $ lsmod | grep pcspkr

Si obtenemos un resultado con ese nombre es que el módulo está cargado.
Para quitarlo es tan facil como hacer un:

scorpyomint@pc-citomint ~ $ sudo modprobe -r pcspkr

Si tras eso volvéis a comprobar si el módulo está cargado veréis como el módulo ya no está y no os aparecerá nada.
De hecho, ya no debe de pitar, el efecto es con caracter inmediato.

Si por cualquier motivo quisierais volverlo a poner habría que hacer uso del mismo comando pero sin -r (remover)

scorpyomint@pc-citomint ~ $ sudo modprobe pcspkr


Ahora tenéis otra vez el módulo cargado.


Estos cambios tanto los de cargar un módulo como los de borrar uno que ya esté puesto ahí por el sistema no son permanentes, pues cuando el ordenador encienda se volverán a activar los módulos por defecto que teníais.




Módulos al inicio

Para cargar un módulo a cada inicio hay que añadirlo al archivo /etc/modules como administrador.

Así que en una terminal ponéis:

scorpyomint@pc-citomint ~ $ sudo nano /etc/modules nota: Yo he usado el editor nano, pero podéis usar gedit o cualquir otro editor que os guste.

Y obtendréis algo como:
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

loop
Solo tendréis que añadir el módulo que queréis cargar al inicio del sistema, por ejemplo el módulo con el que estamos jugando...: pcspkr

Quedaría así:

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

loop
pcspkr

Guaráis y listo, al inicio os cargará los módulos que le pongáis.



Lista negra

Si queréis hacer lo contrario, por ejemplo impedir que cargue un módulo, hay que crear una lista negra.

Vamos a crear una... jejjee

El directorio donde tenemos que crear la lista negra es: /etc/modprobe.d/

Yo la llamaré "mi-lista-negra.conf"

scorpyomint@pc-citomint ~ $ sudo nano /etc/modprobe.d/mi-lista-negra.conf

Nota: De nuevo uso nano, pero podéis usar gedit, pluma u otro si lo preferís.

Dentro ponéis lo siguiente:

# Aquí pondré los módulos que me interesen mandar un poquito a la mierda...

blacklist pcspkr
Las líneas que comienzan con # son ignoradas por el sistema y se usan para poner notas o títulos.

La segunda línea es la que manda a la lista negra el módulo pcspkr.

Podemos añadir tantas como necesitemos.

Guardáis y listo.
Para ver los efectos hay que reiniciar.

Esto es lo básico sobre módulos, espero que os sirva.

Un saludo.

No hay comentarios:

Publicar un comentario

Deja aquí tu mensaje...