2013-01-17 2 views
5

Für eine gemeinsame Interrupt-Leitung kann ich mehrere Interrupt-Handler haben. Der Kernel ruft nacheinander alle Handler für diese bestimmte gemeinsam genutzte Leitung auf. Soweit ich weiß, informiert jeder Handler beim Aufruf den Kernel, ob der richtige Handler aufgerufen wurde oder nicht.Wie finde ich für eine gemeinsame Interrupt-Leitung welchen Interrupt-Handler zu verwenden?

Meine Fragen ist, wie ist das bestimmt, gibt es eine Möglichkeit, überprüft ein Memory-Mapped-Register, das den Status eines bestimmten Geräts oder gibt es einen anderen Hardware-Mechanismus? Wie weiß der Handler, dass das entsprechende Gerät den Interrupt ausgelöst hat oder nicht?

Wird diese Information über den Interrupt-Controller weitergeleitet, der zwischen den Geräten und der Prozessor-Interrupt-Leitung liegt?

+0

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

Antwort

3

Der Kernel ruft nacheinander alle Handler für diese bestimmte gemeinsame Leitung auf.

Genau. Sagen Sie Dev1 und Dev2 teilt den IRQ10. Wenn der Interrupt generiert wird, werden ISRs, die mit dieser Zeile registriert sind, nacheinander aufgerufen.

In unserem Szenario sagen Dev2 Interrupt generieren. Wenn der ISR des Dev1 zuerst registriert wird, dann wird dieser ISR nur zuerst aufgerufen. In diesem ISR wird das Interrupt-Statusregister auf Interrupt überprüft. Wenn kein Interrupt-Bit gesetzt ist, können wir bestätigen, dass Interrupt nicht Dev2 ist. Also wird die nächste ISR (d. h. die ISR von Dev1) aufgerufen.

siehe die Rückgabewerte IRQ_NONE/IRQ_HANDLED für weitere Informationen.

Wie weiß der Handler, dass das entsprechende Gerät den Interrupt ausgelöst hat oder nicht?

Nur durch Lesen des Interrupt-Statusregisters.

Wird diese Information durch den Interrupt-Controller weitergeleitet, der zwischen den Geräten und der Prozessor-Interrupt-Leitung liegt?

Ich bin mir nicht sicher. Das Betriebssystem wird jedoch auf der Grundlage der Rückgabewerte von ISR auf den Aufruf von ISRs achten.

+0

Hallo Jeyram, wenn dev1 und dev2 sind vom gleichen Gerätetyp, aber unterschiedlichen Geräte (zum Beispiel Dev1 ist eine normale Maus, sagen wir Dev2 ist eine Gaming-Maus). Dann könnte es den Gerätetyp wissen, aber wie wird der Interrupt-Handler für dev1 bestätigen, dass es nicht der richtige Handler in seinem Rückgabewert ist? – Rohit

+0

'gleicher Gerätetyp' ... du meinst den gleichen Treiber für beide Geräte ??? – Jeyaram

+0

Rückgabewert der vom Betriebssystem verwendeten ISR. Nicht die ISR des nächsten Geräts. Nur auf der Grundlage des Rückgabewerts entscheidet das Betriebssystem, ob der Anruf oder der nächste ISR für diese IRQ-Leitung nicht angerufen wird. – Jeyaram

Verwandte Themen