如何在linux驱动程序模块中暂停100+毫秒?

时间:2011-09-09 21:25:55

标签: linux linux-kernel delay linux-device-driver

我正在为一个设备编写内核驱动程序,该驱动程序会定期生成定期读取数据。用户空间程序非常适合使其成为阻塞驱动程序。

哪些方法可用于在驱动程序中暂停4到100毫秒(即执行“阻止”)?在用户空间中,我会做类似于:

的事情
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);

瞧!我现在要测试......

2 个答案:

答案 0 :(得分:21)

#include <linux/delay.h>

...
msleep(100);
...

答案 1 :(得分:1)

使用schedule_timeout不会在指定时间内休眠,但会在指定的最短时间内休眠。如果您确实想在指定时间内阻止,则必须使用锁定。睡觉只会保证你最短的时间 - 这对你来说无关紧要,这取决于你需要的多少粒度。 但是一个更好的司机会睡觉,直到读者在任何情况下要求更多的数据。