Hallo,
ich wüste gerne wie man in einem Micro-Kernel-OS mit shared IRQs umgeht.
Wenn ich das richtig verstehe sind in einem Micro-Kernel-OS die Device-Treiber auch nur ganz normale User-Space-Applicationen die den IRQ per RPC oder einem anderen Inter-Process-Comunication-Mechanismus erhalten müssen da sie ja nicht im Kernel-Space laufen. Ich wollte das so implementieren das ein User-Space-Treiber einen Signal-Handler registriert und diesen Signal-Empfänger nicht für andere Programme freigibt sondern einem IRQ zuweißt. Im Kernel gibt es dann einen (nicht mehrere) generischen IRQ-Handler der nachschaut für welchen IRQ er gerade aufgerufen wurde und dann für den entsprechenden Signal-Handler eine Nachricht generiert. Wenn nun aber mehrere physische Geräte sich einen IRQ teilen dann müsste man ja bei jedem IRQ an mehrere Signal-Handler eine entsprechende Nachricht schicken.
Habe ich da irgendwo einen Denkfehler oder wie löst Ihr dieses Problem?
Eigentlich wollte ich auf meiner Plattform shared IRQs generell verbieten und statt dessen konsequent auf MSI/MSI-X in Zusammenarbeit mit einem ordentlichen IRQ-Controller, der 4096 verschiedene IRQs (zumindest theoretisch, man muss es ja nicht vollständig implementieren) verwalten kann, bauen. Aber leider unterstützt nicht jede PCI/PCI-Express-Hardware MSI/MSI-X so das ich eventuell doch gezwungen bin shared IRQs zu unterstützen.
Grüße
Erik
ich wüste gerne wie man in einem Micro-Kernel-OS mit shared IRQs umgeht.
Wenn ich das richtig verstehe sind in einem Micro-Kernel-OS die Device-Treiber auch nur ganz normale User-Space-Applicationen die den IRQ per RPC oder einem anderen Inter-Process-Comunication-Mechanismus erhalten müssen da sie ja nicht im Kernel-Space laufen. Ich wollte das so implementieren das ein User-Space-Treiber einen Signal-Handler registriert und diesen Signal-Empfänger nicht für andere Programme freigibt sondern einem IRQ zuweißt. Im Kernel gibt es dann einen (nicht mehrere) generischen IRQ-Handler der nachschaut für welchen IRQ er gerade aufgerufen wurde und dann für den entsprechenden Signal-Handler eine Nachricht generiert. Wenn nun aber mehrere physische Geräte sich einen IRQ teilen dann müsste man ja bei jedem IRQ an mehrere Signal-Handler eine entsprechende Nachricht schicken.
Habe ich da irgendwo einen Denkfehler oder wie löst Ihr dieses Problem?
Eigentlich wollte ich auf meiner Plattform shared IRQs generell verbieten und statt dessen konsequent auf MSI/MSI-X in Zusammenarbeit mit einem ordentlichen IRQ-Controller, der 4096 verschiedene IRQs (zumindest theoretisch, man muss es ja nicht vollständig implementieren) verwalten kann, bauen. Aber leider unterstützt nicht jede PCI/PCI-Express-Hardware MSI/MSI-X so das ich eventuell doch gezwungen bin shared IRQs zu unterstützen.
Grüße
Erik

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert


Da habe ich wirklich etwas Ehrfurcht wie weit Ihr damit gekommen seit. 