Autor Thema: Fragen zu GRUB  (Gelesen 10534 mal)

bscreator

  • Gast
Gespeichert
« am: 21. June 2011, 09:38 »
Da ihr mir immer wieder eingebleut habt, GRUB zu verwenden (und auch recht habt), hab ich anfangs ein paar Fragen zum Umgang mit GRUB:
- Macht GRUB nichts anderes, als das PM-Bit zu setzen, oder verwendet es eine eigene vorgefertigte GDT-Variante, die man als Entwickler dann verwenden muss ?
- Kann man auch eine eigene GDT-Variante verwenden, z.B. falls man ein OS für 286-PM schreiben will ?
- Ich hab gelesen, dass GRUB ziemlich viel bereitstellt. Muss man dann keine Treiber für z.B. FAT oder ähnliches schreiben, was ja eigentlich zur OS-DEV dazugehört ?
- Kann man auch ein eigenes Dateisystem, das man selber entworfen hat, verwenden ?


Gruss,
bsc

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 21. June 2011, 09:56 »
Hallo


- Macht GRUB nichts anderes, als das PM-Bit zu setzen, oder verwendet es eine eigene vorgefertigte GDT-Variante, die man als Entwickler dann verwenden muss?
GRUB lädt Dir in erster Linie die Komponenten Deines OS in den Speicher und startet dann Deinen Kernel. Ein bisschen mehr als "PM-Bit setzen" ist das schon.

- Kann man auch eine eigene GDT-Variante verwenden, z.B. falls man ein OS für 286-PM schreiben will?
Man kann auch eine eigene GDT aufsetzen, man sollte sogar da die GDT von GRUB ja nicht dort liegt wo das OS sie gerne hätte.
GRUB läuft nicht auf 286 oder kleiner, also wenn Du (trotz aller Warnungen) ein OS für den 286 bauen möchtest ist GRUB das falsche Werkzeug.

- Ich hab gelesen, dass GRUB ziemlich viel bereitstellt. Muss man dann keine Treiber für z.B. FAT oder ähnliches schreiben, was ja eigentlich zur OS-DEV dazugehört?
GRUB stellt nur die Dinge bereit die man benötigt um sein OS und dessen Komponenten (Treiber, initrd, usw.) in den Speicher zu bekommen, dazu liefert GRUB noch einige Informationen (Memory-Map ....) über das System. Sobald das OS die Kontrolle über den Computer übernommen hat ist GRUB zu nichts mehr nützlich. Eventuell gibt es Wege die Dienste des GRUB noch darüber hinaus in Anspruch zu nehmen aber ich glaube nicht das sowas zuverlässig funktioniert.

- Kann man auch ein eigenes Dateisystem, das man selber entworfen hat, verwenden?
Man kann in GRUB auch Treiber für eigene Dateisysteme einbinden. Aber ein anständiges Dateisystem zu designen ist eine echte Herausforderung, konzentriere Dich lieber auf Dein eigentliches Ziel (das ist schwer genug).


Grüße
Erik
Reality is that which, when you stop believing in it, doesn't go away.

bscreator

  • Gast
Gespeichert
« Antwort #2 am: 21. June 2011, 11:36 »
Das alles hat mir schon sehr geholfen.

- Also muss ich als Grundlage zuerst eine Basis für mein OS schaffen, in Form einer GDT, die an mein OS angepasst ist, oder ?

Zitat
GRUB stellt nur die Dinge bereit die man benötigt um sein OS und dessen Komponenten (Treiber, initrd, usw.) in den Speicher zu bekommen, dazu liefert GRUB noch einige Informationen (Memory-Map ....) über das System.
Also macht GRUB nichts anderes, als den Kernel (in dem sich alle Treiber und auch die GDT befinden sollte) an eine bestimmte Stelle im Arbeitsspeicher "abzulegen", oder ?

Zitat
Man kann in GRUB auch Treiber für eigene Dateisysteme einbinden. Aber ein anständiges Dateisystem zu designen ist eine echte Herausforderung, konzentriere Dich lieber auf Dein eigentliches Ziel (das ist schwer genug).
Zum Verständnis nochmal : Kann ich z.B. die Tabelle des FAT12 selbst schreiben und laden oder muss ich das GRUB überlassen ?
- Dann ist eigentlich Assemblercode nur noch für die Erstellung einer GDT notwendig, sowie für die Erstellung der Bibliotheken für z.B. printf,... die in C nötig sind, oder ?

- Den Kernel kann ich dann leicht in C anfertigen

Bitte korrigiert mich, falls ich falsch liege.

Gruss,
bsc
« Letzte Änderung: 21. June 2011, 12:06 von bscreator »

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 21. June 2011, 12:26 »
Hallo,


