Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: javadomi am 14. July 2005, 16:58

Titel: 32 BIT Kernel loaden
Beitrag von: javadomi 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?
Titel: 32 BIT Kernel loaden
Beitrag von: Legend 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.
Titel: 32 BIT Kernel loaden
Beitrag von: DarkThing 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.
Titel: 32 BIT Kernel loaden
Beitrag von: javadomi 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.
Titel: 32 BIT Kernel loaden
Beitrag von: jeb 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:
Titel: 32 BIT Kernel loaden
Beitrag von: matthieuriolo 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)
Titel: 32 BIT Kernel loaden
Beitrag von: javadomi am 19. July 2005, 15:25
Ok, ich habe alle Tools, ich sag euch bescheid, wenn es funktioniert.
Titel: 32 BIT Kernel loaden
Beitrag von: javadomi 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.
Titel: 32 BIT Kernel loaden
Beitrag von: Thoth 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*
Titel: 32 BIT Kernel loaden
Beitrag von: javadomi 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.
Titel: 32 BIT Kernel loaden
Beitrag von: DarkThing 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.
Titel: 32 BIT Kernel loaden
Beitrag von: javadomi 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.
Titel: 32 BIT Kernel loaden
Beitrag von: Legend 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.
Titel: 32 BIT Kernel loaden
Beitrag von: Jidder 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 ;)
Titel: 32 BIT Kernel loaden
Beitrag von: javadomi am 27. July 2005, 19:13
Ich habe das mit GRUB Kernel nicht ganz hingekriegt  :oops: . Könnt ihr mir vielleicht soein Minikernel schicken?
Titel: 32 BIT Kernel loaden
Beitrag von: Jidder am 28. July 2005, 00:39
Hier gibt es ein Beispiel: http://www.gnu.org/software/grub/manual/multiboot/multiboot.html#Example%20OS%20code
Titel: 32 BIT Kernel loaden
Beitrag von: javadomi 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?
Titel: 32 BIT Kernel loaden
Beitrag von: SSJ7Gohan 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.
Titel: 32 BIT Kernel loaden
Beitrag von: boschdla 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 ...
Titel: 32 BIT Kernel loaden
Beitrag von: xormore 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?
Titel: 32 BIT Kernel loaden
Beitrag von: javadomi am 01. August 2005, 19:25
Nein nein. Ich wollte sone Bootmessage wie NameOS wird geladen...
Das sieht professioneller aus.