Discussion:
GRUB: Unbekanntes Format?
(zu alt für eine Antwort)
Markus Wichmann
2006-09-26 18:11:06 UTC
Permalink
Hi all,
ich habe es jetzt mal für den Moment aufgegeben, einen eigenen
Bootloader zu basteln (ich mach' da mal später weiter) und bin zu GRUB
umgestiegen. Ich habe mir auch ein GRUB-Floppy-Image mit gültigem FAT
angelegt. Nur schaffe ich es nicht, diesem Loader beizubringen, meinen
Kernel zu laden. Ich habe folgendes gemacht:
Erstmal den Multiboot-Header eingefügt:

jmp start
align 4
mb_page_align equ 1<<0
mb_mem_info equ 1<<1

mb_header_magic equ 1badb002h
mb_header_flags equ mb_page_align | mb_mem_info
checksum equ -(mb_header_magic + mb_header_flags)

dd mb_header_magic
dd mb_header_flags
dd checksum
start:
(Kernel-Code folgt)

Das Ganze mit yasm assembliert:

yasm -f elf32 -o kernel.elf kernel.asm

und auf die Diskette kopiert. Dann habe ich die Diskette gebootet und mit

kernel /kernel.elf

dazu bewegen wollen, den Kernel zu laden, aber GRUB schrie dauernd
"Invalid or unsupported executable format". Da konnte ich nicht viel machen.
Ich habe schon zigtausendmal die Geschichte mit dem Linkerscript gehört,
aber das klappt nicht, da ich immer die Meldung

ld: PE operation on non-PE file

erhalte. Ich benutze das ld, was als momentan als "current" bei MinGW
mitkommt. Außerdem yasm in der Version für VS, weil ich kein Cygwin
habe(-n will).

Kann ich das Problem lösen, ohne mir Cygwin runterladen zu müssen?

Was ganz anderes: Sollte ich den Kernel segmentieren? Ich arbeite gerade
den Code vom LowLevel-Mag durch, da wäre das von Nachteil, da die
Autoren den Kernel wie eine COM schreiben. Wenn ja, was kommt wo rein?
tia und tschö,
nullplan
--
To err is human. To forgive is divine.
To forget is also human...
Herbert Kleebauer
2006-09-26 20:49:51 UTC
Permalink
Post by Markus Wichmann
Hi all,
ich habe es jetzt mal für den Moment aufgegeben, einen eigenen
Bootloader zu basteln (ich mach' da mal später weiter) und bin zu GRUB
umgestiegen. Ich habe mir auch ein GRUB-Floppy-Image mit gültigem FAT
angelegt. Nur schaffe ich es nicht, diesem Loader beizubringen, meinen
Kernel zu laden.
Falls du von der Floppy booten willst, nimm noch eine unter
DOS 6.2 (nicht DOS 7 von Win98) normal formattierte Floppy,
lösche alle Dateien die sich darauf befinden und kopiere
dein Programm unter dem Namen IO.SYS darauf. Anschließend
erzeuge eine zweite Datei mit dem Namen MSDOS.SYS (Größe
und Inhalt ist egal, wichtig ist nur das dieser Name als
zweiter Eintrag im Directory steht). Wenn du mit dieser
Floppy bootest, wird dein Programm an die Adresse $0070:$0000
geladen und dort ausgeführt.
Markus Wichmann
2006-09-27 13:43:44 UTC
Permalink
Post by Herbert Kleebauer
Falls du von der Floppy booten willst, nimm noch eine unter
DOS 6.2 (nicht DOS 7 von Win98) normal formattierte Floppy,
lösche alle Dateien die sich darauf befinden und kopiere
dein Programm unter dem Namen IO.SYS darauf. Anschließend
erzeuge eine zweite Datei mit dem Namen MSDOS.SYS (Größe
und Inhalt ist egal, wichtig ist nur das dieser Name als
zweiter Eintrag im Directory steht). Wenn du mit dieser
Floppy bootest, wird dein Programm an die Adresse $0070:$0000
geladen und dort ausgeführt.
Nicht schlecht, nur setzt das DOS 6.2 oder früher voraus. Hab' ich aber
nicht. Und das eigentliche Problem (GRUB will meinen Kernel nicht) kann
ich so auch nicht lösen. Man stelle sich vor, mein OS wird was... und es
kann nur über DOS 6.2-Disketten gestartet werden. Bei den
Billig-Dingern, die man heutzutage den Namen "Diskette" gegeben hat,
kann ich große kommerzielle oder idealistische Ziele wohl abschreiben ;-).

Aber der Trick ist nicht schlecht, muss ich mir merken, wobei...
neulich wollte ich mal ein BIOS-Update aufspielen, wozu ich die IO.SYS
und die MSDOS.SYS (von Win2k) auf eine (unter Win2k) frisch formatierte
Floppy schmiss und denen das System-Attribut gab. (AUTOEXEC.BAT kam mit
dem Update mit... hab ich nicht genommen, wollte erst noch das alte BIOS
sichern) Beim Reboot sagte man mir dann, dass "NTLDR fehlt". Womit das
vom Tisch wäre (weil ein NT OS bestimmt nicht zur Gänze auf eine
1440k-Floppy past)

Naja, trotzdem danke für den Tipp. Könnte sich mal als nützlich erweisen.
Tschö,
nullplan
--
To err is human. To forgive is divine.
To forget is also human...
Lesen Sie weiter auf narkive:
Loading...