1.-C) Arquitectura del sistema Linux LPIC-1

Lsmod
En Linux el hardware está administrado por los drivers del kernel que viene como módulos del kernel.
Son ficheros independientes que se cargan y se descargan para dar acceso al hardware y estan almacenados en /lib/modules
Normalmente se cargan al inicio pero puede ser que quieras cargar alguno después.
$Lsmod
lsmod | sort–> sort lo usamos para ordenar.
Module Size Used by
ac 1640 0
ac97_bus 710 1 snd_ac97_codec
acpiphp 13281 0
ata_generic 2247 0
ata_piix 17704 0
auth_rpcgss 25200 1 nfsd
binfmt_misc 4875 1
bluetooth 36251 6 sco,rfcomm,bnep,l2cap
bnep 7384 2
bridge 32883 0
button 3598 0
cdrom 26487 1 sr_mod
omitimos el resto del resultado.

Como se puede ver algunos son sencillos de reconocer como el cdrom o el ac97 para audio.
La última columna nos indica que modulo es dependiente del de la primera columna. No podemos parar el módulo principal sino paramos antes el dependiente que aparece en la segunda, ya que en algún punto de la lista aparecera en la primera columna como módulo.
El valor 1 nos indica que esta en uso y el valor 0 que no está en uso.

Insmod, modprobe

Hoy en día linux carga los módulos automáticamente y no hace falta usar estos comandos, aunque pueden ser útiles para solucionar problemas de carga automática.

Con insmod debemos tener el modulo de los que depende ya descargados para poder usarlos, con modprobe cargamos ya los módulos de los que depende automáticamente, por lo tanto es el que de usar, usaríamos.

Por ejemplo: #modprobe floppy

Es sencillo su uso, modprobe seguido del módulo a cargar.

Con insmod necesitariamos floppy y floppy.ko y mirar documentación para saber que dependencias tiene cada modulo, como por ejemplo si queremos cargar un RS232 o puerto COM al Kernel.

Podemos simular el uso de modprobe para no insertar el modulo en el kernel de manera real y poder coprobar si tendría algun efecto perjudicial como desactivarnos el disco.

-a Cargar todos los módulos que coincidan con el sumistrado como argumento

-l Listar todos los módulos que coincidan

-r Quitar módulo con sus paquetes de dependencias

Para ver mas modificadores de modprobe hacer: #man modprobe

Durante el arranque del sistema modprobe revisa el contenido de tres objetos del sistema de archivos de Linux:

  • el directorio  /lib/modules/`uname -r` donde se encuentran los módulos del kernel y archivos relacionados para el kernel en uso.
  • el archivo de texto /etc/modules que contiene la lista de módulos opcionales que deben cargarse al kernel por omisión y
  • la lista negra, que es un archivo de texto ubicado en  /etc/modprobe.d/blacklist que contiene la lista de módulos que no deben cargarse al kernel bajo ninguna circunstancia

Modprobe usa el fichero /etc/modules.conf  que podemos editar en algunas distribuciones, debian usa /etc/modules descrito más arriba.

#rmmod

Nos permite borrar módulos, aunque viene en la documentación y en los libros oficiales, no hemos visto que aparezca en los exámenes de certificación pero esta bien saber para que sirve y algun modificador que le acompañe.

Descarga uno o más módulos cargados, mientras estos no estén siendo usados.  Con la opción -r intenta descargar recursivamente módulos de los cuales el módulo especificado dependa.  El comando rmmod -a descarga todos los módulos que no estén siendo usados y no tengan dependencias, sin embargo modprobe -r borra el módulo apoyándose también en la tabla de dependencias y los modulos que dependan de él siempre que no se esten utilizando.

A partir de aqui, ya no es motivo de certificación, pero si nos viene bien para ir entendiendo Linux y preparandonos para la LPIC-2 que consta de otros dos exámenes.
MÓDULOS DEL NÚCLEO

Hay componentes del núcleo que siempre tienen que estar en memoria como el planificador de la CPU.
Sin embargo otros componentes solo tienen que estar en memoria cuando se necesitan, como el manejador de un CDWriter; un sistema de ficheros Minix, NFS; un manejador de protocolo PPP.

