módulos del kernel
DESCRIPTION
Realizado por Kepa Bengoetxea. Módulos del Kernel. Referencia. http://www.ubuntulinux.org/wiki/KernelHowto http://www.tldp.org/HOWTO/Module-HOWTO/index.html Información sobre el kernel: http://www.kernelnewbies.org http://www.escomposlinux.org/wwol26/wwol26.html kernel-COMO: - PowerPoint PPT PresentationTRANSCRIPT
Módulos del Kernel
Realizado por Kepa Bengoetxea
Referenciahttp://www.ubuntulinux.org/wiki/KernelHowto
http://www.tldp.org/HOWTO/Module-HOWTO/index.html
Información sobre el kernel:http://www.kernelnewbies.org
http://www.escomposlinux.org/wwol26/wwol26.html
kernel-COMO:
http://es.tldp.org/COMO-INSFLUG/COMOs/Kernel-Como/Kernel-Como-1.html
Libro sobre el Núcleo: http://www.tldp.org/LDP/tlk/tlk.html
Donde conseguir las fuentes del núcleo: http://www.kernel.org/
Núcleo Monolítico
Un Núcleo monolítico es el núcleo o kernel de un sistema
operativo grande y complejo, que engloba todos los servicios del
sistema. Ejm:UNIX
Núcleo Monolítico Híbrido
Actualmente Linux es un núcleo monolítico híbrido.
Los controladores de dispositivos y las extensiones del núcleo
normalmente se ejecutan en un espacio privilegiado conocido
como anillo 0 (ring 0), con acceso sin restricciones al hardware
Núcleo Monolítico Híbrido
A diferencia de los núcleos monolíticos tradicionales, los
controladores de dispositivos y las extensiones al sistema
operativo se pueden cargar y descargar fácilmente como módulos,
mientras el sistema continúa funcionando sin interrupciones.
¿Qué es un módulo cargable? 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.
Kmod se encargará de cargarlos y descargarlos por nosotros cuando el sistema los necesite. Ejm: controladores de dispositivos PCMCIA o de cintas QIC-80/40.
¿Qué es un módulo cargable? Estos controladores o módulos del núcleo se compilan por
separado “make modules” (no se compilan con el núcleo: make bzImage) y se incorporan al núcleo que ya está corriendo cuando son necesarios.
Hoy en día la tendencia es “crear y elegir como módulo” todos los controladores (drivers) posibles, salvo aquellos estrictamente necesarios para arrancar el sistema (ext2, ext3, IDE/ATA, SCSI, según el caso).
Aunque siempre se puede hacer una imagen initrd(initial ramdisk) que se encargue de cargar aquellos módulos necesarios que no hemos seleccionado como parte residente del kernel y son necesarios para arrancar el sistema.
Módulos del kernel GRUB cargan el kernel y el initrd en memoria para luego poder
montar el sistema de ficheros root que esta en el disco duro. El resto de módulos se cargarán cuando un usuario solicite algún
controlador ( Ejm: solicita conexión por modem se carga un módulo kernel PPP dinámicamente.)
En el programa de instalación se decide qué módulos necesita cargar en el momento de arranque según el HW detectado.
Si se añade un nuevo hardware después de la instalación, este requiere un módulo kernel, el sistema debe ser configurado para cargar el módulo adecuado para el nuevo hardware.
Módulos del kernel Ubuntu permite habilitar y configurar los módulos necesarios
mediante la utilidad modconf.
$sudo modconf
Si no está instalado:
$sudo aptitude install modconf
Nota:Los módulos de tarjetas de vídeo usados para desplegar la interfaz del sistema X Window son parte del paquete XFree86 o Xorg, no del kernel; por lo tanto, este capítulo no se aplica a ellos
Carga Manualemente:Sin parámetros También se puede realizar la carga de módulos editando
manualmente los siguientes archivos: Ejm: Si se incluye un adaptador de red SMC EtherPower 10 PCI
cuyo controlador se llama tulip
A)Añadir en /etc/modules :
tulip
B)Editar /etc/rc.local
/usr/sbin/modprobe tulip
Carga Manualemente:Con parámetros Ejm:cargar controlador de los ventiladores del portátil A) Créate el fichero
Añade la siguiente línea al fichero /etc/modules:
i8k
Y añadimos las opciones en:
vi /etc/modprobe.d/i8k.modprobe
options i8k force=1
Carga Manualemente:Con parámetros Ejm: Cargar controlador de los ventiladores del portátil B) Editar /etc/rc.local
/usr/sbin/modprobe i8k force=1
Módulos del kernel Paquete para la gestión de módulos del kernel: module-init-tools
El comando /sbin/lsmod muestra una lista de los módulos
cargados actualmente donde 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. Si el nombre de un módulo esta listado al final de la línea , el módulo es dependiente del módulo listado en la primera columna de la línea.
Por ejemplo, en la línea:
mbcache 9604 1 ext3
Módulos del kernel Obtener información del módulo.Ejm:
/sbin/modinfo ext3
filename: /lib/modules/2.6.20-16-generic/kernel/fs/ext3/ext3.ko
license: GPL
description: Second Extended Filesystem with journaling extensions
author: Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others
srcversion: 7F25BA0D0A1B9A2A8F43C49
depends: mbcache,jbd
vermagic: 2.6.20-16-generic SMP mod_unload 586
Módulos del kernel
Para descargar módulos de memoria: /sbin/rmmod .
Ejm: No esta en usosudo /sbin/rmmod fan
Ejm:Esta en usolsmod
bluetooth 55908 7 rfcomm,l2cap,hci_usb
sudo rmmod bluetooth
ERROR: Module bluetooth is in use by rfcomm,l2cap,hci_usb
Módulos del kernel Para cargar un módulo (sin dependencias) del kernel .Ejm:
sudo insmod /lib/modules/2.6.20-16-generic/kernel/drivers/acpi/fan.ko
Módulos están /lib/modules/<kernel-version>/kernel/drivers/
Módulos del kernel Para cargar un módulo (con/sin dependencias) del kernel . Ejm:sudo modprobe fan (sin dependencias) Ejm:sudo modprobe l2cap (con dependencias)
modinfo l2cap
filename: /lib/modules/2.6.20-16-generic/.../l2cap.ko
alias: bt-proto-0
description: Bluetooth L2CAP ver 2.8
author: Maxim Krasnyansky
depends: bluetooth
Módulos del kernel /sbin/modprobe carga los módulos dependientes bluetooth y
luego carga l2cap modprobe espera que el fichero “/lib/modules/`uname
-r`/modules.dep” este debidamente actualizado con las dependencias que existen entre los módulos. Este fichero se actualiza con el comando “depmod -a”
Ejm: less /lib/modules/`uname -r`/modules.dep | grep vfat
/lib/modules/2.6.20-16-generic/kernel/fs/vfat/vfat.ko: /lib/modules/2.6.20-16-generic/kernel/fs/fat/fat.ko
man modprobe y man depmod
¿Por qué un driver solo funciona para el kernel para el que ha compilado?
Si un módulo ha sido compilado con los ficheros cabecera de un kernel, y al actualizar el kernel deja de funcionar puede ser porque:
a)los ficheros cabecera y los parámetros de las funciones de la librería han cambiado en número o tipo con el nuevo kernel.
b)el kernel ha sido compilado con la característica CONFIG_MODVERSIONS deshabilitada.
less /boot/config* | grep CONFIG_MODVERSIONS
CONFIG_MODVERSIONS=y