Linux内核add_timer

时间:2012-05-17 09:45:27

标签: kernel time.h

我正在为内核编写一个模块。我需要等待一段时间(例如; 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  

“timer”是一个像

那样定义的结构
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”Inside inside \ n“)之后;”我想让进程等待20秒。消息“Inside write 2 \ n”必须在20秒后写入“Inside write 1 \ n”信息。我用过add_timer(& timer);他们之间但它不起作用。我在终端输入“dmesg”,并立即连续写入消息。

我希望我能清楚地解释我的问题:)有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

连续立即连续写两条消息,因为它们连续。你正在编程一个计时器而不是延迟,所以内核运行 timer_handle()函数20秒后,在你的情况下是空的。

如果您需要延迟一些代码执行,请阅读Linux Device Driver 3th第7章第3节

答案 1 :(得分:1)

你打错了,因为它是用户触发读取时的写回调。

您想何时注册计时器?我无法理解为什么你在写作。

是定时器应定期定时还是基于某些事件触发器?