我正在为内核编写一个模块。我需要等待一段时间(例如;20 秒)只是测试一些东西。该过程应在 20 秒后继续。在我的 module_init 函数中,我使用了这样的计时器:
init_timer(&timer);
timer.expires = jiffies + HZ*20;//timer expires in delay ticks
timer.data = 0;//zero is passed to the timer handler
timer.function = timer_handle;//function to run when timer expires
“计时器”是一个这样定义的结构
static struct timer_list timer;
timer_handle 是我在计时器到期时运行的函数:
void timer_handle (unsigned long data){
}
现在在我的功能中:
ssize_t write(struct file *filp, const char *buff, size_t count, loff_t *offp) {
unsigned long ret;
printk(KERN_INFO "pid : .%d \n", task->pid);
down_write(&rwsem);
if ( (filp->f_flags & O_ACCMODE) == O_RDONLY)
{
printk(KERN_INFO "The reader thread is not able to write. \n");
return -EINVAL;
}
printk(KERN_INFO "Inside write 1 \n");
add_timer(&timer);
ret = copy_from_user(bufferr, buff, count);
up_write(&rwsem);
printk("Inside write 2 \n");
return count;
}
"printk(KERN_INFO "里面写\n");"之后 我想让进程等待 20 秒。消息“Inside write 2 \n”必须在 20 秒后写入消息“Inside write 1 \n”。我使用了 add_timer(&timer); 他们之间,但它不起作用。我在终端中输入“dmesg”,消息立即连续写入。
我希望我清楚地解释了我的问题:) 有人可以帮助我吗?