2011-09-09 6 views
8

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é ...

+0

respuestas son bienvenidos, pero sólo encontraron [esto] (http://makelinux.com/ldd3/chp-7-sect-4) – Jamie

+0

En realidad, no es lo que estoy buscando: Quiero duerma un tiempo específico, no crea un evento de temporizador asincrónico. – Jamie

+0

Encontrado: 'extern signed long schedule_timeout (tiempo de espera largo firmado);' – Jamie

Respuesta

18
#include <linux/delay.h> 

... 
msleep(100); 
... 
1

El uso de schedule_timeout NO duerme durante un tiempo específico, sino durante un tiempo mínimo especificado. Si realmente desea bloque durante un tiempo específico, tendrá que usar bloqueos. Dormir solo te garantizará un tiempo mínimo; puede que esto no te importe, dependiendo de la granularidad que necesites. Pero un mejor conductor dormiría hasta que el lector pidiera más datos en cualquier caso.

+0

Bien ... cerraduras, lo buscarán. Pero la granularidad va a ser, ¿qué? + - 10msec? (Por cierto: su respuesta es más material de comentarios que respuesta) – Jamie

+0

... y un puntero a algo con respecto a mi pregunta y su sugerencia de usar bloqueos sería muy apreciada. O mejor (mucho mejor :)), una respuesta con tres o cuatro líneas de código API relevante. – Jamie

Cuestiones relacionadas