GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es la secuencia de carga del módulo del kernel de Linux al inicio? ¿Cómo se les da prioridad?

No se cargan automáticamente al inicio ni en ningún otro momento, aunque muchos de ellos acaban cargándose durante el arranque. Hay tres mecanismos diferentes por los que esto sucede:

  • Solicitud de espacio de usuario: Que cubre todo, desde los servicios de inicio hasta udev y la línea de comandos. Init o udev son probablemente los medios más sencillos si desea cargar un módulo específico en el momento del arranque.

  • Dispositivo conectado en caliente: Cuando conecta algo a, por ejemplo, USB o PCI, el kernel lo detecta y solicita un módulo apropiado en función de cómo se identifica el dispositivo.

  • Protocolo necesario u otra implementación :Cuando el núcleo necesita hacer algo, como leer un sistema de archivos, y descubre que carece del conocimiento para hacerlo, solicitará un módulo.

Tenga en cuenta que para los dos últimos usé la frase "solicitar un módulo", esto se debe a que el kernel en realidad se carga a través de un demonio de espacio de usuario, kmod que ejecuta /sbin/modprobe . Según Wolfgang Mauerer en Linux Kernel Architecture , solo hay ~100 puntos diferentes en el kernel 2.6 donde llama a un request_module() interno función.

modprobe utiliza una base de datos de MODULE_ALIAS instalados. Estos se especifican explícitamente en el código fuente del módulo, o se derivan de su MODULE_DEVICE_TABLE, que es una lista de ID de dispositivos OEM a los que da servicio el módulo.


Muchos sistemas están configurados para usar initrd o initramfs. Estas son imágenes del sistema de archivos que carga el gestor de arranque y que están disponibles para el núcleo antes de que monte la partición raíz. Esto permite que los controladores necesarios para montar la partición raíz (controladores de disco, controladores de sistema de archivos, mapeador de dispositivos o controladores de volumen lógico, etc.) se compilen como módulos y se carguen desde initrd/initramfs.

Los scripts de inicio en el initrd (/linuxrc ) o initramfs (/init ) normalmente carga algunos módulos y localiza el sistema de archivos raíz. Cada distribución tiene su propia configuración. Ubuntu usa un initramfs que se ensambla a partir de componentes en el initramfs-tools paquete y regenerado para cada núcleo en función de los controladores necesarios para montar el sistema de archivos raíz.

Después de montar el sistema de archivos raíz, durante el arranque del sistema, los módulos enumerados en /etc/modules (Debian, …) o /etc/modules.conf (Red Hat, Arch, …) están cargados. Este archivo generalmente enumera algunos módulos, si es que hay alguno. La mayoría de los módulos se cargan bajo demanda.

Cuando el núcleo detecta algún hardware para el que carece de un controlador, o ciertos otros componentes, como protocolos de red o algoritmos criptográficos, llama a /sbin/modprobe para cargar el módulo. Para los controladores de hardware, el kernel pasa nombres que codifican la identificación de PCI, la identificación de USB u otra designación sistemática del hardware. Hay una tabla en /lib/modules/$VERSION/modules.alias que asigna estas designaciones sistemáticas a los nombres de los módulos. Esta tabla es generada por depmod y leído por modprobe .

Si tiene un módulo kernel adicional que compiló manualmente para un dispositivo de hardware, colóquelo en /lib/modules/$VERSION/local (crear el local subdirectorio si no existe) y ejecute depmod -a para regenerar la base de datos de alias. Si el módulo es para alguna característica inusual que el kernel no puede detectar automáticamente, colóquelo en /lib/modules/$VERSION/local , ejecuta depmod -a para analizar sus dependencias y agregar el nombre del módulo a /etc/modules .


Linux
  1. ¿Cuál es la diferencia entre module_init e init_module en un módulo del kernel de Linux?

  2. Cómo configurar la dirección IP desde C en Linux

  3. ¿Cómo codificar un módulo del kernel de Linux?

  4. ¿Cuál es el equivalente Linux del inicio de Windows?

  5. ¿Qué es un kernel contaminado en Linux?

Cómo compilar un kernel de Linux en el siglo XXI

Cómo cargar o descargar un módulo del kernel de Linux

Cómo verificar la versión del kernel en Linux

Cómo establecer o cambiar la zona horaria en Linux

Cómo cambiar la prioridad de un proceso en Linux

Cómo configurar el cortafuegos UFW en Linux