[Beijing Xunwei] i.MX6ULL Terminator Linux MISC driver misc device driver introducción

El número de dispositivo principal de todos los controladores de dispositivo misceláneos es 10, y diferentes dispositivos utilizan diferentes números de dispositivo esclavo. Cuando se utiliza el controlador de dispositivo misc, el dispositivo misc creará automáticamente cdev en lugar de crearlo manualmente como antes. Por lo tanto, el uso del controlador de dispositivo misc puede simplificar la escritura de controladores de dispositivo de caracteres.
El dispositivo misc está representado por la estructura miscdevice, que se define específicamente en include / linux / miscdevice.h, y el contenido es el siguiente:

57 struct miscdevice {
    
     
58         int minor; /* 子设备号 */ 
59         const char *name; /* 设备名字 */ 
60         const struct file_operations *fops; /* 设备操作集 */ 
61         struct list_head list; 
62         struct device *parent; 
63         struct device *this_device; 
64         const struct attribute_group **groups; 
65         const char *nodename; 
66         umode_t mode; 
67 };

Cuando creamos una estructura miscdevice de un dispositivo misc, necesitamos especificar las tres variables miembro minor, name y fops. minor indica el número de subdispositivo, que debe ser configurado por el usuario. Hay algunos números de subdispositivo predefinidos de varios dispositivos en el kernel de Linux, que se definen en el archivo include / linux / miscdevice.h, como se muestra a continuación :

13 #define    PSMOUSE_MINOR          1 
14 #define    MS_BUSMOUSE_MINOR  2 /* unused */ 
15 #define    ATIXL_BUSMOUSE_MINOR   3 /* unused */ 
16 /*#define  AMIGAMOUSE_MINOR       4 FIXME OBSOLETE */ 
17 #define    ATARIMOUSE_MINOR       5 /* unused */ 
18 #define    SUN_MOUSE_MINOR        6 /* unused */ 
...... 
52 #define    MISC_DYNAMIC_MINOR     255

Cuando establecemos el número de subdispositivo, tenga cuidado de no reutilizar el número de subdispositivo de otros dispositivos. Puede elegir uno de estos números de subdispositivo predefinidos o puede personalizarlo.
name es el nombre del dispositivo misceláneo. Cuando el dispositivo se registre correctamente, se generará automáticamente un archivo de dispositivo llamado name en el directorio / dev. fops es el conjunto de operaciones de este dispositivo misceláneo.
Una vez creada la estructura miscdevice, use la función misc_register para registrar un dispositivo misc en el sistema. El prototipo de la función es el siguiente:
int misc_register (struct miscdevice * misc) El
parámetro misc es la estructura miscdevice creada antes. Devuelve 0 en caso de éxito y un número negativo en caso de error.

Al crear un controlador de dispositivo de caracteres, usaremos las siguientes funciones para completar la creación del dispositivo:

1 alloc_chrdev_region();    /* 申请设备号 */ 
2 cdev_init();            /* 初始化 cdev */ 
3 cdev_add();             /* 添加 cdev */ 
4 class_create();         /* 创建类 */ 
5 device_create();        /* 创建设备 */

Ahora solo se necesita una función misc_register para reemplazar estas funciones.
En la función de desinstalación del controlador de dispositivo, use la función misc_deregister para anular el registro del dispositivo misc. El prototipo de función es el siguiente: el
int misc_deregister(struct miscdevice *misc)
parámetro misc es la estructura de miscdevice que se va a cancelar.
La misma función misc_deregister se utiliza para reemplazar las funciones de cancelación de registro de los siguientes dispositivos de caracteres:

1 cdev_del(); 					/* 删除 cdev */ 
2 unregister_chrdev_region();	 /* 注销设备号 */ 
3 device_destroy(); 				/* 删除设备 */ 
4 class_destroy();				 /* 删除类 */ 

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/BeiJingXunWei/article/details/112002843
Recomendado
Clasificación