Administración de módulos del kernel

En este tutorial se verán los comandos necesarios para administrar los módulos del kernel.

Tabla de contenidos

Lista resumen
  • lsmod Muestra los módulos actualmente cargados en el sistema.
  • depmod Reconstruye la base de datos de dependencias de los módulos (modules.dep) y la tabla de símbolos (System.map) que utiliza el kernel.
  • ls -R /lib/modules/$(uname -r) | grep -C1 .ko Lista todos los módulos disponibles para el kernel en ejecución.
  • modinfo modulo Muestra información sobre el módulo indicado.
  • insmod /ruta/modulo.ko Carga el módulo indicado en el kernel en ejecución. No maneja dependencias, por este motivo se recomienda el uso de modprobe.
  • rmmod modulo Descarga el módulo indicado del kernel en ejecución. No resuelve dependencias, por este motivo se recomienda el uso de modprobe.
  • modprobe modulo Carga el módulo indicado, así como todas sus dependencias, en el kernel en ejecución.
  • modprobe -r modulo Descarga el módulo indicado, así como todas sus dependencias, del kernel en ejecución.
  • modprobe -nv modulo Muestra los comandos insmod a ejecutar para cargar el módulo indicado así como todas sus dependencias. Es un comando útil para diagnosticar problemas de dependencias al cargar un módulo con modprobe.


lsmod
Muestra los módulos actualmente cargados por el sistema, el tamaño y los usuarios del mismo. Para lo cual accede, limpia y muestra por consola el contenido de /proc/modules, [+/-] ver salida de cat /proc/modules
agd-desktop # lsmod
Module                  Size  Used by
sco                     8326  2
nvidia              10482236  40
sr_mod                 12680  0
cdrom                  34470  1 sr_mod
r8168                 183402  0
agd-desktop #

En el ejemplo, se observan muy pocos módulos cargados por el sistema. Esto se debe a que el kernel ha sido compilado expresamente para la máquina en la cual se ejecuta, tratando de eliminar todos los componentes innecesarios, y en la mayoría de los casos compilando dentro del propio kernel en lugar de como módulo. Por este motivo, si usted usa un kernel compilado automáticamente por una herramienta, como por ejemplo sys-kernel/genkernel, o bien compilado por su distribución, su salida será bastante más extensa. [+/-] Ver salida de un ordenador con Ubuntu

Al analizar una de las líneas de esta salida, como por ejemplo la línea cdrom 34470 1 sr_mod podemos observar cuatro campos:
  • Nombre del módulo, en el ejemplo cdrom.
  • Tamaño en bytes, en el ejemplo 34470.
  • Cantidad de usuarios accediendo al módulo, en el ejemplo 1.
  • Módulos que a su vez hacen uso de dicho módulo, en el ejemplo sr_mod


depmod
Reconstruye la base de datos de dependencias de los módulos (modules.dep) y la tabla de símbolos (System.map) que utiliza el kernel. Las dependencias de los módulos se guardan en el archivo modules.dep localizado en /lib/modules/versión-del-kernel/. A continuación puede ver la lista de archivos generados por depmod:
agd-desktop # ls /lib/modules/2.6.38-gentoo-r6-agd/mod*
/lib/modules/2.6.38-gentoo-r6-agd/modules.alias
/lib/modules/2.6.38-gentoo-r6-agd/modules.alias.bin
/lib/modules/2.6.38-gentoo-r6-agd/modules.builtin
/lib/modules/2.6.38-gentoo-r6-agd/modules.builtin.bin
/lib/modules/2.6.38-gentoo-r6-agd/modules.ccwmap
/lib/modules/2.6.38-gentoo-r6-agd/modules.dep
/lib/modules/2.6.38-gentoo-r6-agd/modules.dep.bin
/lib/modules/2.6.38-gentoo-r6-agd/modules.devname
/lib/modules/2.6.38-gentoo-r6-agd/modules.ieee1394map
/lib/modules/2.6.38-gentoo-r6-agd/modules.inputmap
/lib/modules/2.6.38-gentoo-r6-agd/modules.isapnpmap
/lib/modules/2.6.38-gentoo-r6-agd/modules.ofmap
/lib/modules/2.6.38-gentoo-r6-agd/modules.order
/lib/modules/2.6.38-gentoo-r6-agd/modules.pcimap
/lib/modules/2.6.38-gentoo-r6-agd/modules.seriomap
/lib/modules/2.6.38-gentoo-r6-agd/modules.softdep
/lib/modules/2.6.38-gentoo-r6-agd/modules.symbols
/lib/modules/2.6.38-gentoo-r6-agd/modules.symbols.bin
/lib/modules/2.6.38-gentoo-r6-agd/modules.usbmap
agd-desktop #


ls -R /lib/modules/$(uname -r) | grep -C1 .ko
Lista todos los módulos disponibles para el kernel en ejecución. [+/-] Ver ejemplo

