Modulos linux

Anuncio
Módulos
Contenido
•
•
•
•
Kernel y módulos
Módulos
Anatomía de un módulo
Programación de un módulo
Kernel y módulos
En un sistema Linux la interacción final con dispositivos la realizan los
controladores o el Kernel. Dicho de otra forma, un dispositivo sólo podrá ser
usado si el Kernel lo soporta o si existe un controlador capaz de controlarlo y si
se configura apropiadamente para hacerlo. Por esto, los dispositivos que se
produzcan hoy, no pueden ser operados con controladores ya existentes (a
menos que los dispositivos hayan sido diseñados para ser operados con estos
---caso que para algunos dispositivos como tarjetas de sonido, tarjetas de video
o módems es poco común), por esto mismo, eventualmente, si actualiza el
hardware de su computador o si desea usar un cierto servicio del Kernel,
también deberá actualizar algún módulo o eventualmente el Kernel completo.
Aunque algunos controladores auto detectan la configuración del dispositivo,
esto no siempre ocurre y en algunos casos tendrá que probar, hasta hacer
funcionar el módulo que maneja el dispositivo.
Las fuentes en C de cada versión del Kernel cuentan con controladores para
diversos dispositivos. Cuando se compila una versión, algunos de esos
controladores pueden unirse con el Kernel mismo (estáticamente), otros
pueden dejarse como módulos para cargarse/descargarse cuando la parte
estática del Kernel este operando, otros pueden ser excluidos del proceso de
compilación (y por lo tanto no podrán ser usados ni cuando el Kernel esté
operando).
Módulos
En este contexto, módulo se refiere a un controlador de un dispositivo o
servicio que puede cargarse o descargarse cuando el usuario o algún
dispositivo lo solicitan (dinámicamente). Los módulos que se distribuyen con en
el Kernel están ubicados en el directorio /lib/modules/<versión>, donde
<versión> es la versión de su Kernel, con la extensión “.o” organizados en
directorios que indican el tipo de dispositivo o el propósito, por ejemplo: “fs”
sistema de archivos, “net” protocolos y hardware para redes.
Para lograr configurar un dispositivo controlado por un módulo, puede emplear
las herramientas del paquete modutils o modconf para:
1. Asegurar que no haya conflictos entre el dispositivo con otros y
eventualmente conocer la configuración que usa (algunos controladores
auto detectan la configuración del dispositivo, pero no todos).
2. Encontrar un módulo que pueda manejar el dispositivo.
3. Eventualmente pasar opciones al módulo de acuerdo a la configuración
del dispositivo (IRQ o dirección base).
En algunas distribuciones de Linux las herramientas del paquete modutils se
configuran en los archivos del directorio /etc/modutils (con la información de
esos archivos y de /etc/modules se genera el archivo de configuración de
módulos /etc/modules.conf). Los programas que ese paquete incluye son:
lsmod
Lista los módulos cargados, de cada uno presenta nombre, tamaño, cuenta de
usos y lista de módulos que lo usan (es equivalente a cat /proc/modules).
rmmod módulos
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.
insmod módulo [opciones]
Trata de cargar el módulo especificado. Pueden pasarse opciones específicas
para el módulo, a continuación del nombre con la sintaxis símbolo=valor (los
símbolos posibles dependen del módulo, pueden verse algunos en estas guías
o en /usr/share/modconf/descr.gz --- que es la ayuda presentada por modconf
--- o en último caso en las fuentes del módulo en los macros
MODULE_PARAM y MODULE_PARAM_DESCR). Puede indicarse una ruta no
estándar para buscar módulos estableciéndola en la variable MODPATH o en
/etc/modules.conf. Dado que los módulos se enlazan directamente con el
Kernel, deben ser compilados para una versión precisa, con la opción -f puede
evitarse el chequeo de versiones.
depmod
Como un módulo puede requerir otros, hay dependencias que deben
respetarse al cargar y descargar módulos. depmod permite calcular tales
dependencias entre varios módulos o entre todos los disponibles con la opción
-a. Por defecto depmod -a escribe las dependencias en el archivo
/lib/modules/version/modules.emp, cada línea de ese archivo tiene el nombre
de un módulo seguido del caracter ':' y los módulos de los cuales depende,
separados por espacios.
modprobe módulo opciones
Emplea la información de dependencias generada por depmod e información
de /etc/modules.conf para cargar el módulo especificado, cargando antes todos
los módulos de los cuales dependa. Para especificar el módulo basta escribir el
nombre (sin la ruta, ni la extensión .o) o uno de los alias definidos en
/etc/modutils/alias (o en otro archivo del directorio /etc/modutils). Si hay líneas
pre-install o post-install en /etc/modules.conf, modprobe puede ejecutar un
comando antes y/o después de cargar el módulo. Como opciones para cargar
el módulo usa prioritariamente las dadas en la línea de comandos y después
las especificadas en líneas de la forma options módulo opciones en el archivo
/etc/modules.conf. Puede emplear estos programas para configurar sus
módulos y puede hacer permanentes los cambios, agregando el módulo y las
opciones en el archivo /etc/modules.
Anatomía de un módulo
Para esta sección leer el artículo “Anatomy of Linux loadable kernel modules”,
el cual se encuentra en:
• http://www.ibm.com/developerworks/linux/library/l-lkm/index.html?
ca=dgr-lnxw07LinuxLKM&S_TACT=105AGX59&S_CMP=GR
Programación de un módulo
Para esta sección leer la guía “The Linux Kernel Module Programming Guide”,
esta guía se encuentra en:
• Versión en inglés:
http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html
• Versión en español:
http://www.wikilearning.com/tutorial/guia_de_programacion_de_modulos
_del_nucleo_linux-sobre_este_tutorial/9762-1
Descargar