Autor Thema: Hilfe beim booten  (Gelesen 5653 mal)

energetic

  • Beiträge: 5
    • Profil anzeigen
Gespeichert
« am: 14. August 2009, 21:24 »
Hi,
ich hab mir mal überlegt, dass es doch interessant wäre ein OS zu proggen...
Stimmt auch, aber leider nicht einfach :-D
Wie man sieht, denn ich hänge schon beim booten. Ich hab erstmal das OS so geschrieben wie ich es wollte, aber dies ließ sich nicht starten. Gut, liegt am Code, dachte ich, und so habe ich einfach mal den Beispielcode kopiert und es mit dem versucht. Gleiches Ergebnis. Andere Tutorials haben auch ncht geholfen. Also wollte ich mal fragen, ob mir jemand in allen Einzelheiten schildern kann wie ich mein OS boote.  Ob von Diskette, CD oder mit qemu, völlig egal. Hauptsache es geht.  Ein paar Infos noch:
  • ich will GRUB verwenden
  • Ich hab es schon geschafft ein IMG-Datei zu erzeugen
  • GRUB ist auf meiner Festplatte installiet
  • Ich verwende (Kubuntu-)Linux
  • qemu ist installiert
  • ich schreibe in C und habe (nach meiner Meinung)
    ganz gute Kentnisse; Bei Assembler leider weniger

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 14. August 2009, 21:42 »
Hi und willkommen im Forum.

Ich glaube, es bringt mehr, wenn wir die Sache genau umgekehrt aufziehen: Was versuchst du denn, was würdest du erwarten, dass passiert, und was passiert wirklich? Wenn du das Image hast, bootest du einfach mit qemu -fda floppy.img oder wie auch immer dein Image heißt.

Ich nehme an, das hast du schon versucht und es stimmt irgendetwas mit deinem Image nicht. Kommt nach dem BIOS gar nicht mehr? Dann stimmt wohl mit deinem GRUB irgendetwas nicht. Weigert sich GRUB, deinen Kernel zu booten? Dann ist vielleicht dein Multibootheader verrutscht (das kann man mit mbchk prüfen).

Aber das ist im Moment alles nur Stochern im Dunkeln, von daher: --verbose
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

energetic

  • Beiträge: 5
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 15. August 2009, 12:40 »
Also gut, mal in allen Einzelheiten, was ich gemacht hab, was funktioniert hat, und wo ich noch fragen hab. Alles im Bezug zum Wiki, zum Thema C-Kernel mit GRUB.
  • Code genommen und mit den entsprechenden Endungen gespeichert -> erfolgreich; Vom Assemblercode verstehe ich aber (noch) nichts, er ist einfach kopiert
  • Assemblieren und kompilieren erfolgreich -> nun sind zwei *.o Dateien vorhanden
  • linken erfolgreich -> nun ist eine *.bin Datei vorhanden
Jetzt zum GRUB-Image erstellen:
  • ich führe dd if=/dev/zero of=floppy.img bs=1024 count=1440 im Verzeichnis des Betriebssystems aus -> erfolgreich; Aber ich verstehe nicht welche Inputfile und welche Outputfile da verwendet wird und warum
  • ich führe /sbin/mke2fs -F floppy.img
    ebenfalls im Verzeichnis des OS aus -> soweit ich erkennen kann erfolgreich
  • eine IMG-Datei ist nun vorhanden
Nun zur Diskette:
  • ein Verzeichnis floppy wird benötigt, aber wo? Ich hab es einfach im OS Ordner erstellt
  • mounten des Images -> erfolgreich
  • Kopieren des Images in den Floppy-Ordener erfolgreich
  • Kopieren von stage1 und stage2 aus "/boot/grub/" in den neu erstellten Ordner "floppy/grub" erfolgreich
  • GRUB-Konfigurationsdatei erstellen -> erfolgreich; speichern im Ordner "floppy/grub/" -> erfolgreich; wozu brauchen wir die überhaupt? Würde ohne die nicht auch beim reboot von der Diskette gestartet?
  • unmounten des Images erfolgreich
  • Grub muss noch in den Bootsektor: was hat das ganze auf einmal mit dem Pfad "/usr/sbin" zu tun?
  • device (fd0) floppy.img -> erfolgreich
  • root (fd0) -> erfolgrich
  • setup (fd0) -> erfolgreich
  • beim kopieren des Images auf den Folppy-Disk: dd: Schreiben in "dev/fd0": Input/putput error

