Autor Thema: Keyboard Treiber und Weitere Schritte  (Gelesen 4805 mal)

JustJim

  • Beiträge: 20
    • Profil anzeigen
Gespeichert
« am: 01. December 2013, 21:16 »
Hallo!
Es ist zwar kein Problem, aber ich wollte dennoch einfach mal fragen.
Ich hab einen kleinen Keyboardtreiber geschrieben, der die gängigsten Operationen beherrscht (Eingabe, Shift, Backspace, Enter).
Wenn ich das in Bochs starte und z.B. 'ä' ,'ü' 'ß' 'Alt Gr' drücke, krieg ich die nachricht, dass diese Keys nicht gemappt sind.
Wie kann ich das umgehen?

Weiterhin wollte ich einfach mal Fragen, wie ich mit dem ganzen umgehe.
Ich habe jetzt eine Ausgabefunktion für VGA und einen Eingabetreiber.
Sollte ich jetzt einen Prozess 'Terminal' erstellen, der beim Start automatisch aufgerufen wird und die Eingabe z.B. in nem Array speichert und mit im Programm hinterlegten Befehlen vergleicht und auswertet?

Was wäre der nächste logische Schritt beim OS-Deving?
Bin ich jetzt besser beim Multithreading aufgehoben? Weil ich hab die befürchtung, dass ich das im reinen Terminalmodus
noch garnicht sinnvoll verwenden kann.

Wie kann man es z.B. Anstellen eine Art kleines textpasiertes Paintprogramm zu erstellen?
Wie kann man z.B. Daten am besten speichern? Verkettete Liste? Oder kann man tatsächlich z.B. .txt Datein erstellen.
Aber wo speichern?

Viele Fragen und ich hoffe auf rege Antworten!
Vielen Dank im Vorraus!!!
for(i=0; i<=length_of_ife; i++)
{
  learn(All);
}

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 01. December 2013, 22:13 »
An deiner Stelle würde ich einfach mal anfangen, Userspace-Programme (also nicht in den Kernel einkompiliert) zu schreiben und dann Schritt für Schritt diejenigen Kernelfunktionen nachzurüsten, die deine Programme im Moment brauchen. Das setzt natürlich voraus, dass du Programme überhaupt schon starten kannst; wenn nicht, wäre das der erste Schritt.

Was Ein- und Ausgabe angeht, gibt es verschiedene Möglichkeiten. Du könntest zum Beispiel einfach spezielle Syscalls anbieten, die ein Zeichen von der Tastatureingabe lesen und etwas auf den Bildschirm schreiben. Oder du könntest es unixmäßig machen und für stdin und stdout ganz normale Dateideskriptoren benutzen, die man dann mit read() und write() benutzt, wie man man mit einer Datei arbeiten würde. Oder du denkst dir was ganz anderes aus. ;)

Zum Thema Daten speichern: Du brauchst einen Festplattentreiber (oder Floppy oder was auch immer du benutzen willst), der in der Regel sektorweisen Zugriff auf die Platte ermöglicht. Darauf aufsetzen kann dann ein Dateisystemtreiber z.B. für FAT oder ext2, der dir dann echte Dateien zur Verfügung stellt.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

