request_irq()在内部做什么?

时间:2016-12-21 07:25:18

标签: linux-kernel kernel linux-device-driver interrupt interrupt-handling

据我所知,“分配中断线”,但

> what is happening after request_irq()?
> How a particular handler is getting called on receiving interrupt?

任何人都可以用代码snipet解释它吗?

1 个答案:

答案 0 :(得分:8)

  

request_irq()之后发生了什么?

设备驱动程序注册中断处理程序,并通过调用request_irq()启用给定的中断行进行处理。

呼叫流程为: -

  1. request_irq() - > setup_irq()注册struct irqaction。
  2. setup_irq() - > start_irq_thread()创建一个内核线程来服务中断线。
  3. 线程的工作在do_irqd()中实现。每个中断行只能创建一个线程,共享中断仍由单个线程处理。

    通过request_irq()使用ISR(中断处理程序)传递给start_irq_thread()。 start_irq_thread()创建一个调用ISR的内核线程。

      

    接收中断时如何调用特定的处理程序?

    当发生中断时,PIC控制器向cpu发出中断信息。

    设备向PIC芯片发送中断,PIC通知CPU发生中断(直接或间接)。当CPU确认"中断发生时#34;信号,PIC芯片将中断号(00h和FFh之间,或0和255十进制)发送到CPU。该中断号用作中断向量表的索引。

    处理器通常将每种中断类型映射到低内存中的相应指针。所有中断类型的指针集合是一个中断向量。向量中的每个指针指向相应中断类型(IRQ线)的ISR。" 中断向量只是一个中断处理程序的一个内存地址。中断向量表是一组由几个存储器地址组成的。"

    进一步阅读http://wiki.osdev.org/Interrupts