中断处理程序异步发生,因此不能被其他函数调用。那么,为什么linux内核中的中断处理程序返回一个值呢?输入参数如何传递给它?Linux内核中的中断处理程序的返回值
1
A
回答
3
由于几个原因,中断处理程序具有返回值。
- 中断向量可以在多个设备之间共享。通过返回IRQ_NONE/IRQ_HANDLED,中断处理程序可以指示中断是否来自它特别感兴趣的设备。如果返回IRQ_NONE,则应该调用列表中的下一个处理程序。
- 即使不共享IRQ,中断处理程序也可以向中断子系统指出处理中断时出现了问题,并且应该禁用它以防止系统从irq循环挂起。
1
中断处理程序不是中断向量。中断向量是触发中断时处理器跳转到的代码。这是一个粗略的简化,但这里是它的外观:
interrupt_vector {
num = check_interrupt_number()
f = get_interrupt_handler_func(num);
d = get_interrupt_handler_data(num);
/* call interrupt handler */
ret = f(d);
}
所以处理程序和数据一起登记,并中断向量代码调用registererd处理程序,通过注册数据,并检查返回值。 当然,这里我们只有一级处理程序,但是您可以有多个处理程序,例如所有PCI Irq的处理程序,它们轮流检查特定PCI irq的注册处理程序,并最终调用它以传递注册数据等。 ..
当然,真正的代码往往要复杂得多。您可以尝试使用lxr link来浏览Linux内核源代码。
0
中断矢量代码与多个附接的中断处理程序(OS特定的)到一个中断处理程序—可以返回一个值(其通常进入像EAX在x86的寄存器),因此,矢量码可以管理一连串的处理程序。
相关问题
- 1. PCIe中断处理linux内核
- 2. Linux内核 - 中断
- 3. linux内核的中断
- 4. Linux内核中的主要页面错误处理程序
- 5. 键盘中断处理程序为自己的内核(C)
- 6. Linux分页和中断处理程序
- 7. linux内核中断劫持
- 8. 在linux内核中的tcp处理后的数据包处理
- 9. 触发内核中断处理程序:如何?
- 10. 如何用Linux内核中的用户定义处理程序替换缺省处理程序,该处理程序处理生成核心转储的异常?
- 11. 映射Linux内核中的DMA中断
- 12. UART 16550和Linux内核中的中断
- 13. GPIO引脚linux中的中断处理程序(arm)
- 14. 在Android/Linux内核中处理杀掉的进程。
- 15. 处理内核中的异常返回到用户文本后
- 16. 处理中断的程序,即中断处理程序存储在哪里?
- 17. 如何保护Linux内核中多个中断处理程序之间共享的数据?
- 18. Linux内核编程:“无法处理内核NULL指针引用”
- 19. 在中断处理程序
- 20. Linux中的并行中断处理
- 21. 如何识别运行中断处理程序的核心?
- 22. jquery事件处理程序返回值
- 23. 完成处理程序和返回值
- 24. 在Linux内核中跟踪中断
- 25. linux的arm中断处理程序在哪里?
- 26. 如何从承诺中的事件处理程序返回值?
- 27. Httpcontext.request(“”)正在返回ashx处理程序中的空值
- 28. 如何从iOS中的TWRequestHandler完成处理程序返回值?
- 29. 在异常处理程序内部创建的Linux内核线程停止
- 30. 在Linux内核中拦截异常处理程序的最佳实践
`IRQ_WAKE_THREAD`也可用于延迟处理更新的Linux内核。也就是说,它表示当前进程可能被中断以执行中断的一个*慢*部分。 – 2014-11-19 20:57:27