2005-7-27 14:18
rainyor
请问在驱动中定期的执行一个任务啊,比如说,我在驱动中要每隔1秒,调用printk打印出一条指令,好像要用定时中断来实现的,大家有没有这方面的经验啊。当然放在用户空间里就很容易实现了
2005-7-27 16:33
bjwf
linux Kernel Timer API<br /><br />($LINUX_SRC)/include/linux/timer.h<br /><br />extern int timer_pending(struct timer_list * timer);<br />extern void add_timer(struct timer_list * timer);<br />extern int del_timer(struct timer_list * timer);<br />extern int mod_timer(struct timer_list *timer, unsigned long expires);<br />
2005-7-27 19:03
rainyor
能够说的详细点吗?在设备上主动执行感觉怪怪的
2005-7-28 10:50
bjwf
看那几个函数的名子还不知道怎么做吗?<br />再看看timer.h 就明白了. <!--emo&:grin:--><img src='style_emoticons/default/grin.gif' border='0' style='vertical-align:middle' alt='grin.gif' /><!--endemo--> <br /><br /><br />在timer.h里struct timer_list 定义如下:<br />struct timer_list {<br /> struct list_head entry;<br /> unsigned long expires;<br /> unsigned long data;<br /> void (*function)(unsigned long);<br /><br /> unsigned long magic;<br /> unsigned long lock;<br /> struct tvec_t_base_s *base;<br />};<br /><br />所以想设个timer的话,这样做:<br />//定义一个函数,做handler<br />void tm_handler(unsigned long)<br />{<br /> printk("timer active\n");<br />}<br /><br />//加一个timer.<br />int sec = 1; //每秒一次<br />struct timer_list tm;<br />tm.magic = 0;<br />tm.lock = 0;<br />tm.base = NULL;<br />tm.expires = sec * HZ + jiffies;<br />tm.function = tm_handler;<br />add_timer(&tm);<br /><br /><br /><br />
2005-7-28 12:23
无双
good bjwf兄内核水平不错
2005-7-28 14:54
rainyor
我按照bjwf方法做了,不过出现以下提示,还有要特别注意的地方吗<br />bug: kernel timer added twice at c48300e0.
2005-7-29 10:09
irror
studying...
2005-7-29 12:33
无双
rainyor<br /><br />提示不是提示的很清楚了<br /><br />自己照它的提示去解决就可以了
页:
[1]
Powered by Discuz! Archiver 5.5.0
© 2001-2006 Comsenz Inc.