CDI (Common Driver Interface)


  • Mod

    Das týndur Team entwickelte ein Interface, das das Schreiben von betriebssystemunabhängigen Treibern erlauben soll. Bei folgenden OS wurde es praktisch überprüft und eingesetzt:
    * meinOS
    * MyXomycota
    * Paloxena
    * planlOS
    * týndur

    CDI ist eine C-Bibliothek:
    http://lowlevel.brainsware.org/wiki/index.php/CDI
    Module:
    * Dateisystemtreiber in CDI
    * Treiber fuer Netzwerkkarten
    * Treiber fuer SCSI-Geraete
    * Treiber fuer Massenspeichergeraete
    * Core

    Nach dem einmaligen Implementieren können "CDI-komforme" Treiber einfach mit dieser Bibliothek kompiliert werden. Der CDI-Standard gibt Funktionsprototypen vor. Diese können OS-spezifisch implementiert werden.

    Zum Beispiel greift das OS dann nicht direkt auf die Floppy zu, sondern diese ist ein Massenspeichergerät, also

    read_blocks(floppy, sectorLBA, 18, dma_buffer) anstelle direkt

    dma_buffer = flpydsk_read_sector(sectorLBA)

    Vorteil: Diese Vorgehensweise hilft auf jeden Fall eine Abstraktionsschicht zwischen Hardware und OS anzulegen. Durch dieses Treiber-Interface ist eine leichtere Austauschbarkeit von Geräten (z.B. Floppy vs USB-Stick) gewährleistet.
    Nachteil: für Einsteiger schwieriger zu verstehen (weil indirekt)



  • Ich würde das CDI Interface sehr begrüßen, kann man damit doch recht schnell Treiber schreiben. Ja, es erfordert Lehrnaufwand. Aber, wer sagte schon
    dass OS-Dev einfach ist...?



  • CDI ist im wesentlichen lediglich ein Wrapper über die vom OS ohnehin bereitgestellten Funktionen.

    Den Hauptzweck der Implementation des CDI in PrettyOS sehe ich insofern in der gemeinsamen Nutzung von Treibern mit anderen CDI-konformen OS.
    Ich schlage also vor nicht den Kernel auf CDI-Funktionen (wie z.B. in Rev. 231 in time.c geschehen 🙄 ) umzustellen, sondern einzelne Geräte, z.B. Floppy, Netzwerkkarte, EHCI, ... über CDI anzusteuern, da hier die betriebssystemunabhängige Treiberentwicklung sinnvoll ist, damit die Treiberentwicklung nicht doppelt und dreifach erfolgt.

    Eine Problematik bei der Implementation besteht auf jeden Fall darin, das die CDI die Nutzung der C-Standardlib erlaubt und keinen Wrapper dafür definiert, PrettyOS derzeit aber die C-Standardlib nicht eingebaut hat. Diese Problematik lässt sich aber lösen, entweder durch die Erzeugung eines Wrappers oder durch die Implementation der Standardlib 🙂 Erstes Ziel sollte daher die Implementation der CDI-Header sein, bevor wir uns (wie grad im IRC) den Kopf über die Standardbibliothek zerbrechen.

    mfg
    Mr X


  • Mod

    Den Hauptzweck der Implementation des CDI in PrettyOS sehe ich insofern in der gemeinsamen Nutzung von Treibern mit anderen CDI-konformen OS.

    Ja, das ist genau so gedacht. Die interessante Frage ist nun, welche (CDI-)Treiber man nun gemeinsam entwickeln/austauschen könnte.



  • Inzwischen ist die Umgebung für CDI vorbereitet, jetzt muss es noch implementiert werden.

    Bislang implementiert (Liste wird gelegentlich aktualisiert):

    • cdi/io.h: komplett
    • cdi/cmos.h: komplett
    • cdi/misc.h: cdi_sleep_ms

    Nicht erwähnte Funktionen sind noch nicht implementiert. Bitte helft uns, diese Lücken zu schließen 🙂

    mfg
    Mr. X


Log in to reply