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_TABLE
se utiliza para generar archivos de mapas pordepmod
programa;- Cuando el dispositivo se conecta en caliente, el controlador del bus genera un evento de conexión en caliente. Llamadas del núcleo
/sbin/hotplug
con las variables ambientales apropiadas establecidas; - Dados archivos de mapas e información del entorno,
/sbin/hotplug
decide 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 ->
insmod
nombredelmódulo.ko omodprob
nombredelmó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
/remove
evento en unudev
regla/etc/udev/rules.d/10-local.rules
. Puede cargar/descargar usando este método. - Codifique su módulo con
MODULE_DEVICE_TABLE
registro. Luego cargue su modulename.ko una vez y ejecutedepmod
comando [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.dep
archivos 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.