Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo maneja Linux las URB?

¿Cómo maneja Linux las URB?

El parámetro URB es un puntero a un URB, y el parámetro mem flags tiene el mismo significado que los parámetros pasados ​​a la función kmalloc (), que se utiliza para indicarle al kernel USB cómo asignar el búfer de memoria en este momento.

Después de enviar la URB al kernel USB, no acceda a ningún miembro de la URB antes de llamar a la función de finalización.

usb_submit_urb () se puede llamar en un contexto atómico o en un contexto de proceso, por lo que la variable mem_flags correspondiente debe configurarse de acuerdo con el contexto de llamada, como se muestra a continuación.

-GFP_ATOMIC: cuando la persona que llama mantiene un bloqueo de giro o un bloqueo de lectura/escritura y el controlador modifica el estado actual-> a un estado distinto de TASK_RUNNING, el controlador de interrupciones, parte inferior, este indicador es utilizado en tasklets, controladores de temporizador y funciones de finalización de URB.

- GFP_NOIO: este indicador debe usarse en el bloque IO y en las rutas de manejo de errores del dispositivo de almacenamiento.

- GFP_KERNEL: si no hay motivo para usar GFP_ATOMIC y GFP_NOIO; GFP_KERNEL.

Si la llamada a usb_submit_urb() es exitosa, es decir, el control de la URB se ha transferido al kernel USB, la función devolverá 0; de lo contrario, se devolverá un número de error;

4) Envíe el controlador del controlador de host USB especificado por el kernel USB.

5) Manejado por el controlador host USB para una única transferencia al dispositivo USB.

Los pasos 4) a 5) los completan el kernel USB y el controlador de host y no están controlados por el controlador del dispositivo USB.

6) Cuando se completa la URB, el controlador del host USB notifica al controlador del dispositivo USB.