Autor Thema: Kernel bootet wie jetzt weiter?  (Gelesen 7181 mal)

bankkind

  • Beiträge: 10
    • Profil anzeigen
    • NicBec
Gespeichert
« am: 13. October 2007, 17:48 »
Hallo,
ich habe vor ein paar Monaten einen kleinen Kernel unter Anleitung des Lowlevel magazins in Assembler geschrieben. Im Kernel befindet sich eine kleine Shell, die allerdings recht funktionionsuntüchtig ist und auch recht Buggy ist! Heute nachmittag habe ich den alten Code mal wieder rausgekramt.

Ich würde jetzt gerne wissen, wie es von nun an weitergehen soll?

Mir gefällt auch die Lösung mit der Shell im Kernel nicht wirklich. wie kriege ich es hin, das ich die Shell einzeln assembliere und der Kernel sie sozusagen nur Ausführt. Dazu bräuchte ich ja bestimmt auch ein Dateisystem, oder?

Wie implementiere ich ein Dateisystem? in den Bootloader oder in den Kernel?
Ich würde gerne Grub für mein OS nehmen, wie mach ich meinen Kernel Grubfähig(Ich weiß darüber gibt es ein Tutorial, allerdings verstehe ich das nicht wirklich. Muss ich für Grub im Protected Mode sein?

Ich habe im Wiki den Artikel: "Umschalten in Protected Mode" gefunden. kann ich das für den PM nehmen? Was muss ich beachten!

Es wäre nett wenn meine Fragen beantwortet werden könnten.

Mit freundlichen Grüßen

Nico Becker

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 13. October 2007, 18:52 »
Aus deinem Post schließe ich einfach mal, dass du noch nichts mit dem Protected-Mode gemacht hast, richtig?
Dann würde ich dir raten mit dem Protected-Mode ein bisschen rumzuspielen und das am Besten unter möglichst einfachen Bedingungen: Ich würde mal versuchen in einem Bootsektor einfach in den Protected-Mode (GDT laden, cr0) zu springen und dort irgendwas auszugeben. Dann kann man sich an Interrupts & IDT wagen und so weiter... Das soll jetzt nicht heißen, dass du einen funktionalen Bootsektor schreiben sollst. Dazu ist grub weit besser geeignet. Es geht nur darum Erfahrungen mit dem Protected-Mode zu sammeln. Wenn du dann richtig in die Kernelentwicklung einsteigst würde ich dir dann grub empfehlen, welcher für dich schon in den Protected-Mode springt, andere Dateien (außer dem Kernel) noch für dich laden kann, etc... In den Kernel dann auch als erstes GDT, IDT, Interrupthandler, Routinen zur Textausgabe, kleiner Tastaturtreiber etc... einbauen, danach kann man sich vllt an einen ELF bzw. PE-Loader machen, welcher ein von Grub geladenes Modul ausführt.
Paging würde ich für den Anfang mal weglassen, dann dürfte nur verwirrend sein. Du wirst es aber später auf alle Fälle benutzen wollen.

Stell dich schonmal drauf ein, dass du mehrmals mit deinem Kernel von vorne beginnst, bis dabei wirklich was rauskommt. 8-)
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

bankkind

  • Beiträge: 10
    • Profil anzeigen
    • NicBec
Gespeichert
« Antwort #2 am: 14. October 2007, 12:02 »
Ja vielen Dank für die Tips, aber wie soll ich in den PMode springen? Ich benutzte bisher immer den bootloader aus der 1. Lowlevel Ausgabe. Wie muss ich diesen erweitern das er in den Protected Mode springt?

maxinator

  • Beiträge: 21
    • Profil anzeigen
    • Maxinators HP - übers Leben und Programmieren :)
Gespeichert
« Antwort #3 am: 14. October 2007, 13:32 »
Oh, der Protected Mode ist ein relative sehr umfassendes Thema, am besten du list mal bei einem der Links nach, was das ist, was er bewerkstellgit und wie man ihn einschaltet: 1 2

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 14. October 2007, 14:24 »
Wenn du ohnehin GRUB benutzen willst (was ich sehr empfehle), sehe ich keinen Sinn darin, sich mit Dingen wie Sprung in den PMode zu beschäftigen - das macht nämlich GRUB für dich. Um einen Kernel von GRUB bootbar zu machen, mußt du nur einen Multibootheader in deinen Kernel einbauen - das sind drei dd in Assembler, wenn du ELF als Binärformat nimmst.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bankkind

  • Beiträge: 10
    • Profil anzeigen
    • NicBec
Gespeichert
« Antwort #5 am: 14. October 2007, 19:55 »
Wenn du ohnehin GRUB benutzen willst (was ich sehr empfehle), sehe ich keinen Sinn darin, sich mit Dingen wie Sprung in den PMode zu beschäftigen - das macht nämlich GRUB für dich. Um einen Kernel von GRUB bootbar zu machen, mußt du nur einen Multibootheader in deinen Kernel einbauen - das sind drei dd in Assembler, wenn du ELF als Binärformat nimmst.

