Por lo general, se usa para admitir la conexión en caliente, cargando/insertando el controlador para un dispositivo si aún no está cargado.
Aquí hay una pregunta similar:Detectar la presencia de un dispositivo cuando está conectado en caliente en Linux
(De mi respuesta)
Funciona de la siguiente manera:
-
Cada controlador en el código expone su ID de proveedor/dispositivo usando:
MODULE_DEVICE_TABLE(of, omap_mcspi_of_match); -
En el momento de la compilación, el proceso de compilación extrae esta información de todos los controladores y prepara una tabla de dispositivos.
-
Cuando inserta el dispositivo, el kernel hace referencia a la tabla de dispositivos y si se encuentra una entrada que coincida con el dispositivo/ID del proveedor del dispositivo agregado, entonces su módulo se carga e inicializa.
Según los controladores de dispositivos Linux:
MODULE_DEVICE_TABLEse utiliza para generar archivos de mapas pordepmodprograma;- Cuando el dispositivo se conecta en caliente, el controlador del bus genera un evento de conexión en caliente. Llamadas del núcleo
/sbin/hotplugcon las variables ambientales apropiadas establecidas; - Dados archivos de mapas e información del entorno,
/sbin/hotplugdecide qué módulo cargar y realmente lo carga. Si el módulo ya está cargado, está bien.
Debo mencionar nuevamente que este mecanismo solo garantiza que el módulo necesario esté en su lugar cuando el dispositivo está conectado. Eso no vincula el módulo con ese dispositivo ni con nada más. Solo carga el módulo.
Para verificar si el controlador está bien para un dispositivo específico, match() función de bus_type se utiliza.
Así es como entiendo las cosas [compatible con Xbuntu 14.04].
Una vez que escribimos un módulo, podemos cargarlo manualmente o automáticamente.
- Manualmente ->
insmodnombredelmódulo.ko omodprobnombredelmódulo.ko -
Automáticamente-> Hay varias formas.
-
copiar a /lib/modules/`uname -r`/kernel/modulename.ko y actualice
/etc/modules. El sistema cargará el módulo durante el arranque. -
Escriba un script/comando para cargar el módulo.ko para un hardware específico
add/change/removeevento en unudevregla/etc/udev/rules.d/10-local.rules. Puede cargar/descargar usando este método. - Codifique su módulo con
MODULE_DEVICE_TABLEregistro. Luego cargue su modulename.ko una vez y ejecutedepmodcomando [sudo depmod -a] para agregar el nuevo módulo a/lib/modules/3.16.0-34-generic/modules.alias/lib/modules/3.16.0-34-generic/modules.deparchivos Como sé, el sistema se cargará solo si el módulo no está cargado.
-
Puede monitorear la carga/descarga del módulo usando eventos udev usando:
monitor udevadm
comando.