2010-10-28 93 views

回答

1

最好的我可以告訴,萊納斯從未將ktimer patch納入發展的主線。請注意,該補丁包含使用start_ktimer的示例(請參閱fs/exec.c)。 如果您特別想使用ktimers,則需要將內核版本2.6.13的補丁向前移植到2.6.32內核。另一方面,如果您只需要一個定時器機制,標準內核定時器API就可以工作。有關如何使用此API以及示例的詳細討論,請參閱Linux設備驅動程序手冊的Chapter 7,具體而言,標題爲「定時器API」(第198頁)的部分。在這種情況下,相當於start_ktimer()的是add_timer()

1

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");