Tres estructuras de datos importantes del controlador de dispositivo de caracteres de linux

  

Las tres estructuras de datos importantes del controlador de dispositivo de caracteres de linux son

struct file

struct inode

strude file_operations

donde struct file representa un archivo abierto y struct inode se usa para registrar la información física del archivo. Por el momento, puede ignorarlo.

strude file_operations es una colección de punteros de función. A continuación, se muestra una descripción del controlador GPIO y los ejemplos de aplicación:

La primera parte es el controlador:

//------------------- ABIERTO ------------------------ ssize_t SIMPLE_GPIO_open (struct Inode * inode, struct file * file) {#ifdef OURS_GPIO_DEBUG printk (" SIMPLE_GPIO_open [--kernel -] \\ n "); #endif return 0;}

//------ ------------- RELEASE /CLOSE --------------- ssize_t SIMPLE_GPIO_release (struct inode * inode, struct file * file) {#ifdef OURS_GPIO_DEBUG printk ( " SIMPLE_GPIO_release [--kernel -] \\ n "); #endif

return 0;}

//--------------- ---------------------------------- struct file_operations gpio_fops = {

.open = SIMPLE_GPIO_open, .read = SIMPLE_GPIO_read, .write = SIMPLE_GPIO_write, .ioctl = SIMPLE_GPIO_ioctl, .release = SIMPLE_GPIO_release,};

Definido como estructura de operaciones de archivo en gpio_fops, por ejemplo .open = SIMPLE_GPIO_open, que define la función abierta de la aplicación para llamar a la función SIMPLE_GPIO_open.

Vea ssize_t definido en el controlador SIMPLE_GPIO_open (struct inode * inode, struct * archivo)

donde el parámetro es otro Las dos estructuras de datos se ignoran aquí.
(No escriba parámetros ni nada)

Revise la llamada en la aplicación

#define DEVICE_NAME " /dev /gpio "

int main (void) {int fd; int ret; char * i;

printf (" \\ nstart gpio_led_driver test \\ n \\ n ");

fd = abierto (DEVICE_NAME, O_RDWR); printf (" fd = % d \\ n ", fd);

if (fd == -1) {printf (" error del dispositivo% s \\ n ", DEVICE_NAME);}


El argumento de función abierta de la llamada de la aplicación está abierto (DEVICE_NAME, O_RDWR);

donde #define DEVICE_NAME " /dev /gpio ", O_RDWR significa abrir y escribir

En el controlador, la función xxxopen se puede escribir de acuerdo con el libro, los parámetros se pueden ignorar por completo (el cuerpo de la función puede escribir el contenido, no sé qué hacer)

El parámetro de función abierta de la aplicación De acuerdo a los parámetros escritos en el libro de aplicaciones de linux,

Copyright © Conocimiento de Windows All Rights Reserved