El kernel de Linux implementa una característica interesante: admite la carga y ejecución dinámica de módulos. Si implementa un módulo del kernel y planea ejecutarlo, no necesita reiniciar el sistema, solo use el comando insmod para cargarlo directamente. Este módulo está integrado en el sistema operativo Linux como un parche y puede ejecutarse normalmente.
El principio operativo del módulo del kernel es en realidad el mismo que el mecanismo operativo de la biblioteca compartida: se carga en la memoria durante la operación y luego se realizan una serie de operaciones de asignación de espacio, resolución de símbolos, reubicación y otras. El módulo del kernel es esencialmente un archivo de destino reubicable como una biblioteca estática o una biblioteca dinámica. La diferencia entre los módulos del kernel y las bibliotecas dinámicas es que uno se ejecuta en el espacio del kernel y el otro en el espacio del usuario. La ejecución de la aplicación se basa en el vinculador dinámico implementado por la biblioteca estándar C para completar el proceso de vinculación dinámica, yEl funcionamiento del módulo del kernel no depende de la biblioteca estándar de C. El proceso de reubicación y vinculación dinámica debe ser completado por el propio kernel: la carga del módulo del kernel se completa mediante la llamada al sistema init_module.
Cuando se utiliza el comando insmod para cargar un módulo del kernel, el proceso básico es el siguiente:
- kernel/module.c/init_module
- Copiar al kernel: copy_module_from_user
- Asignación de espacio de direcciones: layout_and_allocate
- Análisis de símbolos: simplificar_símbolos
- Reubicación: apply_relocations
- Ejecución: complete_fromation