- Also muss ich als Grundlage zuerst eine Basis für mein OS schaffen, in Form einer GDT, die an mein OS angepasst ist, oder ?
Ja. Für diese Basis solltest Du Dich eventuell an die vielen Tutorials im iNetz und hiesigen Wiki halten. Wenn Du ein paar davon erfolgreich durchgearbeitet hast solltest Du in der Lage sein was eigenes auf die Füße zu stellen.

Also macht GRUB nichts anderes, als den Kernel (in dem sich alle Treiber und auch die GDT befinden sollte) an eine bestimmte Stelle im Arbeitsspeicher "abzulegen", oder ?
Ein bisschen komplexer ist das schon aber im wesentlichen: ja. Diese "bestimmte Stelle" ist aber mehrdeutig da es ja den virtuellen Adressraum (vor dem Paging) wie auch den physischen Adressraum (nach dem Paging) gibt.
Ob die Treiber wirklich Teil des Kernels sein müssen ist eine grundsätzliche Design-Entscheidung, siehe "Micro-Kernel vs. Monolith".

Zum Verständnis nochmal : Kann ich z.B. die Tabelle des FAT12 selbst schreiben und laden oder muss ich das GRUB überlassen ?
Ich verstehe absolut nicht was diese Frage bedeuten soll.
Die Dateisystemtreiber von GRUB sind auf das absolut Notwendigste beschränkt (bieten also nur Lesen und kein Schreiben und sind nicht auf Geschwindigkeit sondern auf extreme Simplizität optimiert) wogegen ein Dateisystemtreiber in einem OS einen deutlich größeren Funktionsumfang bieten muss. Auch die Treiber für das entsprechende Block-Device (also die Festplatte, USB-Stick oder Floppy auf dem das betreffende Dateisystem liegt) sind in GRUB deutlich einfacher als das in einem üblichen OS der Fall ist.

- Dann ist eigentlich Assemblercode nur noch für die Erstellung einer GDT notwendig, sowie für die Erstellung der Bibliotheken für z.B. printf,... die in C nötig sind, oder ?
Die Menge an Assembler die für OS-Dev benötigt wird ist klein und überschaubar. Auch das sollte aus den üblichen Tutorials klar hervorgehen.

- Den Kernel kann ich dann leicht in C anfertigen
Ja. Oder jeder anderen generischen Hochsprache für die anständige Compiler verfügbar sind.


Grüße
Erik
Reality is that which, when you stop believing in it, doesn't go away.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 21. June 2011, 12:31 »
Ich verstehe absolut nicht was diese Frage bedeuten soll.
Die Dateisystemtreiber von GRUB sind auf das absolut Notwendigste beschränkt (bieten also nur Lesen und kein Schreiben und sind nicht auf Geschwindigkeit sondern auf extreme Simplizität optimiert) wogegen ein Dateisystemtreiber in einem OS einen deutlich größeren Funktionsumfang bieten muss.
Vor allem ist er nichts, was das OS irgendwie benutzen könnte, sondern hat nur den Zweck, dass GRUB den Kernel von der Festplatte in den Speicher laden kann. Danach wird der Treiber nicht mehr benutzt.

Zitat
Auch die Treiber für das entsprechende Block-Device (also die Festplatte, USB-Stick oder Floppy auf dem das betreffende Dateisystem liegt) sind in GRUB deutlich einfacher als das in einem üblichen OS der Fall ist.
Naja, GRUB hat keinen eigenen Treiber dafür. int 13h halt, der Treiber im guten alten BIOS. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bscreator

  • Gast
Gespeichert
« Antwort #5 am: 21. June 2011, 13:18 »
Zitat
Die Dateisystemtreiber von GRUB sind auf das absolut Notwendigste beschränkt (bieten also nur Lesen und kein Schreiben und sind nicht auf Geschwindigkeit sondern auf extreme Simplizität optimiert) wogegen ein Dateisystemtreiber in einem OS einen deutlich größeren Funktionsumfang bieten muss. Auch die Treiber für das entsprechende Block-Device (also die Festplatte, USB-Stick oder Floppy auf dem das betreffende Dateisystem liegt) sind in GRUB deutlich einfacher als das in einem üblichen OS der Fall ist.
Tut mir leid, aber ich weiß wirklich nicht, was diese Antwort bedeuten soll.
Heißt das, dass das Dateisystem, die Dateisystemtreiber, die man dazu braucht alle schon in GRUB vorliegen ? Muss man dann GRUB nur mitteilen (durch setzen eines einfachen Bits z.B), welches Dateisystem man verwenden will und GRUB erledigt den Rest (wie Dateisystemtabelle in Speicher laden, usw.).

