Introducción del número de dispositivo primario y secundario de Linux

  
1, el número de dispositivo principal y la función de número de dispositivo menor
En el kernel de Linux, el número de dispositivo principal identifica el dispositivo correspondiente al controlador, y le indica al kernel de Linux qué controlador usar para el dispositivo (es decir, El servicio de archivo de dispositivo en /dev), el número de dispositivo menor se utiliza para identificar un dispositivo específico y único.
Por ejemplo, en la terminal de linux, ingrese el comando:
** @ ubuntu: /dev $ ls – l crw-rw — - 1 root root 4, 0 2010-05-25 06:50 tty0 crw — — - 1 root root 4, 1 2010-05-25 06:51 tty1
Habrá muchas listas de archivos, aquí, por ejemplo, archivos de dispositivo de cadena [dispositivo de cadena que comienza con c, por supuesto, el dispositivo de bloque se representa como b , Estos archivos pueden llamarse nodos del libro del sistema de archivos, todos ubicados en el directorio /dev. Además, los números en las 2 líneas anteriores, 4 [rojo púrpura], 0, 1 [azul] indican respectivamente el número de dispositivo principal y el número de dispositivo menor del dispositivo. Un número de dispositivo primario y un número de dispositivo secundario forman un identificador único para el dispositivo. Aunque el kernel de Linux actual permite que varios controladores compartan el número de dispositivo principal, la mayoría de los dispositivos todavía están organizados de acuerdo con el principio de que un número de dispositivo maestro corresponde a un controlador. El número de dispositivo menor se usa para señalar el dispositivo implementado por el controlador, y el núcleo mismo no se preocupa sustancialmente por ninguna otra información sobre el número de dispositivo menor. A la vista del sistema se le ha asignado el dispositivo principal:
#cat /proc /devices
2, la representación interna del número de dispositivo
tipo de dispositivo es dev_t type (2.4 kernel is kdev_t), en Definido en < linux /coda.h >.
typedef unsigned long dev_t;
donde dev_t es un número de 32 bits, 12 bits representan el número de dispositivo principal y 20 bits representan el número de dispositivo secundario.
El kernel 2.6 extiende el número de dispositivo principal de 8 bits a 12 bits, mientras que el número de dispositivo secundario se extiende de 8 bits a 20 bits.
El método para obtener el número de dispositivo principal y el número de dispositivo menor es el siguiente:
MAJOR (dev_t dev): obtenga el número de dispositivo principal de acuerdo con el número de dispositivo dev; MINOR (dev_t dev): obtenga el número de dispositivo menor de acuerdo con el número de dispositivo dev; > Las macros anteriores se definen en < linux /kdev_t.h > de la siguiente manera:
#define MAJOR (dev) ((unsigned int) ((dev) > > MINORBITS)) #define MINOR (dev) (( Sin signo int) ((dev) &MINORMASK))
Cree el número de dispositivo (tipo convertido a dev_t) de acuerdo con el mayor número de dispositivo principal y el menor número de dispositivo menor, puede usar
MKDEV (int major, int minor);
Las macros anteriores se definen en < linux /kdev_t.h > de la siguiente manera:
#define MKDEV (ma, mi) (((ma) < < MINORBITS) |  (mi))
3. Introducción al equipo diverso
equipo misceláneo, el número principal del dispositivo es 10, y el método de registro de la función es diferente. Use lo siguiente:
misc_register (&XXX_miscdev); misc_deregister (&XXX_miscdev);
La función anterior debe especificar la estructura de miscdevice,
definida en #include < linux /miscdevice.h >: < Br> C ++ code struct miscdevice
  • {
    int minor; //segundo número de dispositivo
  • const char * name; //nombre del controlador del dispositivo
    struct file_operations * fops; //file_operation
  • struct miscdevice * next, * prev; //para administración interna
    devfs_handle_t devfs_handle; //para administración interna
  • }

    Developer El archivo que se debe definir incluye: menor, nombre y fops de la siguiente manera:
    C ++ code static struct miscdevice mymisc_dev = {
  • .minor = MISC_DYNAMIC_MINOR,
    .name = " mymisc ", << Li> .fops = &mymisc_fops,
    };

    Puede verificar el registro de varios dispositivos con #cat /proc /misc.
    mis dispositivos son principalmente para controladores sin dispositivos múltiples del mismo tipo
  • Copyright © Conocimiento de Windows All Rights Reserved