深入浅出分析Linux设备驱动程序中断

http://tech.ddvip.com   2006年11月19日    社区交流

本文详细介绍深入浅出分析Linux设备驱动程序中断

  三、IRQ

  并不是每个设备都可以向中断线上发中断信号的,只有对某一条确定的中断线勇有了控制权,才可以向这条中断线上发送信号。由于计算机的外部设备越来越多,所以15条中断线已经不够用了,中断线是非常宝贵的资源。要使用中断线,就得进行中断线的申请,就是IRQ(Interrupt Requirement),我们也常把申请一条中断线成为申请一个IRQ或者是申请一个中断号。

  IRQ是非常宝贵的,所以我们建议只有当设备需要中断的时候才申请占用一个IRQ,或者是在申请IRQ时采用共享中断的方式,这样可以让更多的设备使用中断。

  无论对IRQ的使用方式是独占还是共享,申请IRQ的过程都是一样的,分为3步:

  1.将所有的中断线探测一遍,看看哪些中断还没有被占用。从这些还没有被占用的中断中选一个作为该设备的IRQ。

  2.通过中断申请函数申请选定的IRQ,这是要指定申请的方式是独占还是共享。

  3.根据中断申请函数的返回值决定怎么做:如果成功了万事大吉,如果没成功则或者重新申请或者放弃申请并返回错误。

  申请IRQ的过程,在参考书的配的源代码里有详细的描述,读者可以通过仔细阅读源代码中的short一例对中断号申请由深刻的理解。

  四、中断处理程序

  Linux中的中断处理程序很有特色,它的一个中断处理程序分为两个部分:上半部(tophalf)和下半部(bottom half)。之所以会有上半部和下半部之分,完全是考虑到中断处理的效率。

  上半部的功能是"登记中断"。当一个中断发生时,他就把设备驱动程序中中断例程的下半部挂到该设备的下半部执行队列中去,然后就没事情了--等待新的中断的到来。这样一来,上半部执行的速度就会很快,他就可以接受更多她负责的设备产生的中断了。上半部之所以要快,是因为它是完全屏蔽中断的,如果她不执行完,其它的中断就不能被及时的处理,只能等到这个中断处理程序执行完毕以后。所以,要尽可能多得对设备产生的中断进行服务和处理,中断处理程序就一定要快。

责编:豆豆技术应用

正在加载评论...