/ / Как мога да направя пауза за 100+ милисекунди в модул на драйвер за Linux? - linux, linux-kernel, забавяне, linux-driver-driver

Как мога да спре за 100 + милисекунди в модул за драйвер на Linux? - linux, linux-kernel, delay, linux-device-driver

Пиша драйвер на ядрото за устройство, което периодично произвежда данни за четене. Програмата за потребителско пространство е идеално подходяща, за да направи това блокиращ драйвер.

Какви методи са достъпни за пауза от 4 до 100 ms в драйвер (т.е. извършване на „блок")? В потребителското пространство бих направил нещо подобно на:

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);

Voila! Сега ще тествам ...

Отговори:

18 за отговор № 1
#include <linux/delay.h>

...
msleep(100);
...

1 за отговор № 2

Използването на raspored_timeout НЕ спи за определено време, а за минимално определено време. Ако наистина искате блок за определено време ще трябва да използвате ключалки. Спането ще ви гарантира само минимално време - това може да не е от значение за вас в зависимост от много подробности, от които се нуждаете. Но по-добър шофьор ще спи, докато читателят не поиска повече данни във всеки случай.