您能否在Linux中提供内核计时器(start_ktimer
)实现的任何基本示例?
答案 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");