
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_blkdev
junto con una cadena que se supone que identificar el dispositivo. Es posible utilizarcualquiercadena para ese propósito, y estas cadenas aparecen en el /proc/devices
archivo (que es solo una representación textual de esta tabla del núcleo).
Por otro lado, en los sistemas Linux modernos, los archivos /dev
se crean udev
siguiendo 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-disk
y, /dev/that-disk
en lugar de /dev/sda
hacerlo, /dev/sdb
si siente la necesidad de hacerlo, cambie las udev
reglas.
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.