Fuente: http://web.mit.edu/rhel-doc/3/rhel-sag-es-3/ch-kernel-modules.html
El kernel de Linux tiene un diseño modular. En el momento de arranque, sólo se carga un kernel residente mínimo en memoria. Por ello, cuando un usuario solicita alguna característica que no esta presente en el kernel residente, se carga dinámicamente en memoria un módulo kernel, también conocido algunas veces como un controlador.
Durante la instalación, se prueba el hardware en el sistema. Basado en esta prueba y en la información proporcionada por el usuario, el programa de instalación decide qué módulos necesita cargar en el momento de arranque. El programa de instalación configura el mecanismo de carga dinámica para que funcione de forma transparente.
Si se añade un nuevo hardware después de la instalación y este requiere un módulo kernel, el sistema debe ser configurado para cargar el módulo adecuado para el nuevo hardware. Cuando el sistema es arrancado con el nuevo hardware, se ejecuta el programa Kudzu detecta el nuevo hardware si es soportado y configura el módulo necesario para él. El módulo tambíen puede ser especificado manualmente modificando el archivo de configuración del módulo, /etc/modules.conf.
![]() |
Nota |
---|---|
Los módulos de tarjetas de vídeo usados para desplegar la interfaz del sistema X Window son parte del paquete XFree86, no del kernel; por lo tanto, este capítulo no se aplica a ellos. |
Por ejemplo, si un sistema incluye un adaptador de red SMC EtherPower 10 PCI, el archivo de configuración del módulo contiene la línea siguiente:
alias eth0 tulip |
Si una segunda tarjeta de red es añadida al sistema y es idéntica a la primera tarjeta, añada la línea siguiente al archivo /etc/modules.conf:
alias eth1 tulip |
Consulte el Manual de referencia de Red Hat Enterprise Linux para una lista alfabética de módulos de kernel y hardware soportado por los módulos.
Nota: Kernels antiguos.
40.1. Utilidades del módulo del kernel
Está disponible un grupo de comandos para el manejo de módulos kernel si el paquete modutils está instalado. Use estos comandos para determinar si un módulo ha sido cargado exitósamente o cuando se esté probando módulos diferentes para una nueva pieza de hardware.
El comando /sbin/lsmod muestra una lista de los módulos cargados actualmente. Por ejemplo:
Module Size Used by Not tainted iptable_filter 2412 0 (autoclean) (unused) ip_tables 15864 1 [iptable_filter] nfs 84632 1 (autoclean) lockd 59536 1 (autoclean) [nfs] sunrpc 87452 1 (autoclean) [nfs lockd] soundcore 7044 0 (autoclean) ide-cd 35836 0 (autoclean) cdrom 34144 0 (autoclean) [ide-cd] parport_pc 19204 1 (autoclean) lp 9188 0 (autoclean) parport 39072 1 (autoclean) [parport_pc lp] autofs 13692 0 (autoclean) (unused) e100 62148 1 microcode 5184 0 (autoclean) keybdev 2976 0 (unused) mousedev 5656 1 hid 22308 0 (unused) input 6208 0 [keybdev mousedev hid] usb-uhci 27468 0 (unused) usbcore 82752 1 [hid usb-uhci] ext3 91464 2 jbd 56336 2 [ext3] |
Por cada línea, la primera columna es el nombre del módulo, la segunda columna es el tamaño del módulo y la tercera es el recuento de usos.
La información después del recuento de usos varía un poco por módulo. Si se lista (unused) en la línea del módulo, el módulo no está siendo usado actualmente. Si (autoclean) está en la línea para el módulo, este puede ser limpiado automáticamente por el comando rmmod -a. Cuando se ejecuta este comando, cualquier módulo que este etiquetado con autoclean, que no ha sido usado desde la acción previa de autoclean, será descargado. Red Hat Enterprise Linux no realiza esta acción de autoclean por defecto.
Si el nombre de un módulo esta listado al final de la línea entre corchetes, el módulo entre corchetes es dependiente del módulo listado en la primera columna de la línea. Por ejemplo, en la línea
usbcore 82752 1 [hid usb-uhci] |
los módulo del kernel hid usb-uhci dependen del módulo usbcore.
La salida /sbin/lsmod es la misma que la salida de /proc/modules.
Para cargar un módulo del kernel, use el comando /sbin/modprobe seguido del nombre del módulo. Por defecto, modprobe intenta cargar el módulo desde los subdirectorios/lib/modules/<kernel-version>/kernel/drivers/. Hay un subdirectorio para cada tipo de módulo, tal como el subdirectorio net/ para los controladores de interfaces de red. Algunos módulos del kernel tienen dependencias, es decir que otros módulos deben ser cargados antes para que el otro se cargue. El comando /sbin/modprobe verifica estas dependencias y carga los módulos necesarios antes de cargar el módulo específico.
Por ejemplo, el comando
/sbin/modprobe hid |
carga cualquier dependencia de módulos y luego el módulo hid.
Para imprimir a la pantalla todos los comandos a medida en que /sbin/modprobe los ejecuta, use la opción -v. Por ejemplo:
/sbin/modprobe -v hid |
Se despliega una salida similar a lo siguiente:
/sbin/insmod /lib/modules/2.4.21-1.1931.2.399.ent/kernel/drivers/usb/hid.o Using /lib/modules/2.4.21-1.1931.2.399.ent/kernel/drivers/usb/hid.o Symbol version prefix 'smp_' |
El comando /sbin/insmod también existe para cargar módulos kernel; sin embargo no resuelve dependencias. Por ello se recomienda el uso de /sbin/modprobe.
Para descargar módulos del kernel, use el comando /sbin/rmmod seguido por el nombre del módulo. La utilidad rmmod sólo descarga módulos que ya no son usados y que no son una dependencia de otro módulo en uso.
Por ejemplo, el comando
/sbin/rmmod hid |
baja el módulo del kernel hid.
Otra utilidad muy conveniente es modinfo. Use el comando /sbin/modinfo para mostrar información sobre el módulo del kernel. La sintaxis general es:
/sbin/modinfo [options] <module> |
Las opciones incluyen -d, lo cual muestra una breve descripción del módulo, y -p lo que lista los parámetros que el módulo soporta. Para una lista completa de las opciones, consulte la página del manual de modinfo (man modinfo).