我正在为一个设备编写内核驱动程序,该驱动程序会定期生成定期读取数据。用户空间程序非常适合使其成为阻塞驱动程序。
哪些方法可用于在驱动程序中暂停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);
瞧!我现在要测试......
答案 0 :(得分:21)
#include <linux/delay.h>
...
msleep(100);
...
答案 1 :(得分:1)
使用schedule_timeout不会在指定时间内休眠,但会在指定的最短时间内休眠。如果您确实想在指定时间内阻止,则必须使用锁定。睡觉只会保证你最短的时间 - 这对你来说无关紧要,这取决于你需要的多少粒度。 但是一个更好的司机会睡觉,直到读者在任何情况下要求更多的数据。