Denn soviel ich weiß, gehört zu einem Betriebssystem auch selbst geschriebene Treiber zum Zugriff auf die Hardware wie das Dateisystem. Wenn der in GRUB schon vorliegt, wozu dann ein Betriebssystem programmieren ? Wozu brauch ich dann noch einen Kernel ? Nur um in GRUB ein paar Bits zu setzen und mich dann an dem, was mir GRUB zusammenbastelt zu erfreuen ?

Bitte nicht falsch verstehen, ich bin absolut nicht gegen GRUB, aber Treiber usw. gehören doch auch noch zum einfachsten OS dazu. Und die sollte man doch auch noch selber schreiben, sonst kann man ein OS nicht OS nennen (Laut Andrew S. Tanenbaum). Halt Fehler : Man kann es dann "My_GRUB_build_OS" nennen.
« Letzte Änderung: 21. June 2011, 13:29 von bscreator »

Fukano

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 21. June 2011, 14:12 »
Du hast glaube ich noch kein Blick auf die Wiki Startseite gewornfe und die Postings der anderen liest du auch nicht richtig durch ist mein Endruck, hier wurde ziemlich genau erklärt was GRUB macht und was GRUB NICHT macht. Lies am besten die Osdev für Einsteiger Reihe mal durch un dlies dir alle verlinkten Artikel durch, dadurch sollten deine Fragen eigentlich alle beantwortet werden.

Fukano

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 21. June 2011, 14:21 »
Keine Sorge, es bleibt noch genug für dich zu implementieren übrig. GRUB ist nur ein Bootloader. Er lädt deinen Kernel und ggf. noch zusätzliche Dateien in den Speicher, stellt dir einen definierten Anfangszustand (im Protected Mode) her und springt in deinen Kernel. Er übergibt dir noch eine Struktur, die Informationen z.B. über den Speicher enthalten. Und das war's dann auch schon wieder.

GRUB hat natürlich (Readonly-)Dateisystemtreiber, für seinen eigenen Gebrauch. Wenn du ihm sagst, er soll kernel.elf von der Festplatte laden, muss er das ja irgendwie hinkriegen. Dieser Dateisystemtreiber spielt für dich als OS aber keine Rolle. Wenn dein OS gestartet ist, kannst du GRUB als beendet ansehen. Dessen Dateisystemtreiber bringt dir daher im Kernel rein gar nichts mehr.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #8 am: 24. June 2011, 09:45 »
Du musst GRUB als komplett eigenständig und unabhängig von deinem Betriebssystem sehen. Das einzige, was GRUB für deinen Kernel macht und was du quasi weiterbenutzen kannst, ist, dass dein Kernel in den Arbeitsspeicher geladen wird, Module geladen werden und du im Protected Mode bist. Aber die GDT zum Beispiel musst du neu aufsetzen, die Module sind zwar im Speicher aber die musst du auch noch laden und ggf. als Task ausführen etc.

GRUB ist also kein "Spielverderber" und nimmt dir den Großteil der Arbeit ab, er erleichtert lediglich den Teil der Arbeit, auf welchem man sich als Betriebssystementwickler nicht konzentrieren will und mit GRUB herrlich einfach gemacht werden kann - das Laden des Kernels.
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

bscreator

  • Gast
Gespeichert
« Antwort #9 am: 25. June 2011, 07:42 »
Hört sich auf jeden Fall gut an.

Also ohne einen Kernel in C programmieren zu können, muss ich eine GDT aufsetzen. Oder kann ich das auch später machen und hals über kopf versuchen, einen vorgefertigten Kernel zu verwenden ?

Brauch ich für GRUB noch irgendeine Art von Konfigurationsdatei, oder kann ich "sofort loslegen" ?

Viele Grüße
bsc

DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #10 am: 25. June 2011, 12:24 »
Sorry bscreator, aber verdammt noch mal LIES doch endlich mal ein Tutorial.

Das hier sollte ein guter Einstieg sein. Vorgefertigter Kernel klingt mir sehr nach "einfach kopieren, damit's läuft" - keine gute Idee. GRUB braucht eine Konfigurationsdatei, in welcher du angibst, wie dein Kernel heißt und ob evt. noch Module geladen werden sollen. Du musst natürlich eine neue GDT aufsetzen, kannst du aber auch in C machen.
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

Dimension

  • Beiträge: 155
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 25. January 2012, 16:42 »
Evtl. Noch das hier von Interesse: http://osdev.berlios.de/grub.html und das hier: http://www.gnu.org/software/grub/manual/multiboot/multiboot.html#Header-graphics-fields in den Google-Ergebnissen ganz oben :lol:.

 

Einloggen