Die Frage war ja nur Aufgrund des extrem unsicheren System Calls, der demnächst ersetzt wird.
Ich mache mir momentan Gedanken darüber, wie ich den Mikrokernel erweitern kann, um das Ausführen von Treibern zu ermöglichen. Der erste Schritt, also das Ausführen von Programmen im ELF-Format ist dahingehend getan, da dies mittlerweile funktioniert.
Nun müssen die Treiber ja, zumindest Teilweise, auf verschiedene Ports zugreifen (Grafiktreiber, Netzwerktreiber, Soundtreiber, ...). Aus diesem Grund habe ich einen System Call eingebaut, der den gewünschten Port aktiviert, damit dieser in Ring 3 funktioniert.
Als nächstes müsste noch ein System Call eingebaut werden, der eine Speicherseite reserviert und irgendwohin auf irgendeine beliebige Speicherseite legt, was denke ich mal vom Heapmanager des Tasks genutzt wird. Des weiteren den Gegenpart dazu, das Freigeben einer bestimmten Speicherseite, falls diese in den Usermode gemappt wurde. Natürlich muss geprüft werden, ob es diese Adresse, diesen Adressbereich, wirklich gibt.
Als weiteres benötigen bestimmte Treiber bestimmte Hardwareadressen. Mir fällt da momentan nur der Grafiktreiber mit der Speicherseite 0xb8000 ein. Diese Anforderung würde ich entgegennehmen, an eine beliebige Stelle mappen und dann diese virtuelle Adresse an den Task zurückgeben. Natürlich muss auch hier geprüft werden, ob es diese Adresse, diesen Adressbereich, wirklich gibt.
Auch müsste ich irgendwie mein System umbauen, damit bei einem IRQ für die Netzwerkkarte auch dessen Handler aufgerufen wird. Wie ich das umsetze, muss ich noch herausfinden.
[edit]
Was mir nun noch eingefallen ist, ist dass der Treiber bestimmte Funktionalitäten bereitstellen muss, auf die von anderen Treibern zugegriffen werden kann, also IPC und im Falle des Grafiktreibers würde erst einmal der RPC ausreichen...
[/edit]
Das ist erst einmal alles, was mir so eingefallen ist. Gibt es noch Dinge, die ich vergessen habe, oder die man besser anders löst?
Gruß Christian