JustJim

  • Beiträge: 20
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 01. December 2013, 22:39 »
Hehe nein. Programme kann ich noch nich starten. Aber das dürfte ja soweit kein Problem sein, als das Programme ja nichts weiter als C-Codes sind und als "Prozesse" ausgeführt werden.
Ich dachte eig. evtl ein Terminalprozess zu starten, von wo aus man die Programme starten kann. Sowas wie ne Konsolenumgebung also.
Bis jetzt ist mein OS nur so weit:
Kernel startet -> init GDT -> init IDT -> init IRQs -> init ISR -> init Timer -> init Keyboard.
Bis jetzt gibt er nur sowas wie "Willkommen" aus und dann kann man tippen soviel man will. Also noch nichts großartiges, obwohl es mir eig ziemlich
gut gefällt haha.
for(i=0; i<=length_of_ife; i++)
{
  learn(All);
}

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 01. December 2013, 22:57 »
Wenn ich das in Bochs starte und z.B. 'ä' ,'ü' 'ß' 'Alt Gr' drücke, krieg ich die nachricht, dass diese Keys nicht gemappt sind. Wie kann ich das umgehen?
Du könntest sie mappen. :-) Neben Englisch ist Deutsch da noch genügsam: Die Codepage 437 (Standardeinstellung) enthält alle benötigten Zeichen. Wenn du Dateien einliest, wirst du die Umlaute aber an anderen Stellen finden.

Sollte ich jetzt einen Prozess 'Terminal' erstellen, der beim Start automatisch aufgerufen wird und die Eingabe z.B. in nem Array speichert und mit im Programm hinterlegten Befehlen vergleicht und auswertet?
Du wirst vermutlich Programme schreiben wollen, z.B. eine Shell. Ein zeichen- oder zeilenbasiertes Interface ist recht einfach zu bauen.

Für eine Art "Textmodus-Paint" musst du die Cursorposition irgendwie ändern können, auch verschiedene Farben wären nicht schlecht. Da kannst du dir etwas eigenes ausdenken oder einen existierenden Standard implementieren (z.B. ANSI Escape-Codesequenzen). Das passiert dann aber im VGA-Treiber.

Bin ich jetzt besser beim Multithreading aufgehoben? Weil ich hab die befürchtung, dass ich das im reinen Terminalmodus
noch garnicht sinnvoll verwenden kann.
Du kannst die serielle Schnittstelle benutzen (in Qemu mit Strg+3 erreichbar, mit Strg+1 geht's wieder zurück). Dann hast du sozusagen zwei Bildschirme und zwei Tastaturen, zwischen denen du umschalten kannst (die Qemu-Darstellung der seriellen Schnittstelle kann übrigens ANSI), um das ein bisschen zu testen. "Mehrere Programme gleichzeitig" ist aber erst der Schritt nach "ein Programm gleichzeitig".

Programme kann ich noch nich starten. Aber das dürfte ja soweit kein Problem sein, als das Programme ja nichts weiter als C-Codes sind und als "Prozesse" ausgeführt werden.
Die ersten Programme wirst du vermutlich als Multiboot-Modul starten wollen. Fang also erstmal damit an, ein von GRUB geladenes Speicherstück in einen Prozess umzuwandeln. :-)

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 02. December 2013, 09:33 »
Hehe nein. Programme kann ich noch nich starten. Aber das dürfte ja soweit kein Problem sein, als das Programme ja nichts weiter als C-Codes sind und als "Prozesse" ausgeführt werden.
Im Prinzip ist das einfach, ja. Irgendwie haben wir es in tyndur aber trotzdem geschafft, immer wieder Bugs im ELF-Loader zu haben. ;)

Zitat
Bis jetzt ist mein OS nur so weit:
Kernel startet -> init GDT -> init IDT -> init IRQs -> init ISR -> init Timer -> init Keyboard.
Vermutlich wäre dann irgendwann in nächster Zeit auch eine Speicherverwaltung sinnvoll. Ich würde dir vorschlagen, dass du dich ein bisschen durchs Tutorial liest (wahrscheinlich vor allem ab Teil 7). Du musst das ja nicht eins zu eins so umsetzen, aber als Anregung ist es sicher hilfreich.

Zitat
Bis jetzt gibt er nur sowas wie "Willkommen" aus und dann kann man tippen soviel man will. Also noch nichts großartiges, obwohl es mir eig ziemlich
gut gefällt haha.
Das ist sowieso ein guter Ansatz. Solange es noch Sachen gibt, die dir gefallen würden, und die nicht tun, implementier einfach die. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen