Autor Thema: 32 BIT Kernel loaden  (Gelesen 12710 mal)

javadomi

  • Gast
Gespeichert
« am: 14. July 2005, 16:58 »
Ich habe mit C ein Kernel erstellt und ein Kernelstarter mit Asm. Nun habe ich das alles zu einer Binären Datei (*.bin) zusammengelinkt. Keine Fehler sind aufgetreten. Nun möchte ich diese Kerneldatei von der Diskette oder Festplatte booten. Ich habe es mit den einfachen Bootloader von der ersten Ausgabe (Lowlevel) probiert, aber es geht nicht, weil, wie hier beschrieben ist, muss man irgendwie in den Protected Mode wechseln. Ich weiß nicht, wie es mit GRUB geht, da ich diese stage1 und stage2 Dateien nicht habe. Könntet ihr mir da helfen?

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #1 am: 14. July 2005, 18:18 »
Uff, das heisst wohl das du entweder Grub kompilieren willst, und z.B. eine Bootdiskette zu erstellen, oder du nimmst eine fertige (z.B. beim Download von meinem OS ist eine FAT12 formatiertes Diskettenimage mit GRUB drauf dabei).

Fuer deinen Kernel wirst du aber auf jeden Fall  einen Multibootheader fuer Grub hinzufuegen wollen, sonst laedt Grub den nicht.
*post*

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 14. July 2005, 19:35 »
Du kopierst z.B. mir rawwrite dieses Image auf eine Diskette:
http://www.osdever.net/downloads/bootsectors/grub-0.93.tar.gz

Danach kopierst du deinen Kernel ganz normal per Explorer auf die Diskette. Auf der Diskette sind einige Dateien und in einem Unterordner gibt es eine Textdatei oder Configdatei die du editieren kannst. Zusätzlich musst du wie schon gesagt deinen Kernel Grub-Kompatibel machen - dazu gibts ein Tut in einer der Lowlevel-Ausgaben.

javadomi

  • Gast
Gespeichert
« Antwort #3 am: 15. July 2005, 17:30 »
Muss ich da GRUB verwenden? Koennte mir jemand vielleicht einen fertigen Bootloader, der in den Protected Mode wechselt und meinen Kernel laedt, senden? Oder gibt es da schon solche Bootloader? Bei Google war ich wenig erfolgreich.

jeb

  • Beiträge: 341
    • Profil anzeigen
    • http://www.jebdev.net
Gespeichert
« Antwort #4 am: 15. July 2005, 18:05 »
jeder hat da eigentlich so seinen eigenen Bootloader. Aber ich könnte auch so einen gebrauchen, meiner tut's immer noch nicht  :cry:

matthieuriolo

  • Beiträge: 226
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 15. July 2005, 18:49 »
Dada http://my.execpc.com/~geezer/johnfine/index.htm wurde mir empfohlen und o_O hammer. Man muss nur etwas am Compile.bat machen damit er es tut (so aus der erinnerung)

javadomi

  • Gast
Gespeichert
« Antwort #6 am: 19. July 2005, 15:25 »
Ok, ich habe alle Tools, ich sag euch bescheid, wenn es funktioniert.

javadomi

  • Gast
Gespeichert
« Antwort #7 am: 21. July 2005, 18:16 »
Ich habe mir nun BOOTF02.ZIP heruntergeladen, also den Bootloader by John S. Fine. Er hat prächtig funktioniert. Mein C Kernel wurde ausgeführt. Doch nach einigen Tests wurde ich unzufrieden, darum habe ich noch ein paar Fragen:

1. Ich habe versucht in meinen C Kernel Funktionen hinzuzufügen. Ich habe dann alles kompiliert und ausprobiert. Die folge war ein absturz. Wie kann ich bitte eine Funktion erstellen?
2. Kann man das ganze OS auf eine Festplatte bringen?
3. Kann ich den Kernel in den Bootsector kopieren (so wie den Bootloader mit Partcopy), damit man den Kernel nicht sieht?
4. Kann ich statt C auch C++ verwenden, um Klassen zu erstellen? Wenn ja, dann wie? Ich habe es vergeblich versucht.
5. Kann ich statt gleich den Hauptkernel auszuführen vorher einen Kleinen Assemblercode auszuführen, der dann die Main Funktion des Kernels aufruft?

Ich wäre sehr dankbar für Antworten auf meine Fragen.

PS: Ich verwende nicht den DJGPP, sondern den Freeware Borland BCC 5.5 Compiler, weil er Inline Assembler kann.

Thoth

  • Beiträge: 62
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 22. July 2005, 11:23 »
3. Naja, der Bootsektor ist doch nur 512 Bytes groß, insofern wird das schwierig. Was vielleicht klappen könnte, ist, dass du ihn vor die Tabelle deines Dateisystems setzt, so dass der Kernel diesem nicht bekannt ist. Ob dann der Bootloader noch mitspielt, ist aber wieder ne andere Frage.
4. Klassen haben einen Konstruktor, den das System dann aufzurufen versucht. Da du aber nicht wie bei Windows oder Linux ein Betriebssystem hinter dir hast, welches sich um alles kümmer, musst du wohl ne eigene Routine für die Konstruktoren schreiben. Bei LOST ist auch so eine dabei, nur so als Tipp zum abgucken *g*
Madness isn't a bug - it's a feature

javadomi

  • Gast
Gespeichert
« Antwort #9 am: 23. July 2005, 13:26 »
1 hat sích erledigt: Die erste Funktion muss also die Adresse 0xff8000 haben.

3 hat sich jetzt auch erledigt.

Wichtig sind jetzt nur noch 4 und 5. Und was ist LOST,Thoth?
PS: Der Linker JLOC hat gar nicht mal die OBJ Datei aus der Cpp richtig gelinkt. Er sagte, dass sich irgendwas überdeckt.

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 24. July 2005, 11:12 »
@4 & 5: Beides sieht man bei Lost (= Community OS, weiter unten bei den Forenbereichen).

@5: Kann ich aber auch versuchen so zu erklären: Du compilierst deine C-Dateien ganz normal zu Objects. Deine ASM-Datei wird z.B mit nasm auch zu einem Object-File assembliert, z.B. so: nasm -f coff ....
Anschließend kannst du alle Objects zusammenlinken. Du musst aber darauf achten, dass der Object-File der Assembler-Datei am Anfang landet.

javadomi

  • Gast
Gespeichert
« Antwort #11 am: 26. July 2005, 13:51 »
5 habe ich versucht, wie du es gesagt hast. Hat nicht funktioniert. Die folge war ein absturz.

4 steht nicht bei LOST. Ich verwende GRUB nicht.

PS: Wenn man GRUB auf die Diskette installiert hat, und sein Kernel raufgemacht hat usw. Dann kommt sowieso nochmal grub und man muss dann das Betriebssystem auswählen, oder? Genau das möchte ich nicht.

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #12 am: 26. July 2005, 13:57 »
Dann stell dein OS als Standardauswahl ein und setzt die Wartezeit auf 0 (oder war min. 1?) . Dann hat der Benutzer nicht mehr viel Zeit zum auswählen.
*post*

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 26. July 2005, 16:50 »
Zitat von: Legend
Dann stell dein OS als Standardauswahl ein und setzt die Wartezeit auf 0 (oder war min. 1?) . Dann hat der Benutzer nicht mehr viel Zeit zum auswählen.

0 geht auch. bei mir zumindest ;)
Dieser Text wird unter jedem Beitrag angezeigt.

javadomi

  • Gast
Gespeichert
« Antwort #14 am: 27. July 2005, 19:13 »
Ich habe das mit GRUB Kernel nicht ganz hingekriegt  :oops: . Könnt ihr mir vielleicht soein Minikernel schicken?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 28. July 2005, 00:39 »
Dieser Text wird unter jedem Beitrag angezeigt.

javadomi

  • Gast
Gespeichert
« Antwort #16 am: 28. July 2005, 15:54 »
Wow, toll!!!
Nun ist jetzt das Problem, dass wenn er von der Diskette bootet immer diese Meldung kommt: Stage2 wird geladen oder so. Kann ich die Irgendwie umgehen?

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 28. July 2005, 16:16 »
Du könntest diese Ausgabe im Quellcode auskommentieren und GRUB neu kompilieren, eine andere Möglichkeit gibt es warscheinlich nicht. Eventuell kann man das auch über Compile Optionen Einstellen.

boschdla

  • Beiträge: 1
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 30. July 2005, 23:41 »
Du kannst auch direkt die Binärdaten manipulieren, mit Hex Works z.B.
einfach nach den Zeichenketten suchen und durch Leerstellen ersetzen ...

xormore

  • Beiträge: 25
    • Profil anzeigen
Gespeichert
« Antwort #19 am: 31. July 2005, 18:41 »
javadomi: was hast du für ein problem mit den meldungen von grub? schämst du dich dafür, dass du grub verwendest?

 

Einloggen