GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿cómo sabe el kernel de Linux los números mayores y menores de los dispositivos?

Hasta donde yo sé, el kernel detecta hardware, agrega información a sysfs, crea un dispositivo en /dev y luego genera un evento udev. Mi pregunta es, ¿los controladores de dispositivos hacen todo esto o es el kernel mismo? Si los conductores lo hacen, sabrán el número mayor y menor del dispositivo para crear el archivo en devtmps.

También entiendo (quizás mal) que es udev quien llama a modprobe para cargar los drivers que manejan un dispositivo.

Me dijeron que lo hacen con el contenido de la variable de entorno uevent MODALIAS, cargando así todos los módulos cuyos alias coincidan con esta cadena (el controlador correcto). En resumen:cuáles son los pasos de la detección de hardware en Linux y QUIÉN realiza cada paso:el kernel en sí, el controlador dentro del kernel o udev en el espacio de usuario. Gracias.

Respuesta aceptada:

El núcleo conoce los números de los dispositivos porque decide los números de los dispositivos. Cada controlador registra los números de dispositivo que gestiona. Los números están codificados en el código fuente o, en algunos casos, se asignan dinámicamente. El sistema de archivos sysfs permite que aplicaciones como udev descubran los dispositivos compatibles con el kernel. Consulte ¿Cómo obtiene udev los números de dispositivo para los dispositivos que crea? para más detalles.

El código de inicialización del controlador sondea el hardware y registra los dispositivos según el hardware que encontró durante el sondeo. Algunos tipos de hardware no admiten el sondeo; por ejemplo, el bus ISA (un bus en gran parte obsoleto en las computadoras tipo PC) no proporciona una forma de enumerar el hardware conectado, por lo que el controlador solo puede intentar comunicarse y rezar para que no haya un periférico diferente conectado en la misma dirección. En algunas plataformas, el cargador de arranque incluye un árbol de dispositivos que describe los periféricos disponibles y dónde están asignados, y el kernel de Linux activa los controladores en función de esta información. Hay tres formas de cargar un controlador para un periférico.

  • El controlador puede estar incluido como parte de la imagen del núcleo.
  • El controlador puede compilarse como un módulo y cargarse explícitamente (por ejemplo, incluyéndolo en /etc/modules o en un initramfs).
  • Existe un mecanismo para cargar automáticamente ciertos controladores en función de la información proporcionada por los tipos de bus que pueden enumerar los periféricos conectados junto con un número de identificación universal, como PCI (el bus principal en la PC moderna) y USB. El núcleo ejecuta modprobe y le pasa un nombre simbólico que codifica la identificación del periférico, que es un alias para el nombre "real" del módulo del controlador. Consulte ¿Se cargan y descargan automáticamente los módulos de controlador?
Relacionado:Linux:¿cómo crear un parche ignorando las diferencias de sangría en el código?
Linux
  1. ¿Son únicos los números mayor y menor?

  2. Linux:¿cómo encontrar el controlador (módulo) asociado con un dispositivo en Linux?

  3. ¿Cómo funciona internamente copy_from_user del kernel de Linux?

  4. ¿Cómo determina el kernel de Linux el orden de las llamadas __init?

  5. ¿Cómo depurar el kernel de Linux con GDB y QEMU?

Cómo el kernel de Linux maneja las interrupciones

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

Cómo saber los grupos de un usuario de Linux

Cómo detectar y administrar dispositivos en Linux

¿Cuál es la diferencia entre un controlador de plataforma Linux y un controlador de dispositivo normal?

¿Cómo carga Linux la imagen 'initrd'?