2016-05-14 11 views
0

Ich lerne OS-Konzepte. Ich habe einen einfachen Bootloader in ASM und eine Looping-Kernel-Datei in C erstellt. Ich habe beide kompiliert und es funktioniert.Wie erstelle ich eigene Bibliotheken, um mit einem Betriebssystem zu beginnen?

Jetzt muss ich etwas Text mit Kernel drucken, die in C ist. Ich habe gelernt, dass bei der Entwicklung eines Betriebssystems die Verwendung von Standard-Bibliotheksfunktionen entfallen muss. Wie kann ich meine eigene Bibliothek erstellen? Ich möchte einen Text auf dem Bildschirm drucken, ohne eine Standard-Header-Datei hinzuzufügen. Wie kann ich das machen? Sollte ich Inline-Assembly oder andere Methoden verwenden?

Es ist so einfach, meine Frage ist, wie C-Sprache mit der Hardware ohne Standardbibliotheken interagieren kann?

+2

Einfache Antwort: durch direkt auf die Hardware zu sprechen. Andere Antworten werden übermäßig breit sein –

+0

Das ist keine Antwort, aber meine Frage – user3718000

+1

Das ist genau die Antwort. Sie nehmen die Dokumentation und beginnen entsprechend auf die gewünschte Hardware zuzugreifen. –

Antwort

2

Ich mache das gleiche vor 15 Jahren :), Sie sind gezwungen, Ihre eigenen Kernel-Funktionen zu verwenden, basierend auf dem HAL-Konzept (Hardware Abstraction Layer). Sie erstellen ein HAL-basiertes Modul, zum Beispiel einen Bildschirmausgabetreiber. Dieser Treiber sollte aus zwei Seiten bestehen: Die Seite, die mit Ihrem eigenen benutzerdefinierten Betriebssystem in Kontakt steht, und die Seite, die mit Ihrer speziellen Hardware in Kontakt steht. Wenn Sie zu einem bestimmten Zeitpunkt die Hardware ändern, ist Ihr Betriebssystem von dieser Änderung nicht betroffen. Dies nennt man (formal): Interface. Ist ein Software-Muster-Konzept. Gut aussehen. ein sehr interessantes Projekt ist :)

Als Pseudo-Code Beispiel:

// yourclientprogram.c 
include "screendriver.h" 
i = new instance of LCDScreenDriver; 
i.selectScreen(0); 
i.printf("%s","hello"); 

Also, Ihre Kernel-Dateien wird wie folgt aussieht:

//screendriver.h 
class LCDScreenDriver extends ScreenDriver { 
    protected function output(data){ 
     ...very specific ASM code for your LCD monitor goes here.. 
     ...this code is very specific to output a -data- buffer 
     ...and nothing more than this 
    } 
} 

class ScreenDriver { 
    protected function output(data); // a virtual pure function 

    public function printf(args,...){ 
     dataTobePrinted = ..make your own printf methods... 
     this.output(dataToBePrinted); 
    } 
} 
+0

So schreibe ich meinen eigenen Treiber in C. Wie mache ich es ohne Standard-Bibliotheken. Inline-Assembly in C verwenden? – user3718000

+0

Sie sollten eine Teilmenge dieser Standardbibliotheken auswählen, nur diejenigen, die keine Abhängigkeiten zu externem Code oder anderen Bibliotheken haben, die für ein sehr spezielles Betriebssystem entwickelt wurden. – christian