GNU/Linux >> Tutoriales Linux >  >> Linux

¿Son únicos los números mayor y menor?

Son los major, minor número Único?

¿Tenemos alguna cita y referencia a él?

NAME   MAJ:MIN RM   SIZE RO MOUNTPOINT
sda      8:0    0 465.8G  0 
├─sda1   8:1    0 298.2M  0 
├─sda2   8:2    0     3G  0 
├─sda3   8:3    0 458.7G  0 /
├─sda4   8:4    0     1K  0 
└─sda5   8:5    0   3.8G  0 
sr0     11:0    1  1024M  0 

Respuesta aceptada:

De La interfaz de programación de Linux , §14.1

Cada archivo de dispositivo tiene un número de identificación mayor y un número de identificación menor. El ID principal identifica la clase general de dispositivo y el núcleo lo utiliza para buscar el controlador
apropiado para este tipo de dispositivo. El ID menor identifica de forma única un dispositivo en particular
dentro de una clase general. Los ID principales y secundarios de un archivo de dispositivo se muestran mediante el comando
ls -l.

[…]

Cada controlador de dispositivo registra su asociación con un ID de dispositivo principal específico, y esta asociación proporciona la conexión entre el archivo especial del dispositivo y el dispositivo. El nombre del archivo del dispositivo no tiene relevancia cuando el kernel busca el controlador del dispositivo.

es decir, la intención es proporcionar una asignación única de mayor:menor a dispositivo:instancia para cada tipo de dispositivo. Estrictamente, usted puede tener dos dispositivos distintos con el mismo mayor:menor, siempre que uno sea char y el otro bloque:

# ls -l /dev/ram1 /dev/mem
crw-r----- 1 root kmem 1, 1 Jan  1  1970 /dev/mem
brw-rw---- 1 root disk 1, 1 Jan  1  1970 /dev/ram1

En Linux, en cualquier momento en un sistema los números mayor:menor para cada tipo de dispositivo son únicos. Sin embargo, los números pueden cambiar con el tiempo y no es necesario que sean los mismos en diferentes sistemas Linux (incluso la misma distribución, kernel y hardware). Tenga en cuenta que los dispositivos de caracteres y bloques tienen espacios de numeración distintos, p. block major 1 se asigna a discos RAM, char major 1 se asigna a un conjunto de dispositivos del núcleo, incluidos nulo y cero.

Históricamente, las especialidades de dispositivos eran (en su mayoría) estáticamente asignado a través de un registro (también todavía presente, aunque sin mantenimiento, en la fuente del núcleo Documentation/devices.txt ). En estos días, muchos dispositivos se asignan dinámicamente, esto lo administra udev y las asignaciones se pueden ver en /proc/devices . Los dispositivos fijos aún existen en incude/uapi/linux/major.h (recientemente movido de include/major.h )

Ahora bien, aunque la combinación principal:menor identifica de forma única instancias de dispositivos específicos, no hay nada que le impida crear varios nodos (archivos) de dispositivos que se refieran al mismo dispositivo. Ni siquiera tienen que crearse en /dev (pero tienen que estar en un sistema de archivos que admita la creación de nodos de dispositivos y no esté montado con el nodev opción).

Un uso común es crear dispositivos cero, nulos y aleatorios duplicados en un chroot:

# find /dev /var/chroot -regextype posix-extended -regex ".*/(zero|null|random)" -type c | 
xargs ls -l
crwxrwxrwx 1 root root 1, 3 2012-11-21 03:22 /dev/null
crw-rw-r-- 1 root root 1, 8 2012-05-07 10:35 /dev/random
crw-rw-rw- 1 root root 1, 5 2012-11-21 03:22 /dev/zero
crwxrwxrwx 1 root root 1, 3 2012-11-21 03:22 /var/chroot/sendmail/dev/null
crw-rw-r-- 1 root root 1, 8 2012-05-07 10:35 /var/chroot/sendmail/dev/random
crw-rw-rw- 1 root root 1, 5 2012-11-21 03:22 /var/chroot/sendmail/dev/zero

Los nombres son solo alias, el núcleo no se preocupa mucho por la mayoría de los nombres o ubicaciones, se preocupa por el número mayor para poder seleccionar el controlador correcto, y el controlador (generalmente) se preocupa por el número menor para poder seleccionar el instancia correcta.

Relacionado:Aprenda inglés:cuando se usa "fuerte" después de un número, ¿se refiere a ese número exacto o a un número aproximado?

La mayoría de los nombres son simplemente convenciones (aunque algunos están definidos por POSIX). Tenga en cuenta también que un dispositivo puede registrarse para múltiples números principales, verifique el sd controlador en /proc/devices; un nombre de módulo de controlador (.ko ) no necesita ser el mismo que el nombre del dispositivo, y no necesita ser el mismo que el nodo del dispositivo en /dev y un solo módulo de controlador puede administrar múltiples dispositivos lógicos/físicos o nombres de dispositivos.

En resumen:puede tener dos o más nodos de dispositivos (en /dev/ o en otro lugar) que tienen los mismos números mayor:menor, pero si son del mismo tipo se refieren al mismo dispositivo. Puede tener un controlador que pueda manejar varias instancias principales, pero dentro del kernel y dentro del controlador, para cada tipo (char o bloque), el número mayor:menor se toma para referirse a un dispositivo específico (principal) y una instancia específica ( menor) del dispositivo.

No puede tener dos nodos de dispositivos con el mismo tipo y mayor:menor y esperar que accedan a dos dispositivos lógicos o físicos diferentes. Cuando se accede a un dispositivo, el kernel selecciona un controlador según el tipo y el número principal (y no basado en el nombre del nodo del dispositivo) y, por convención, el número menor selecciona de manera determinista una instancia o subfunción específica.

Actualizar Se puede encontrar algo de historia interesante y algo de perspectiva de *BSD en la BSDCon de Poul-Henning Kamp de 2002 presentación:https://www.usenix.org/legacy/events/bsdcon/full_papers/kamp/kamp_html/

Si retrocede en el tiempo hasta 1978 (cortesía de Alcatel-Lucent, el Bell System Technical Journal julio-agosto de 1978) el 'Sistema de tiempo compartido de Unix lo establece claramente (p1937):

Los dispositivos se caracterizan por un número de dispositivo mayor, un número de dispositivo menor y una clase (bloque o carácter). Para cada clase, hay una serie de puntos de entrada a los controladores de dispositivos. El número de dispositivo principal se usa para indexar la matriz cuando se llama al código para un controlador de dispositivo en particular. El número de dispositivo menor se pasa al controlador de dispositivo como argumento. El número menor no tiene otro significado que el que le atribuye el conductor. Por lo general, el conductor usa el número menor para acceder a uno de varios dispositivos físicos idénticos.


Linux
  1. Limitar la cantidad de clientes conectados en un VirtualHost en Apache

  2. ¿Cómo aumentar el número de inodos en un sistema de archivos Ext4?

  3. ¿Límite práctico en el número de instantáneas Btrfs?

  4. Linux:¿el número principal de Tty de su Unix?

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

Cómo encontrar el número de puerto de un servicio en Linux

5 formas de contar el número de líneas en un archivo

Número de dispositivo en la salida del comando stat

¿Cómo son útiles las funciones de la familia dev_*() al depurar el kernel de Linux?

Cómo obtener direcciones MAC de dispositivos que no están en la red

¿Cuál es el número máximo de puertos?