So, das wars dann schon mit der Beschreibung...  :-D

Edit: Funktioniert nun doch, ich hätte aber trotzdem noch gerne ein paar Antworten auf mein Fragen

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 am: 15. August 2009, 13:47 »
ich führe dd if=/dev/zero of=floppy.img bs=1024 count=1440 im Verzeichnis des Betriebssystems aus -> erfolgreich; Aber ich verstehe nicht welche Inputfile und welche Outputfile da verwendet wird und warum
/dev/zero ist das Inputfile und floppy.img im momentanen Verzeichnis das Outputfile. :-D
Man macht einfach eine 1.44M Datei voller 0len.

Zitat
ein Verzeichnis floppy wird benötigt, aber wo? Ich hab es einfach im OS Ordner erstellt
Ist egal wo, ist ja nur zum mounten und kopieren.

Zitat
GRUB-Konfigurationsdatei erstellen -> erfolgreich; speichern im Ordner "floppy/grub/" -> erfolgreich; wozu brauchen wir die überhaupt? Würde ohne die nicht auch beim reboot von der Diskette gestartet?
Du brauchst es, damit grub ein Menü anzeigen kann bei dem es dein OS zur Auswahl gibt. Sonst wüsste grub ja nicht wo es zB deinen Kernel finden kann.

Zitat
Grub muss noch in den Bootsektor: was hat das ganze auf einmal mit dem Pfad "/usr/sbin" zu tun?
bluecode@bluebox:~$ which grub
/usr/sbin/grub
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

energetic

  • Beiträge: 5
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 15. August 2009, 14:21 »
Nun, vielen dank. Die Antworten waren sehr hilfreich. Aber noch zu GRUB-Konfigurationsdatei:
wenn ich z.B. eine Linux-LiveCD einlege erscheint ja auch kein solches Menu. die wird einfach so gebootet.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 15. August 2009, 14:57 »
Die benutzt auch keinen GRUB. ;)

Aber du kannst mit "timeout 0" in der Konfigurationsdatei einstellen, dass er gleich den Defaultkernel booten soll ohne zu warten.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

DaCodaaa

  • Gast
Gespeichert
« Antwort #6 am: 15. August 2009, 20:50 »
Ich hab zu GRUB auch mal ne Frage:

Wie kann man in dem Bootmenü fragen lassen ob Win/Linux oder mein OS gebootet werden sollen?

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 15. August 2009, 21:06 »
Ist ja nicht so, dass GRUB keine Dokumentation hätte. Aber ich bin mal nicht so, eine typische menu.lst sieht ungefähr so aus:

default 0
timeout 5

title Linux
root (hd0,4)
kernel /vmlinuz root=/dev/hda6
initrd /initrd
boot

title Windows
chainloader (hd0,0)+1
boot

title Hello-World-OS
root (hd0,5)
kernel /home/user/osdev/kernel.elf
boot
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

DaCodaaa

  • Gast
Gespeichert
« Antwort #8 am: 15. August 2009, 21:11 »
Danke, aber was mache ich um mit grub rauszubekomen welches andere OS drauf ist und es dann gegebenenfalls Booten.
« Letzte Änderung: 15. August 2009, 21:14 von DaCodaaa »

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 15. August 2009, 21:23 »
Mit GRUB machst du das garnicht. Erkennen musst du das außerhalb, und dann entsprechend Einträge für GRUB in die menu.lst packen. Die Erkennung selber, ist nicht unbedingt klar - Linux-Systeme indem du ins FS schaust und nach ner Datei mit vmlinuz im Namen suchst (muss nicht funktionieren), Windows indem du Bootcode vergleichst. Aber sowas sollte eh nebensächlich sein, falls es dich wirklich interessiert, schau wie die Installer moderner Distributionen das machen.
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

DaCodaaa

  • Gast
Gespeichert
« Antwort #10 am: 15. August 2009, 22:10 »
ok, danke nochmal, werde mich Informieren.

 

Einloggen