Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: Pk3 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 (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 :-)
-
Kopierst du auch die GRUB-Dateien auf das Floppyimage und hast du das Floppy-Image mit GRUB richtig erstellt, siehe GRUB-Image erstellen (Windows) (http://www.lowlevel.eu/wiki/GRUB-Image_erstellen_%28Windows%29) (-> bootlace). Dein Kommentar
// Mit dem GRUB - Bootloader "vereinen"
ist wahrscheinlich irreführend. Ich glaube, dass bfi dabei das Image komplett überschreibt.
-
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...
-
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.
(http://xyross.de/file.php?id=64)
-
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
-
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.