Lowlevel
Lowlevel => OS-Design => Thema gestartet von: thetrue am 11. June 2006, 14:42
-
moin,
ist meine überlegung richtig bzw sinnvoll?
bootloader -----> load kernel ->
|->1. vesa einschalten
|->2. in PMode schalten
|->3. A20 gate einschalten
|->4. Filesystem einbinden (FAT12)
|->5. Wichtige Dateien laden
|->6. GUI etc öffnen
-
mh... dateisystem im bootloader wäre auch sinnvoll....mit vesa kenn ich mich net aus aba glaube das kann man erst im pmode anschalten oder?
-
mh... dateisystem im bootloader wäre auch sinnvoll....mit vesa kenn ich mich net aus aba glaube das kann man erst im pmode anschalten oder?
Nein, VESA kannst du nur im RM anschalten (stimmt nichts ganz aber fast). ^^
bitmaster
-
mh... dateisystem im bootloader wäre auch sinnvoll....
das ist ja erstmal egal. hauptsache der bootloader kriegt den kernel in den speicher. wie das geht ist ein implementation detail.
@thetrue: das a20-gate würde ich vor dem sprung in den protected mode setzen, weil je nach dem wie umfangreich dein "in den protected mode schalten" ist, brauchst du schon die ungeraden mbyte zahlen.
du solltest nicht vergessen die interrupts und ggf. paging. zu aktivieren, und die irqs zu verwalten.
-
nja, leider habe ich zu wenig ahnung, was pagging ist etc,
und interrupts gibts ja in pmode nicht oder?
-
klar gibt es interrupts. wie soll sonst die hardware dem prozessor/betriebssystem sagen, dass es irgendwas zu tun gibt?
ich vermute du verwechselt das mit den bios interrupts. das sind software interrupts. dein betriebssystem wird später evtl. auch software interrupts zur verfügung stellen müssen, damit deine (user mode) programme überhaupt irgendwas machen können. (dateien öffnen, speicher anfordern, andere programme starten, etc.)
mehr gibts z.b. unter: http://www.mega-tokyo.com/osfaq2/index.php/InterruptsForDummies
wenn du paging nicht kennst, dann kannst du das ja erstmal aufschieben. man kann schon einiges machen, ohne paging anzurühren.
-
Ich würde die ersten paar Punkte übrigens durch "GRUB benutzen" ersetzen. Der Rest macht noch genug Arbeit, da brauche ich nicht auch noch den Bootloader selbst schreiben, den ich vorgefertigt benutzen kann, ohne mich großartig einzuschränken.
-
Ich würde hingegen den Bootloader unbedingt selber schreiben. Denn wenn man nichtmal das hinkriegt, kann man die Entwicklung eines etwas grlößeren OS sowieso knicken - also man lernt einfach ne ganze Menge dabei und außerdem machts Spaß :D
-
Man könnte auch sagen, dass man unbedingt das BIOS unbedingt selber schreiben muss. Oder Mikrocode-Updates. Oder selbst eine Platine mit Prozessor, RAM, Controllern, etc zusammenlöten sollte. Oder gleich einen Prozessor. Macht auch alles Spaß. Aber der Sinn von OS-Development ist es nicht, sich mit den 1000 Hürden, die beim Entwickeln eines Bootsektors auftauchen auseinander zu setzen.
- A20-Gate
- zwangsläufiges Arbeiten und Auseinandersetzung sowohl mit Protected Mode als auch Real Mode
- Beachtung von Inkompatibilitäten der verschiedenen BIOS
- Abschalten des Diskettenlaufwerksmotors
- Festplatten-/Diskettengeometrie (CHS<->LBA, Limits von Festplattengrößen und BIOS-Fähigkeiten)
- Umsetzung eines Dateisystems
- überhaupt vollständiges und korrektes Laden einer Datei (worauf viele Probleme hier im Forum zurückzuführen sind)
- Überprüfung der verfügbaren Speicherbereiche
- Vermischung von 16-Bit und 32-Bit Code (was noch mal einen Großteil von hier im Forum auftauchenden Problem ausmacht)
- Schalten in einen Grafikmodus vor dem Wechsel in den Protected Mode
- Kompatibilität mit Bootloadern von Drittherstellern
- Fähigkeit andere Systeme zu booten
Mal einen Bootloader zum Ausprobieren, was das Ding überhaupt macht, ist ok. Aber wenn man was haben will, dass zuverlässig funktioniert, dann ist die Verwendung eines fertigen Bootloaders wesentlich sinnvoller. Wenn man allerdings statt eines OS einen Bootloader schreiben will, und sich auch darauf konzentrieren will, ist es natürlich OK einen Bootloader zu schreiben.
-
@PorkChicken: Danke, du nimmst mir die Worte aus dem Mund. ;)
-
@PorkChicken: Aus deiner sicht vielleicht, ja. Ich möchte aber ein OS schreiben. So, jetzt könnte ich grub etc. benutzen. Nur das ich ein eigenes Dateisystem progge, also kein FAT, NTFS, ReiserFS etc. Und dieses Dateisystem kennt nun mal kein OS-Loader der Welt außer mein eigener. Ich möchte kein vorhandenes Dateisystem benutzen. Ich werde natürlich später Dateisysteme von CD Formaten etc. unterstützen um auch in bzw. M$ Word unter Windows geschriebene Dokumente öffnen zu können. Aber die verwendeten Dateisysteme in meinem OS, heißt womit meine OS-Partition formatiert sein wird (bis jetzt nur Diskette) wird halt ein eigenes Dateisystem sein. Ich verwende z.B. kein FAT12, weil ich keinen bock auf 8.3 Dateinamen habe. Ich habe bis jetzt zwar nur 6.4 Dateinamen, aber das war damals nur so zum Test. Ich verbessere gerade mein Dateisystem. Somit werde ich lange Dateinamen unterstützen. Gut, dann könnte ich auch ReiserFS nehmen. Aber da spricht wieder anderes dagegen. Na ja, also in meiner Situation ist es unmöglich einen vorhandenen OS-Loader zu benutzen.
bitmaster
-
Na ja, also in meiner Situation ist es unmöglich einen vorhandenen OS-Loader zu benutzen.
Warum nimmst du nicht ext2? Das ist einfach wie FAT12, besser dokumentiert und sehr leistungsfähig. Und GRUB kann davon booten...
Aber vermutlich braucht ihr nur nen Grund nen eigenen Loader zu schreiben :roll:
-
Ich lade meinen Kernel noch immer RAW von Diskette! :D
Und meine Kernelprüfsumme wird auch noch im BL getestet, aber das kann man leicht ändern.
@C#ris: Ist ext2 wirklich so einfach?
-
also ich find wenn jemand nen Bootloader selber machen will, soll er halt
mitm OS ist es doch das Gleiche, wenn ihr einfach Linux benutzt spart ihr euch nen Haufen Arbeit, trotzdem macht ihr ein eigenes ;-)
-
also ich find wenn jemand nen Bootloader selber machen will, soll er halt
mitm OS ist es doch das Gleiche, wenn ihr einfach Linux benutzt spart ihr euch nen Haufen Arbeit, trotzdem macht ihr ein eigenes ;-)
Ich progge mir ein OS um zu lernen. Wenn ich jetzt gemein wäre könnte ich einen Link zu Linux posten. Ja, ich bin so gemein: http://www.computerwoche.de/knowledge_center/linux/575895
bitmaster
-
also durch schreiben eines eigenen dateissystems und eines eigenen bootloader für dieses dateisystem lernst du aber nichts, was wirklich mit osdev zu tun hat. im endeffekt schreibst du n kleinen treiber, den du dann später in den kernel integrieren kannst: du setzt dich damit nicht mit dem computer an sich auseinander, sondern nur mit etwas, was du sowieso schon selbst ausgedacht hast und warscheinlich nur für testzwecke sinnvoll ist.
-
also ich denke schon, dass man dadurch etwas lernt:
- wie man in den Pmode wechselt
- wie man die Deskriptoren initalisiert
- wie man die gdt lädt
und auch wenn man ein eigenes Dateisystem entwickelt lernt man doch etwas, überhaupt wie man ein gutes Dateisystem erstellt, platz spart, und allgemeines über die Fesplatte
warum sollte man dabei nichts lernen?
Im Grunde lernt man durch alles
-
- wie man in den Pmode wechselt
- wie man die Deskriptoren initalisiert
- wie man die gdt lädt
Für die OS Entwicklung ist es nicht notwendig so etwas zu wissen. Gut wenn es jemanden interessiert, soll er sich damit auseinander setzen.
Man kommt aber mit konkreten Entwicklungen nicht voran, wenn man ständig versucht das Rad neu zu erfinden...Wenn jemand einen Sachverhalt schon erstklassig gelöst hat (s. GRUB), dann macht es keinen Sinn sich damit noch einmal zu beschäftigen....
-
Für die OS Entwicklung ist es nicht notwendig so etwas zu wissen. Gut wenn es jemanden interessiert, soll er sich damit auseinander setzen.
Man kommt aber mit konkreten Entwicklungen nicht voran, wenn man ständig versucht das Rad neu zu erfinden...Wenn jemand einen Sachverhalt schon erstklassig gelöst hat (s. GRUB), dann macht es keinen Sinn sich damit noch einmal zu beschäftigen....
DAS seh ich wiederum anders: Man sollte doch zumindest ein bisschen mim Protected-Mode (also auch mit Deskriptoren erstellen, GDT laden, etc...) gespielt haben BEVOR man seinen Kernel anfängt, sonst wird das eher frustrierend. Aber das kann man bespielsweise auch aus DOS heraus oder aber man schreibt es zu Testzwecken in nen Bootloader. TROTZDEM würd ich aber niemand empfehlen (und vorallem keinem Anfänger) sich nen eigenen Bootloader zu schreiben. Des macht wirklich keinen Sinn
-
Hi
vorallem macht in zukunft grub, ... und vieles anderes keinen sinn mehr
ich sach nur EFI ;)
gruss
-
ich denk EFI braucht noch einige Zeit
Windows XP unterstützts nicht, Vista auch noch nicht richtig,
dabei gabs schon Windows 2000 Versionen dei das konnten
außerdem soll Vista nur auf 64-Bit Systemen EFI unterstützen und bis 32-Bit komplett verdrängt ist, dauerts wohl auch noch ne Weile
Für die OS Entwicklung ist es nicht notwendig so etwas zu wissen.
warum nicht? das gehört zu den grundlegenden Dingen
Man kommt aber mit konkreten Entwicklungen nicht voran, wenn man ständig versucht das Rad neu zu erfinden
wenn man ein OS schreibt entwickelt man doch genauso das Rad neu
TROTZDEM würd ich aber niemand empfehlen (und vorallem keinem Anfänger) sich nen eigenen Bootloader zu schreiben
grade das würde ich einem Anfänger empfehlen, weil man so die grundlegenden dinge vom Pmode lernt und auch ohne großes drumherum schonmal Sachen ausprobieren kann (Bios Ints, Text, Tastatur, ...)
-
grade das würde ich einem Anfänger empfehlen, weil man so die grundlegenden dinge vom Pmode lernt und auch ohne großes drumherum schonmal Sachen ausprobieren kann (Bios Ints, Text, Tastatur, ...)
Genau das meine ich ja, zum rumspielen macht es Sinn sowas in den Bootsektor zu schreiben. Aber ein Programm im Bootsektor macht noch lang keinen Bootloader...
-
der Unterschied zwischen Programm im Bootsektor und Bootloader ist eigentlich nur, dass der Bootloader nen Kernel lädt und das wird ein Anfänger auch ziemlich einfach hinbekommen
-
Wenn er es nicht mal ansatzweise hinbekommt (so in der Art "Assembler? Was ist das?"), wird er bei Benutzen von GRUB mit eigenm Kernel irgendwann wieder auf die selben Probleme treffen, dann mit komplexerem Rahmen.
-
der Unterschied zwischen Programm im Bootsektor und Bootloader ist eigentlich nur, dass der Bootloader nen Kernel lädt und das wird ein Anfänger auch ziemlich einfach hinbekommen
Sry, aber das ist nicht das was ich unter Bootloader versteh und genau das ist das was dann nach einiger Zeit extreme Probleme bereitet. Bootloader sollte auch > 1MB laden, A20, pmode, und so schickschnack... Grub macht halt all das und das auch noch gut und so, dass man zB auf der Linux partition lassen kann und man nur noch grub configen muss (4Zeilen), dann neustarten und schwups kann man sein OS von der Festplatte laden und nicht von so lahmen Disketten.
@Legend: Das man vorher mal mit Pmode etc. rumgespielt haben muss, hab ich ja bereits gesagt...
-
Also es ist ja ein unterschied zwischen Bootloader und OS-Loader. Obwohl ein Bootloader eigentlich soetwas ist wie der Code des MBR der eine Bootbare Partition läd. Deswegen auch bootloader. Das was viele als Bootloader bezeichnen ist eigentlich keiner. Sie meinen den ersten Sektor der Diskette (oder einer Partition die durch den Bootloader evt. geladen wurde). Ich weiß jetzt nicht genau wie man diesen ersten Sektor bezeichnet. Aber ich glaube man sagt bootstrap dazu. Und dieser soll das A20 aktivieren, in den Pm schalten und somit eine gdt und evt. idt etc. haben? Also dieses konzept finde ich erlich gesagt blöd. Bei meinem bootstrap wären außerdem 512 Byte dann zu klein (eigenes Dateisystem integriert). Ich finde das sollte alles ein OS-Loader übernehmen (ist bei meinem OS + GUI zwar nicht so, aber das hat andere Gründe). Also so in etwa finde ich es ganz OK:
Bootstrap läd OS-Loader (nur RM-Code)
OS-Loader läd kernel etc. (springt in den PM und dann zum kernel oder so änlich) (also erst RM-Code und dann PM-Code)
kernel etc. (nur PM-Code)
bitmaster
-
also so wie ich das seh, verstehen wir hier unter Bootloader alle was anderes,
dann wird wohl nur noch die Definition von "Bootloader" helfen können
ich glaub nur in nem Lexikon wird man die nicht finden...
-
Aber vielleicht in einer Enzyklopädie: http://de.wikipedia.org/wiki/Bootloader ;)
-
hab ich schon geguckt
aber da kann jeder reinschreiben was er will ;-)
-
Wenn es aber immer noch so dasteht, ist die Wahrscheinlichkeit groß, daß die meisten mit dieser Definition einverstanden sind. ;)
-
Ich persoenlich bin am Bootloader gescheitert, weil ich einfach keine Lust hatte mich so intim mit einer Materie auseinander zu setzen, die ich mit Hilfe dieses Bootloaders eigentlich nur ueberspringen will. Das ist auch der Grund, warum ich Grub verwende - das, und die Vielfalt die mir Grub sonst noch bietet. Nicht zuletzt verwenden die meisten Leute Grub zum booten von Linux.
ad Problemchen, die man beim Bootloader schreiben hat, die danach in groesserem Rahmen vorkommen: Schwachfug. Sonst haette ich wohl keine funktionierende GDT, IDT (, PageTable .. noch nicht fertig implementiert :P).
Achja.. nicht jeder hat Lust sich nur mit Assembler, oder einem uralt TurboC herumzuschlagen. Ich setz mich eben gern zum gedeckten Tisch und esse dann vom vollen Teller. :)
Lg, Alex
-
Allerdings will ich ja auch als Anfänger im RM arbeiten. Dann wäre meine Zusammenstellung mit Grub ja recht doof:
GRUB schaltet in den Protected Mode.
GRUB lädt meinen Kernel.
Kernel schaltet zurück in den Real Mode.
[/list:u]
Würde aber auch nix nutzen, denn die Interrupt Tabelle vom BIOS wär nicht mehr zu gebrauchen :wink: . :!: !
-
Hi
für mich ist ein BootLoader ein Stück software, das ein OS zum laufen bringt. Das was Grub, lilo ja auch macht. Das andere ist für mich der Bootsektor. Ein Bootsektor kann ein Bootloader sein, wenn er da hinein passt, muss aber nicht. Er kann auch nur dazu dienen, einen Bootloader zu starten. Siehe z.B. Grub (Stage1, Stage 1.5, Stage 2 ) Grub hat glaubich sogar verschiedene Bootsektoren, Je nach Bootmedium und dateisystem
gruss
-
Eine Diskette hat keinen Bootloader. Der Bootloader ist das stück Code was z.B. auf einer Festplatte beim MBR ist und die Bootpartition läd (deswegen auch bootloader). Auf dieser Bootpartition ist der Bootstrap der auch auf der Diskette zu finden ist (sein sollte). Dieser läd den OS-Loader (grub etc.) und dieser läd das OS.
bitmaster
-
Das heisst also, die Bootloader die die meisdten hier schreiben, sind keine Bootloadert, sondern OS-Loader im Bootsektor. Der Bootloader ist das BIOS welches zu diesem zweck mehrere BIOS Interrupts aufruft. Hab ichs jetzt richtig verstanden?
-
Das heisst also, die Bootloader die die meisdten hier schreiben, sind keine Bootloadert, sondern OS-Loader im Bootsektor. Der Bootloader ist das BIOS welches zu diesem zweck mehrere BIOS Interrupts aufruft. Hab ichs jetzt richtig verstanden?
Jap.
-
*stolz bin* :lol: :D :) !