modinfo
Muestra información sobre el módulo indicado. A continuación podrá ver un ejemplo de uso de modinfo:
agd-desktop # modinfo vfat
filename:       /lib/modules/2.6.38-gentoo-r6-agd/kernel/fs/fat/vfat.ko
author:         Gordon Chaffee
description:    VFAT filesystem support
license:        GPL
depends:        fat
vermagic:       2.6.38-gentoo-r6-agd SMP mod_unload
agd-desktop #

Como puede observar, la salida de modinfo incluye la siguiente información:
  • Ruta completa, en el ejemplo /lib/modules/2.6.38-gentoo-r6-agd/kernel/fs/fat/vfat.ko
  • Autor, en el ejemplo Gordon Chaffee
  • Descripción, en el ejemplo VFAT filesystem support
  • Licencia, en el ejemplo GPL
  • Dependencias, en el ejemplo fat
  • Vermagic, almacena la siguiente información sobre el módulo:
  • Versión del kernel, en el ejemplo 2.6.38-gentoo-r6-agd.
  • Opciones, en el ejemplo SMP mod_unload.
  • Arquitectura, en el ejemplo no aparece.
  • Versión de GCC usada en su compilación, en el ejemplo no aparece.
  • Parámetros que pueden ser pasados al cargar el módulo. [+/-] Ver ejemplo


insmod
Carga el módulo indicado en el kernel en ejecución. No resuelve dependencias, por este motivo se recomienda el uso de modprobe. Es importante constatar que insmod precisa la ruta y el nombre completo del módulo a cargar. Así, por ejemplo si precisa cargar el módulo vfat, deberá indicar la ruta, el nombre y la extensión del módulo vfat. También debe tener en cuenta que insmod no resuelve dependencias; por ello antes de cargar un módulo deberá de cargar todas sus dependecias o insmod le devolverá un error del tipo insmod: error inserting '/lib/modules/.../.../module.ko': -1 Unknown symbol in module. Además debe tener en cuenta que insmod solo mostrará los errores, es decir, si el modulo es cargado correctamente insmod no mostrará nada. A continuación podrá ver un ejemplo de uso de insmod:
agd-desktop # insmod  /lib/modules/2.6.38-gentoo-r6-agd/kernel/arch/x86/kernel/microcode.ko
agd-desktop # insmod /lib/modules/2.6.38-gentoo-r6-agd/kernel/arch/x86/kernel/microcode.ko
insmod: error inserting '/lib/modules/2.6.38-gentoo-r6-agd/kernel/arch/x86/kernel/microcode.ko': -1 File exists
agd-desktop # lsmod 
Module                  Size  Used by
microcode               7064  0
sco                     8326  2
nvidia              10482236  40
sr_mod                 12680  0
cdrom                  34470  1 sr_mod
r8168                 183402  0
agd-desktop #

Como puede ver, al invocar insmod para cargar el módulo microcode, insmod no arrojo información al respecto en la primera ejecución ya que el módulo fue cargado correctamente. Al ejecutar por segunda vez el comando, muestra un error e indica que el módulo ya está cargado; lo cual verificamos haciendo uso del comando lsmod.


rmmod
Descarga el módulo indicado del kernel en ejecución. rmmod, al igual que insmod, no maneja dependencias por ello es recomendable hacer uso de modprobe. A diferencia de insmod, rmmod no precisa de la ruta del módulo a descargar sino tan solo su nombre. Y al igual que insmod, tan solo muestra errores, es decir, no muestra nada por pantalla si el módulo ha sido descargado correctamente. A continuación podrá ver un ejemplo de uso de rmmod:
agd-desktop # rmmod microcode
agd-desktop # lsmod 
Module                  Size  Used by
sco                     8326  2
nvidia              10482236  40
sr_mod                 12680  0
cdrom                  34470  1 sr_mod
r8168                 183402  0
agd-desktop # rmmod cdrom
ERROR: Module cdrom is in use by sr_mod
agd-desktop #

Como se puede ver en el ejemplo, el modulo microcode ha sido descargado correctamente mientras que el módulo cdrom no ha podido ser descargado por estar en uso. Para descargar el módulo cdrom, antes se debe descargar el módulo sr_mod, es decir, rmmod sr_mod && rmmod cdrom.


modprobe
Permite cargar y descargar los módulos indicados, así como todas sus dependencias. La sintaxis de modprobe es sencilla, aunque tiene multitud de opciones. Si tiene problemas de dependencias al intentar cargar un módulo con modprobe, tal vez deba regenerar la base de datos de dependencias con depmod. A continuación se indican algunas de las opciones más útiles. Si desea obtener una información más amplia, puede consultar la página man de modprobe.


