2013-01-17 8 views
5

共有割り込みラインの場合、私はいくつかの割り込みハンドラを持つことができます。カーネルは、その特定の共有行のすべてのハンドラを順番に起動します。 私が知っている限り、呼び出された各ハンドラは、呼び出される正しいハンドラであるかどうかをカーネルに通知します。共有割り込みラインの場合、使用する割り込みハンドラはどのようにして見つけられますか?

私の質問は、特定のデバイスのステータスを伝えるメモリマップされたレジスタをチェックする方法はありますか、または他のハードウェアメカニズムがありますか?ハンドラは、対応するデバイスが割り込みを発行したかどうかをどのように知っていますか?

この情報は、デバイスとプロセッサ割り込みラインの間にある割り込みコントローラによって中継されますか?

+0

http://unix.stackexchange.com/questions/47306/how-does-the-linux-kernel-handle-shared-irqs –

答えて

3

カーネルは、その特定の共有行のすべてのハンドラを順番に呼び出します。

正確に。 Dev1とDev2がIRQ10を共有しているとします。割り込みが発生すると、この行に登録されたISRが1つずつ呼び出されます。

私たちのscnarioでは、Dev2が割り込みを生成しているとします。 Dev1のISRが最初に登録された場合、そのISRは最初に呼び出されます。そのISRでは、割り込みステータスレジスタが割り込みのために検証されます。割り込みビットがセットされていなければ、割り込みはDev2ではないことを確認できます。次のISR(すなわち、Dev1のISR)が呼び出される。

詳細については、戻り値IRQ_NONE/IRQ_HANDLEDを参照してください。

ハンドラは、対応するデバイスが割り込みを発行したかどうかをどのように知っていますか?

割り込みステータスレジスタだけを読み取ることによって。

この情報は、デバイスとプロセッサの割り込みラインの間の割り込みコントローラによって中継されますか?

これについてはわかりません。しかし、OSはISRからの戻り値に基づいてISRを呼び出すことに注意します。

+0

こんにちはJeyram、 DEV1とDEV2は、同じデバイスタイプであるが、異なる場合デバイス(例えば、dev1は通常のマウス、例えばdev2はゲームマウス)。 それはデバイスの種類を知っているかもしれませんが、dev1の割り込みハンドラは戻り値に正しいハンドラがないことをどのように確認しますか? – Rohit

+0

'同じデバイスタイプ' ... ...両方のデバイスの同じドライバを意味しますか? – Jeyaram

+0

OSが使用するISRの戻り値。次のデバイスのISRではありません。戻り値のみに基づいて、OSは、IRQ回線に登録された次のISRを呼び出すかどうかを決定します。 – Jeyaram

関連する問題