Как в модуле драйвера linux сделать паузу более 100 миллисекунд?

Я пишу драйвер ядра для устройства, которое производит регулярные объемы данных для периодического чтения. Пользовательская программа пространства идеально подходит для того, чтобы сделать это блокирующим драйвером.

Какие методы доступны для приостановки в драйвере от 4 до 100 мс (т.е. выполнение "block")? В пользовательском пространстве я бы сделал что-то похожее на:

tv.tv_sec  = microsecond_delay / 1000000ul;
tv.tv_usec = microsecond_delay % 1000000ul;
(void)select(0, NULL, NULL, NULL, & tv);

или

gettimeofday(tv,NULL);

и сравнил бы структуры.

[Редактирование - мой собственный ответ]

Я буду использовать следующий код в моем водителе:

#include <linux/jiffies.h>
...
schedule_timeout(file->private_data->my_driver_struct.read_pause_jiffies);

Вуаля! Сейчас я проведу испытание ...

11
задан Sagar Jain 22 April 2014 в 11:29
поделиться