OK...ich nehme mal an mit dd meinst define doubleword!
Diie Definition muss ich denn einfach an den Anfang meines Kernels schreiben?
OK das hört sich gut an! Wie bringe ich aber den Grub vernünftig in ein Image und ganz Wichtig: Wie sieht es dann mit einem Dateisystem aus? Muss der Kernel schon ein Dateisystem haben?

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 14. October 2007, 21:32 »
OK...ich nehme mal an mit dd meinst define doubleword!
Diie Definition muss ich denn einfach an den Anfang meines Kernels schreiben?
Genau. Die komplette Multibootspezifikation findest du unter http://www.gnu.org/software/grub/manual/multiboot/ - das für dich im Moment interessante ist Abschnitt 3.1.

Wichtig für GRUB ist, daß der Multibootheader innerhalb der ersten 8K deines Kernels liegt und dword-aligned ist. Und ELF muß es sein, wenn du es so einfach haben willst.


Zitat
OK das hört sich gut an! Wie bringe ich aber den Grub vernünftig in ein Image und ganz Wichtig: Wie sieht es dann mit einem Dateisystem aus? Muss der Kernel schon ein Dateisystem haben?
Falls du Linux verwendest, hat unser Wiki was für dich. Ansonsten kannst du beispielsweise ein LOST-Image runterladen und deinen eigenen Kernel draufkopieren.

Dein Kernel muß im Grunde nichts können. GRUB kann aber Dateisysteme lesen, weswegen du am geschicktesten ein Floppy-Image nimmst, das mit FAT formatiert ist - dann kannst du deinen Kernel einfach mit den üblichen Mitteln draufkopieren. GRUB lädt dann den Kernel und evtl. Module von der Floppy/Festplatte in den Speicher und springt dann in den Kernel.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bankkind

  • Beiträge: 10
    • Profil anzeigen
    • NicBec
Gespeichert
« Antwort #7 am: 15. October 2007, 11:44 »
Ja Ok..das werd ich mir bei Zeiten ansehen. Ich habe jetzt noch eine Frage!

Wie Sinnvoll wäre es jetzt mit C weiterzumachen? Oder lieber bei Assembler bleiben?

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #8 am: 15. October 2007, 12:40 »
Wie Sinnvoll wäre es jetzt mit C weiterzumachen?
Meines Erachtens (und ich glaube ich spreche da für die große Mehrheit) ist es sehr sinnvolle eine höhere Sprache zu verwenden. Das muss jetzt nicht C sein, dass kann auch C++ oder Pascal sein. Aber man sollte dann auch auf jeden Fall die grundlegenden Konzepte der Programmierung auf die Sprache der Wahl übertragen können (oder noch besser die Sprache bereits gut beherrschen).
Für C spricht auf jeden Fall die extrem portable binutils/gcc toolchain und die bessere Abstraktion, Wartbarkeit & Erweiterbarkeit die eine eine höhere Sprache mit sich bringt.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

bankkind

  • Beiträge: 10
    • Profil anzeigen
    • NicBec
Gespeichert
« Antwort #9 am: 15. October 2007, 17:17 »
Ja das man auch Pascal nehmen kann, habe ich bereits gelesen. Das interessiert mich noch viel mehr! Da ich Pascal bereits währrend meiner Ausbildung gelernt habe. Welcher Pascal-Compiler ist denn dafür geeignet? Freepascal?

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #10 am: 15. October 2007, 17:40 »
Freepascal?
Jo, Afaik verwendet taljeth für LOST und Homix für HomixOS Freepascal.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 15. October 2007, 22:25 »
Jo, Freepascal funktioniert ziemlich gut, auch für einen Kernel. Und wenn ich mir anschaue, welchen Ärger Freaky damit hatte, die binutils zu portieren, dann muß ich schon sagen, daß die Freepascal-RTL (im Sinn von system-Unit) vermutlich leichter zu portieren ist und auch deswegen zuerst portiert war - und dann braucht es nur noch wenige zusätzliche Funktionen, dann ist auch der Compiler selbst portiert.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

niknett

  • Beiträge: 30
    • Profil anzeigen
    • Gatoniel.de
Gespeichert
« Antwort #12 am: 20. October 2007, 17:26 »
was macht grub eigentlich alles oder was bringt grub??

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #13 am: 21. October 2007, 10:49 »
Schau dir die Multiboot Specification an. Da steht alles drin.

Multiboot Specification
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

niknett

  • Beiträge: 30
    • Profil anzeigen
    • Gatoniel.de
Gespeichert
« Antwort #14 am: 21. October 2007, 17:16 »
jetzt kapier ichs, wenn man kein grub hätte, würde man nie verschiedene systeme benutzen können.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #15 am: 21. October 2007, 17:57 »
[...] wenn man kein grub hätte, würde man nie verschiedene systeme benutzen können.
Ich weiß zwar nicht, wie das gemeint sein soll, aber schön, dass du es verstanden hast. :mrgreen:
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

niknett

  • Beiträge: 30
    • Profil anzeigen
    • Gatoniel.de
Gespeichert
« Antwort #16 am: 22. October 2007, 13:30 »
ja eben dass man mit grub aus mehreren Kernels auswählen kann, wenn man jedoch nen einfachen bootloader nimmt kann man nicht aus mehreren kernels auswählen.

 

Einloggen