Autor Thema: C - Kernel über GRUB ausführen  (Gelesen 4595 mal)

Pk3

  • Beiträge: 52
    • Profil anzeigen
    • Xyross
Gespeichert
« am: 16. July 2010, 14:21 »
Hallo,

ich moechte den GRUB - Bootloader verwenden um meinen C - Kernel auszuführen. Funktioniert allerdings nicht,
weil der Bootloader nicht geladen/erkannt wird. Ich hab das nach diesem Tutorial gemacht: http://www.lowlevel.eu/wiki/C-Kernel_mit_GRUB

Ich verwende Windows 7 64Bit und habe den Kernel mit dem Crosscompiler kompliliert.
So gehe ich vor:

Als erstes folgende Batch - Datei ausführen:

// Assembler
nasm -f elf -o D:/Programmieren/OS/ckernel/kernel.o D:/Programmieren/OS/ckernel/kernel_asm.asm

// C - Kernel
i586-elf-gcc -m32 -ffreestanding -o D:/Programmieren/OS/ckernel/kernel_c.o -c D:/Programmieren/OS/ckernel/kernel.c -Wall -Werror -nostdinc

// Linken
i586-elf-ld -T D:/Programmieren/OS/ckernel/link.txt -o D:/Programmieren/OS/ckernel/bin/kernel.bin D:/Programmieren/OS/ckernel/kernel.o D:/Programmieren/OS/ckernel/kernel_c.o

// Mit dem GRUB - Bootloader "vereinen"
bfi -t=144 -f=D:/Programmieren/OS/ckernel/floppy.img D:/Programmieren/OS/ckernel/bin

pause

(Die Dateien "kernel.c", "kernel_asm.asm" und "link.txt" sind mit den Dateien aus dem Tutorial identisch)

Im "bin" - Ordner ist eine Datei mit dem Namen "boot", welche aus der Datei "stage1" und "stage2" zusammengefügt wurde
(copy /b stage1 + stage2 boot).

Danach schreibe ich die Datei "floppy.img" mit dem Programm "RawWrite" auf eine Diskette (1,44MB).
Wenn ich von der Diskette mit Bochs boote, kommt folgende Ausgabe:

Booting from Floppy...
Disk formatted with WinImage 4.00 (c) 1993-97 Gilles Vollant
Bootsector from C.H. Hochstätter

No Systemdisk. Booting from harddisk
Cannot load from harddisk
Insert Systemdisk and press any key.

Die Konfigurationsdatei für Bochs:
megs:32
romimage: file=BIOS-bochs-latest, address=0xf0000
vgaromimage: VGABIOS-elpin-2.40
floppya: 1_44=a:, status=inserted
boot: a
log: protokoll.log
mouse: enabled=0
debugger_log: debug.log
debugger_log: -

Ich versuch das schon seit Tagen ohne Erfolg...
Wäre also sehr dankbar wenn mir jemand sagen koennte was ich falsch mache  :-)

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 16. July 2010, 14:49 »
Kopierst du auch die GRUB-Dateien auf das Floppyimage und hast du das Floppy-Image mit GRUB richtig erstellt, siehe GRUB-Image erstellen (Windows) (-> bootlace). Dein Kommentar
Zitat
// Mit dem GRUB - Bootloader "vereinen"
ist wahrscheinlich irreführend. Ich glaube, dass bfi dabei das Image komplett überschreibt.
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

Pk3

  • Beiträge: 52
    • Profil anzeigen
    • Xyross
Gespeichert
« Antwort #2 am: 16. July 2010, 14:56 »
Das GRUB - Image hab ich aus "stage1" und "stage2" zusammengefügt.
Oh ja, hab vergessen das mit dem bootlace zu erwähnen: Wenn ich bootlace ausführe kommt eine Fehlermeldung das ich das nicht unter einem 64Bit - System ausführen kann... gibts da eine andere Moeglichkeit?

Edit:
Ich hab mir die "floppy.img" - Datei mal in Notepad angesehen und da hab ich nach "Hello World" und "GRUB" gesucht
und fündig geworden. Das heißt das GRUB und mein Kernel in der floppy.img drin sind.
Ausserdem war da drin auch die Meldung "No Systemdisk. Booting from harddisk..." zu finden...
« Letzte Änderung: 16. July 2010, 15:05 von Pk3 »

Pk3

  • Beiträge: 52
    • Profil anzeigen
    • Xyross
Gespeichert
« Antwort #3 am: 16. July 2010, 18:43 »
Wenn ich die "stage1" und "stage2" mittels "copy /b stage1 + stage2 boot" zusammenfüge und mit RawWrite auf Diskette schreibe,
wird GRUB geladen. Aber dann kommt eine Eingabeaufforderung und keine Bootliste... Ich verwende die Binarys von Version 0.94.

« Letzte Änderung: 16. July 2010, 18:45 von Pk3 »

Programm Noob

  • Gast
Gespeichert
« Antwort #4 am: 16. July 2010, 18:54 »
Moin

Ich werde dir hier mal aufschreiben, was du meines erachtens nach gamacht hast und werde dir danach sagen, was du mnachen musst.

1. Du hast mit Winimage ein Image erstellt. Suboptimal weil kein brauchbarer bootsector eingebaut wird.
2. Du hast die beiden Dateien von Grub stage1 und stage2 zusammenkopiert. Absulut tötlich für Grub.

Grub hat in sector 0 einem eigenen bootsector stehen und Stage1 und Stage2 sind sozusagen die kernel von Grub, die müssen einzeln bleiben. Unter 64Bit gibt es meines Wissens nach keine möglichkeit ein GRUB Image zu erstellen. deshalb lade dir Das Image hier https://sourceforge.net/projects/nandos/files/Entwicklerversion/NandOS.img/download herunter und tausche einfach nur den Kernel aus. Bei fragen einfach IRC-Channel #NandOS@irc.euirc.net


Programm Noob

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 16. July 2010, 19:09 »
stage1 ist der Bootsektor, und wenn man stage1 und stage2 zusammenkopiert, bekommt man einen bootfähigen GRUB (wie Pk3 ja schon herausgefunden hat). Das Problem mit diesem Image ist natürlich, dass es kein Dateisystem hat und deswegen kann man den Kernel so auch nicht draufkopieren.

Aber was man machen kann, ist unter GRUB ein Image bootfähig machen, wenn es schon unter Windows nicht klappt. Dazu erst einmal ein zweites Image erstellen und mit FAT formatieren, stage1, stage2, menu.lst und den Kernel draufkopieren. Danach vom GRUB-Image (dem erstem Image) in die GRUB-Shell booten, Diskette wechseln und GRUB auf der zweiten Diskette installieren:
root (fd0)
setup (fd0)

Wenn GRUB einmal auf dem Image drauf ist, kannst du auch immer wieder einen neuen Kernel draufkopieren, ohne GRUB neu auf die Diskette installieren zu müssen.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen