Linux中内核计时器实现的示例(在内核2.6.32中)

时间:2010-10-28 03:55:25

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

您能否在Linux中提供内核计时器(start_ktimer)实现的任何基本示例?

2 个答案:

答案 0 :(得分:2)

我能说的最好,Linus从未将ktimer patch纳入开发的主线。请注意,该补丁确实包含使用start_ktimer的示例(请参阅fs / exec.c)。 如果您特别想使用ktimers,则需要将内核版本2.6.13的补丁转发到2.6.32内核。

另一方面,如果您只需要一个计时器机制,标准内核计时器API可能会起作用。有关如何使用此API以及示例的详细讨论,请参阅Linux设备驱动程序一书的Chapter 7,特别是标题为“The Timer API”的节(第198页)。在这种情况下,start_ktimer()的等效值为add_timer()

答案 1 :(得分:2)

Here就是一个例子...... :)简单易行......源代码可用:

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kmod.h>
#include <linux/slab.h>
#include <linux/timer.h>
#include <linux/jiffies.h>
#include <asm/param.h>

struct timer_list exp_timer;

static void do_something(unsigned long data)
{
        printk(KERN_INFO "Your timer expired and app has been called\n");       
}

static int __init tst_init(void)
{       
        int delay = 300;

        printk(KERN_INFO "Init called\n");

        init_timer_on_stack(&exp_timer);

        exp_timer.expires = jiffies + delay * HZ;
        exp_timer.data = 0;
        exp_timer.function = do_something;

        add_timer(&exp_timer);

        return 0;
}

static void __exit tst_exit(void)
{       
        del_timer(&exp_timer);  
        printk(KERN_INFO "Exit called\n");
}

module_init(tst_init);
module_exit(tst_exit);

MODULE_LICENSE("GPL");