Por qué /dev y /proc/devices tienen resultados totalmente diferentes en Linux

Por qué /dev y /proc/devices tienen resultados totalmente diferentes en Linux

Por lo que yo sé:

  • Un controlador puede estar relacionado con uno o más "dispositivos".

  • Los archivos bajo /dev representan estos dispositivos. El controlador tiene un número mayor y cada dispositivo también tiene un número menor, por lo que (mayor, menor) identifica un dispositivo.

  • /proc/devices también enumera los dispositivos.

Si lo que sé es cierto entonces:

¿Por qué /dev y /proc/devices tienen resultados totalmente diferentes? En desarrollo hay nombre del dispositivo, número mayor y número menor. Y en /proc/devices hay un número mayor y un nombre de dispositivo, pero no un número menor. ¿Por qué estas dos listas muestran resultados totalmente diferentes incluso para el mismo número importante?

Por ejemplo, mire esta línea en ls -l /dev

crw------- 1 root root     10, 235 Sep 19 21:40 autofs

Es un dispositivo de caracteres con el número mayor 10 y el número menor 235. El nombre del dispositivo es autofs.

Ahora reviso la entrada con el mismo número mayor en /proc/devices:

10 misc

Como puede ver, el nombre del dispositivo es totalmente diferente y no hay un número menor (¿cómo identifica esto el dispositivo solo por el número mayor?).

Parece que hay terminología mixta pero no pude resolverlo.

Respuesta1

Los módulos del kernel ("controladores", si lo desea) pueden registrar dispositivos de bloques o caracteres (en el sentido tradicional de Unix, "dispositivo" es una palabra con muchos significados) en el kernel, usando una rutina como register_blkdevjunto con una cadena que se supone que identificar el dispositivo. Es posible utilizarcualquiercadena para ese propósito, y estas cadenas aparecen en el /proc/devicesarchivo (que es solo una representación textual de esta tabla del núcleo).

Por otro lado, en los sistemas Linux modernos, los archivos /devse crean udevsiguiendo una serie de reglas complicadas. Se supone que estos archivos representan formas para que el espacio de usuario interactúe con el kernel, a través de lecturas, escrituras e ioctls, lo cual funciona porque son archivos "especiales" con un número de dispositivo mayor y menor, por lo que los accesos a estos archivos se traducen en llamadas al kernel. (Mas o menos).

Esos dos y su estructura no tienen ninguna relación. La única conexión es que el número de dispositivo principal de dicho archivo especial se busca cada vez que se accede a dicho archivo y se utiliza para encontrar el módulo que lo registró. La cadena bajo la cual fue registrado es totalmente irrelevante. El nombre con el que aparece un archivo también es totalmente irrelevante, siempre que el usuario conozca el nombre. Nada le impide llamar a sus discos /dev/this-disky, /dev/that-disken lugar de /dev/sdahacerlo, /dev/sdbsi siente la necesidad de hacerlo, cambie las udevreglas.

Peropor supuestoA la gente le gusta simplificar las cosas, por lo que las cadenas que se utilizan para registrar dispositivos suelen ser iguales o al menos similares a los nombres predeterminados con los que aparecen en /dev. Pero esa es la única conexión.

información relacionada