Durante el desarrollo, generalmente usa insmod para cargar un módulo y se le debe dar la ruta del módulo para cargar:
$ insmod filename [module-options]
Es una forma de carga de módulos de bajo nivel, que forma la base de otros métodos de carga de módulos, y es la que usaremos en este libro. Por otro lado, está modprobe, utilizado principalmente por administradores de sistemas o en un sistema de producción. modprobe es un comando inteligente que analiza el archivo modules.dep para cargar primero las dependencias, antes de cargar el módulo dado. Maneja automáticamente las dependencias de los módulos, como lo hace un administrador de paquetes:
$ modprobe module-name
insmod | modprobe |
Carga el módulo dado como 'insmod /path/to/module.ko' | Carga el módulo solo en /lib/modules/$(uname -r). ‘modprobe /home/test/hello.ko’ no funcionará |
Las dependencias, si las hay, no se cargan | modprobe calcula dependencias, carga las dependencias y luego el módulo principal |
¿Cómo modprobe calcula las dependencias?
Modprobe depende de la herramienta depmod para calcular las dependencias. depmod calcula las dependencias de todos los módulos presentes en la carpeta /lib/modules/$(uname -r) y coloca la información de dependencia en el archivo /lib/modules/$(uname -r)/modules.dep
P.ej. kernel/drivers/net/wireless/admtek/adm8211.ko:kernel/net/mac80211/mac80211.ko kernel/net/wireless/cfg80211.ko kernel/drivers/misc/eeprom/eeprom_93cx6.ko
En este caso, se carga primero eeprom_93cx6.ko, cfg80211.ko y luego adm8211.ko
Los módulos se cargan de derecha a izquierda y se eliminan de izquierda a derecha. Entonces, mientras se elimina adm8211.ko, luego se elimina cfg80211.ko y finalmente eeprom_93cx6.ko. Podemos volver a cargar el archivo modules.dep ejecutando el comando "depmod -a"
Resumen
insmod es un comando de administración del sistema para cargar el nombre de archivo del módulo en el núcleo. Más simple pero menos flexible que el comando modprobe. Los mensajes de error de insmod pueden ser vagos, porque el kernel realiza operaciones de módulo internamente y, por lo tanto, envía información de error al registro del kernel en lugar de la salida estándar; ver dmesg.
El comando modprobe utiliza la información en los archivos module.* para ubicar un módulo por nombre en lugar de la ruta completa. modprobe tiene muchas otras características que se describen en el manual.
Los administradores de dispositivos también utilizan la información de dependencia del módulo, en particular udev. Cuando se detecta nuevo hardware, por ejemplo, un nuevo dispositivo USB, se alerta al demonio udevd y se pasa al proveedor, y se leen los ID de productos del hardware. udevd escanea los archivos de dependencia del módulo en busca de un módulo que haya registrado esos ID. Si se encuentra uno, se carga usando modprobe.