调度中断处理程序

时间:2013-04-24 16:40:54

标签: linux-device-driver interrupt-handling

我有一个Linux设备驱动程序,它使用中断处理程序来完成它的工作。

如何安排每隔 X 毫秒(中断线断开)调用中断处理程序?

1 个答案:

答案 0 :(得分:2)

假设您只是在修复中断行之前进行调试,您可以尝试在timer_interrupt中的arch/*/kernel/time.c内调用您的ISR(减去其上下文保存代码)启用中断。如果你需要比滴答源更慢的速率,你将不得不添加一些代码,使它只触发Y刻度中的一个。

如果在中断上下文中运行ISR不是您的目标,并且您只想让下半部分驱动程序代码定期运行,则可以使用计时器API而不是黑客timer_interrupt。在这种情况下,您的ISR代码将不会在中断上下文中执行。

如果您需要比刻度源更快的速率,则可能需要使用高位计时器。在这里,您实际上不会在中断上下文中执行。

有一个很好的介绍高级计时器和here的计时器API。 timer_create( ) man page中有一个示例用户空间计时器。对于内核空间计时器,您需要hrtimer_init()hrtimer_start()。有一个示例hrtimer here。为了让这个定期工作,我想你只需在每次触发或使用SE post中的hrtimer_forward( )解决方案时重置计时器。