modprobe modulo
Carga el módulo indicado, así como todas sus dependencias, en el kernel en ejecución. A continuación podrá ver un ejemplo de uso de modprobe:
agd-desktop # lsmod
Module                  Size  Used by
sco                     8326  2
nvidia              10482236  40
sr_mod                 12680  0
cdrom                  34470  1 sr_mod
r8168                 183402  0
agd-desktop # modprobe -v vfat
insmod /lib/modules/2.6.38-gentoo-r6-agd/kernel/fs/fat/fat.ko
insmod /lib/modules/2.6.38-gentoo-r6-agd/kernel/fs/fat/vfat.ko
agd-desktop # lsmod
Module                  Size  Used by
vfat                    9719  0
fat                    49522  1 vfat
sco                     8326  2
nvidia              10482236  40
sr_mod                 12680  0
cdrom                  34470  1 sr_mod
r8168                 183402  0
agd-desktop #

Algunos módulos permiten pasar parámetros de configuración al ser cargados. Puede consultar toda la información referente a un módulo, así como los parámetros que se le pueden pasar, usando la utilidad modinfo, tal y como vimos anteriormente. A continuación veremos un ejemplo donde se carga el módulo usb-storage, el driver para los dispositivos de almacenamiento masivo por USB, y se modifican los parámetros.
makeinstall@makeinstall-virtual-machine:~$ modinfo usb-storage | grep parm
parm:           option_zero_cd:ZeroCD mode (1=Force Modem (default), 2=Allow CD-Rom (uint)
parm:           swi_tru_install:TRU-Install mode (1=Full Logic (def), 2=Force CD-Rom, 3=Force Modem) (uint)
parm:           delay_use:seconds to delay before using a new device (uint)
parm:           quirks:supplemental list of device IDs and their quirks (string)
makeinstall@makeinstall-virtual-machine:~$ sudo modprobe -v usb-storage delay_use=10
insmod /lib/modules/2.6.38-8-generic/kernel/drivers/usb/storage/usb-storage.ko delay_use=10
makeinstall@makeinstall-virtual-machine:~$

En el ejemplo, se carga el módulo usb-storage y se le pasa el parámetro delay_use=10, el cual fija un retardo de 10 segundos antes de que el dispositivo de almacenamiento masivo por usb pueda ser usado. Una opción interesante es quirks, la cual permite pasar una lista de identificadores (IDs) de dispositivos. Le será útil en caso de que trabaje con dispositivos modernos o no presentes en la lista de dispositivos de su kernel, y encuentre por internet un ID válido para su dispositivo. Si tiene problemas en este aspecto, puede descargar una lista de dispositivos actualizada en The USB ID Repository y The PCI ID Repository.


modprobe -r modulo
Descarga el módulo indicado, así como todas sus dependencias, del kernel en ejecución. A continuación podrá ver un ejemplo de uso de modprobe -r:
agd-desktop # lsmod
Module                  Size  Used by
vfat                    9719  0
fat                    49522  1 vfat
sco                     8326  2
nvidia              10482236  40
sr_mod                 12680  0
cdrom                  34470  1 sr_mod
r8168                 183402  0
agd-desktop # modprobe -rv vfat
rmmod /lib/modules/2.6.38-gentoo-r6-agd/kernel/fs/fat/vfat.ko
rmmod /lib/modules/2.6.38-gentoo-r6-agd/kernel/fs/fat/fat.ko
agd-desktop # lsmod
Module                  Size  Used by
sco                     8326  2
nvidia              10482236  40
sr_mod                 12680  0
cdrom                  34470  1 sr_mod
r8168                 183402  0
agd-desktop #


modprobe -nv modulo
Muestra los comandos insmod a ejecutar para cargar el módulo indicado, así como todas sus dependencias. Es un comando útil para diagnosticar problemas de dependencias al cargar un módulo con modprobe. A continuación podrá ver un ejemplo de uso de modprobe -nv:
agd-desktop # lsmod
Module                  Size  Used by
sco                     8326  2
nvidia              10482236  40
sr_mod                 12680  0
cdrom                  34470  1 sr_mod
r8168                 183402  0
agd-desktop # modprobe -nv vfat
insmod /lib/modules/2.6.38-gentoo-r6-agd/kernel/fs/fat/fat.ko
insmod /lib/modules/2.6.38-gentoo-r6-agd/kernel/fs/fat/vfat.ko
agd-desktop # lsmod
Module                  Size  Used by
sco                     8326  2
nvidia              10482236  40
sr_mod                 12680  0
cdrom                  34470  1 sr_mod
r8168                 183402  0
agd-desktop #

Si al cargar un módulo con modprobe, este le arroja algún error de dependencia recuerde antes de nada refrescar la base de datos de dependencias con el comando depmod. Si el problema persiste, las opciones -nv, tal y como hemos visto, le ayudarán a identificar los comandos que se están ejecutando y las dependencias del módulo en cuestión; tal vez alguna dependencia no está compilada o está dañada.

3 comentarios:

#
Anónimo dijo...

Gracias por la Info amigo!!! ahora me dispongo a probarla!!

#
Antonio Guillen dijo...

;)

#
Anónimo dijo...

manual , rápido , sencillo y muy preciso . Gracias

Publicar un comentario

Recuerde que puede utilizar algunos códigos HTML como <b>para negrita</b>, <i>para cursiva</i> y <a href="URL">para enlaces</a>.