En este tutorial se verán los comandos necesarios para administrar los módulos del kernel.
Lista resumen
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...
-
-
jueves, 23 de junio de 2011, 1:46:00 CEST
#
-
Unknown
dijo...
-
-
jueves, 23 de junio de 2011, 10:32:00 CEST
#
-
Anónimo
dijo...
-
-
lunes, 11 de marzo de 2013, 21:54:00 CET
Gracias por la Info amigo!!! ahora me dispongo a probarla!!
;)
manual , rápido , sencillo y muy preciso . Gracias
Publicar un comentario