Autor Thema: Vorstellung + GRUB Error 13 / Kein Multiboot-Header bei Wiki Beispiel  (Gelesen 6766 mal)

tyrell

  • Beiträge: 2
    • Profil anzeigen
Gespeichert
Hallo liebe Lowlevel Gemeinde,

ich bin Student(21) aus Bielefeld und möchte mich etwas in Betriebssysteme einarbeiten, sozusagen als Vorbereitung für meine gleichnamige Vorlesung. Ich kann jetzt schon sagen, dass ich mit großer Wahrscheinlichkeit nie ein eigenes OS rausbringen werde. Trotzdem möchte ich mal einige Dinge selbst gemacht haben. Wer die Grundlagen kennt, der kann später das große Ganze besser verstehen. Das bestätigen mir vor allem die älteren Kollegen in der Firma und die Profs an der FH.

Neben diesem "guten Vorsatz" bin ich auch so technisch interessiert, ich kann etwas Assembler und kenne mich in den meisten Bereichen von Betriebssystemen grob aus.

Ich habe mich in euer Einsteiger-Tutorial eingearbeitet, hänge aber leider schon am ersten Problem, das es hier im Forum auch schon häufiger gibt. Der GRUB Error 13.

Ich habe mich strikt an das Tutorial gehalten, einzige Ausnahme:
nasm bekommt bei mir -d "BITS  32" mit, da ich auf einem 64Bit System arbeite und mir nicht sicher war ob auch ohne dieses Flag 32Bit Code gebaut wird.

Bei der ganzen Abarbeitung (kompilieren, linken, grub,...) bekomme ich nirgendwo Fehler zurück, die einzige Ausgabe überhaupt liefert grub:
grub> device (fd0) floppy.img
device (fd0) floppy.img
grub> root (fd0)
root (fd0)
grub> setup (fd0)
setup (fd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... no
 Running "install /grub/stage1 (fd0) /grub/stage2 p /grub/menu.lst "... succeeded
Done.

Ich konnte hier schon nachlesen, dass bei Error 13 oft der Multiboot header nicht richtig sitzt. Das ist auch bei mir der Fall:
$ mbchk floppy.img
floppy.img: No Multiboot header.

Problem ist also erkannt, ich weiß nur nicht, was ich jetzt anders machen muss. Wäre nett, wenn jemand helfen könnte.

Gruß, Max
« Letzte Änderung: 04. May 2010, 21:10 von tyrell »

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
mbchk arbeitet nicht mit einem Floppyimage, sondern mit der Kernel-Binary. Probier es am besten damit nochmal.

Wenn der Header dann immer noch fehlt, kannst du dir den erzeugten Kernel mal näher anschauen, z.B. mit objdump, readelf oder auch ganz einfach einem Hexeditor. Das wahrscheinlichste Problem dürfte sein, dass der Header irgendwie aus den ersten 8k der Datei rausgeschoben worden ist. Das Alignment auf 32 Bit hast du drin, oder?
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
Soweit ich weiß, wurde das gestern Nacht noch geklärt, ein --nmagic beim Linken hat wohl geholfen. :-)

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
Wäre vielleicht sinnvoll, sowas dann auch gleich im Wiki zu ändern?
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
Ich hab dann gesagt, dass du das am besten machst, sonst verkaputtiere ich das noch und dann war ich schuld daran, dass dein Tutorial nicht mehr funktioniert. :-D

tyrell

  • Beiträge: 2
    • Profil anzeigen
Gespeichert
Genau, im Chat wurde mir geholfen. Mein Script zum bauen sieht jetzt so aus:

nasm -f elf -o kernel_asm.o -d "BITS  32" kernel.asm

gcc -m32 -ffreestanding -o kernel_c.o -c kernel.c -Wall -Werror -nostdinc

ld -z max-page-size=0x1000 -T linker.ld -o kernel.bin kernel_asm.o kernel_c.o

sudo mount -o loop floppy.img floppy

rm floppy/kernel.bin
cp kernel.bin floppy/

rm -r floppy/grub
cp -r grub floppy/

sudo umount floppy

Ich arbeite auf Ubuntu 9.10 64 Bit, so wie ich das verstanden hatte, hing das Problem mit Ubuntu zusammen.

Vielen Dank nochmal für die Hilfe  :-) :-)

 

Einloggen