Estoy escribiendo un controlador de núcleo para un dispositivo que produce cantidades regulares de datos para leer periódicamente. El programa de espacio de usuario es ideal para hacer de esto un controlador de bloqueo.¿Cómo puedo hacer una pausa de más de 100 milisegundos en un módulo de controlador de Linux?
¿Qué métodos están disponibles para hacer una pausa en cualquier lugar de 4 a 100 ms en un conductor (es decir, haciendo el "bloque de ")? En el espacio de usuario que me gustaría hacer algo parecido a:
tv.tv_sec = microsecond_delay/1000000ul;
tv.tv_usec = microsecond_delay % 1000000ul;
(void)select(0, NULL, NULL, NULL, & tv);
o
gettimeofday(tv,NULL);
y comparar las estructuras.
[Editar - mi propia respuesta]
Me va a utilizar el siguiente código en el controlador de mi:
#include <linux/jiffies.h>
...
schedule_timeout(file->private_data->my_driver_struct.read_pause_jiffies);
Voila! Ahora probaré ...
respuestas son bienvenidos, pero sólo encontraron [esto] (http://makelinux.com/ldd3/chp-7-sect-4) – Jamie
En realidad, no es lo que estoy buscando: Quiero duerma un tiempo específico, no crea un evento de temporizador asincrónico. – Jamie
Encontrado: 'extern signed long schedule_timeout (tiempo de espera largo firmado);' – Jamie