Sto scrivendo un driver del kernel per un dispositivo che produce regolarmente quantità di dati da leggere periodicamente. Il programma spaziale dell'utente è l'ideale per rendere questo un driver di blocco.Come posso sospendere per 100+ millisecondi in un modulo del driver linux?
Quali metodi sono disponibili per la pausa ovunque da 4 a 100ms in un driver (cioè fare il "blocco ")? Nello spazio utente avrei fatto qualcosa di simile a:
tv.tv_sec = microsecond_delay/1000000ul;
tv.tv_usec = microsecond_delay % 1000000ul;
(void)select(0, NULL, NULL, NULL, & tv);
o
gettimeofday(tv,NULL);
e confrontare le strutture.
[Edit - la mia risposta]
Userò il seguente codice nel mio autista:
#include <linux/jiffies.h>
...
schedule_timeout(file->private_data->my_driver_struct.read_pause_jiffies);
Voila! Verificherò ora ...
Le risposte sono i benvenuti, ma ho appena trovato [questo] (http://makelinux.com/ldd3/chp-7-sect-4) – Jamie
In realtà, non è quello che sto cercando: Voglio dormire un tempo specificato, non creare un evento del timer asincrono. – Jamie
Trovato: 'extern signed long schedule_timeout (timeout firmato lungo);' – Jamie