Estas partes del núcleo que pueden cargarse o descargarse dinámicamente en memoria, mientras el núcleo se esta ejecutando se llaman MÓDULOS.
Ventajas de los módulos
La incorporación de nuevos manejadores al núcleo es mas fácil, se pueden compilar, cargar, probar, o quitar como módulos antes de integrarlos en el núcleo.

Si el manejador está integrado en el núcleo, cada vez que hagamos modificaciones en el manejador hay que recompilar todo el núcleo y reiniciar.
El núcleo no ocupa tanta memoria principal, quedando libre para las aplicaciones.

Desventajas
Cada vez que se requiere o ya no se necesita un módulo hay que pagar el coste de leer o escribir en disco.
El código del núcleo se incrementa con el sistema de manejo de módulos.
La opción que activa que el núcleo maneje los módulos es:
Enable loadable module suport (CONFIG_MODULES) [Y/n/?]
Si se desea instalar un componente como módulo, hay que declararlo en la configuración del núcleo, ejemplo instalar el sistema de ficheros MSDOS.
DOS FAT fs support (CONFIG_FAT_FS) [M/n/y/?] M
MSDOS fs support (CONFIG_MSDOS_FS) [M/n/y/?] M
VFAT (Windows-98) fs support (CONFIG_VFAT_FS) [m/n/y/?] M
Una vez compilado el núcleo se compilan los módulos, la secuencia puede ser:
make config
make dep
make clean
make zImage
make modules
make modules_install
Finalizado este proceso, los módulos se encuentran el /lib/modules.
Los módulos se compilan como cualquier programa pero son enlazados como imágenes recargables, esto es no están asociadas a ninguna dirección.
Podemos ver los símbolos exportados por el núcleo en /proc/ksyms o utilizando el comando ksyms.

Cada módulo debe contener unos procedimientos que los manejan, incluyendo uno de inicialización cuando se carga el módulo y otro de borrado cuando se quita del núcleo.

Los comandos del super usuario para manejar manualmente los módulos son:
insmod – instalar un módulo
lsmod – lee el contenido de /proc/modules y muestra los módulos cargados en memoria, (nombre, número de páginas del módulo y procesos que los utilizan).
ejemplo de listado al ejecutar lsmod
Module: #pages: Used by:
msdos 2 1 (autoclean)
vfat 4 1 (autoclean)
fat 6 [vfat msdos] 2 (autoclean)

rmmod – quitar un módulo

Carga automática de módulos por demanda del núcleo
Cuando se monta un sistema de ficheros que no está integrado en el núcleo, el núcleo solicita al programa kerneld que cargue los módulos necesarios para este sistema de ficheros montado.

La carga dinámica y automática de módulos precisa que se compile el núcleo con la opción CONFIG_KERNELD y los IPC System V.

Se precisa al arrancar el sistema lanzar el programa demonio kerneld, que lee las peticiones del núcleo y realiza la carga o descarga de los módulos necesarios. Se ejecuta como un proceso de usuario y establece un canal de comunicación basado en mensajes (IPC) con el núcleo, por el cual el núcleo solicita mediante mensajes un modulo al programa modprobe.
Se utilizan los programas depmod y modprobe.

DEPMOD, genera un archivo de dependencias de los símbolos encontrados en los módulos.
MODPROBE, es el programa para manejo de módulos, requiere privilegios de root.

Los procedimientos del núcleo que interaccionan con modprobe y la estructura de datos principal, (se encuentran en include/linux/module.h y kernel/module.c) son:
request_module

Es la función llamada por el núcleo cuando este percibe, por la solicitud de un proceso, la necesidad de cargar un módulo.
exec_modprobe, es el programa que añade el módulo solicitado al núcleo, es llamado por kerneld.
struct module (omitimos el contenido)
request_module (omitimos el contenido)

Los ficheros que tratan con los módulos son:
incluye/linux/module.h
kernel/module.c
Contienen la estructura struc module y las llamadas al sistema utilizadas por modprobe y los comandos insmod, lsmod y rmmod son:
sys_create_module
sys_init_module
sys_delete_module
sys_get_kernel_syms

Publicado el noviembre 22, 2011 en Linux y etiquetado en , . Guarda el enlace permanente. Deja un comentario.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: