Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: KtmnjjpfjsFvzG am 22. January 2013, 13:16
-
Hi, ich bräuchte Hilfe bei der Bedienung von Qemu.
Ich hab mir die Version 1.3.0 für Windows geladen und jetzt hab ich folgenden Ordner:
(http://s7.directupload.net/images/130122/mj6wuw85.png)
Welches davon brauche ich? Und wie nutze ich das dann? :?
-
/usr/bin/qemu-system-x86_64 -cdrom ~/git/el_toro_repo/bootable.iso -d int -no-kvm -d int
so starte ich das zumindest auf Linux in meinem build und run skript, ohne das img/iso als param weiß qemu ja gar nicht was es starten soll und im standard Qemu gibt es kein grafisches Auswahlmenu zum starten wie bei VirtualBox(ich habe auf Ubuntu ne zeitlang AQemu genutzt das)
PS: Wir Hardcore Kernel Hacker verwenden Windoof eh nur zum zocken ;-)
-
OK, dann brauch ich also eine .iso, aber was muss da alles drauf?
Ich hab nur die (fertig compilerte) kernel-Datei und den Quellcode...
-
Ja, gibt's auch Tools : http://wiki.osdev.org/Bootable_El-Torito_CD_with_GRUB_Legacy, http://wiki.osdev.org/Disk_Images, http://wiki.osdev.org/Windows_Tools
Ich habe leider bloß die englischen Artikel gefunden auf die schnelle.
-
Fürs erste könnte auch ein:
qemu-system-FOO.exe -kernel DEINKERNEL
reichen.
-
@Martin Erhardt: Ich weiß ehrlich gesagt nicht so ganz was ich da machen soll, wenn ich einfach nur die Kernel-Datei auf ein image tu, klappt das doch sicher nicht, oder?
@MNemo: Wenn ich das mache, passiert das:
Z:\Users\C\Desktop\OS\Qemu-windows-1.3.0>qemu-system-x86_64w -kernel ../OS/kernel
Z:\Users\C\Desktop\OS\Qemu-windows-1.3.0>
Also einfach garnichts... :(
-
@Martin Erhardt: Ich weiß ehrlich gesagt nicht so ganz was ich da machen soll, wenn ich einfach nur die Kernel-Datei auf ein image tu, klappt das doch sicher nicht, oder?
doch also es gibt ja den Multiboot standard nach dem der Multiboot Header in den ersten 8KB sein muss, gefolgt vom kernel.
.section .text
// Init ist eine Funktion aus init.c
.extern init
#define MB_MAGIC 0x1badb002
#define MB_FLAGS 0x0
#define MB_CHECKSUM -(MB_MAGIC + MB_FLAGS)
// Der Multiboot-Header
.align 4
.int MB_MAGIC
.int MB_FLAGS
.int MB_CHECKSUM
// _start muss global sein, damit der Linker es findet und als Einsprungspunkt
// benutzen kann (alle Labels, die nicht global sind, sind nur in dieser Datei
// sichtbar)
.global _start
_start:
// Stack initialisieren
mov $kernel_stack, %esp
// C-Code aufrufen
call init
// Falls wir jemals aus init zurueckkommen sollten, sperren wir die Interrupts und
// halten einfach den Prozessor an. (man braucht ihn ja nicht unnötig heißlaufen lassen.)
_stop:
cli
hlt
// Sollte es doch weitergehen, probieren wir erneut die CPU schlafen zu lassen
jmp _stop
// 8 kB Stack fuer den Kernel. Das Label steht hinter dem freien Speicher,
// weil der Stack nach unten waechst
.section .bss
.space 8192
kernel_stack:
Wenn Start.S so ungefähr aussieht dann geht dass
-
Hmm nagut ich habs mal gemacht, jetzt hab ich eine kernel.iso, aber wenn ich das mache:
qemu-system-x86_64w -cdrom ../kernel.iso -d int -no-kvm -d int
passiert garnichts, und wenn ich sowas eingebe: qemu-system-x86_64w blabla test lalalalala
passiert ebenfalls überhaupt nichts, also auch keine Fehlermeldung, garnichts. Auch einfach so die qemu-system-x86_64w.exe zu starten bewirkt ->nichts<-... :(
-
@Martin Erhardt: Ich weiß ehrlich gesagt nicht so ganz was ich da machen soll, wenn ich einfach nur die Kernel-Datei auf ein image tu, klappt das doch sicher nicht, oder?
doch also es gibt ja den Multiboot standard nach dem der Multiboot Header in den ersten 8KB sein muss, gefolgt vom kernel.
[…]
Wenn Start.S so ungefähr aussieht dann geht dass
Nein. Gans so einfach ist das nicht. Das muss schon ein bootbares Image mit einem bootloader sein, der den kernel dann auch lädt. Was aber mit El-Torito und Grub (zumindest auf Linux) relativ einfach geht.
qemu-system-x86_64w blabla test lalalalala
passiert ebenfalls überhaupt nichts, also auch keine Fehlermeldung, garnichts. Auch einfach so die qemu-system-x86_64w.exe zu starten bewirkt ->nichts<-... :(
das sollte nicht passieren. Ich habe aber leider keine Ahnung was da schief geht.
-
Kriegst du zufällig eine stdout.txt und/oder stderr.txt erzeugt? SDL unter Windows hat diese komische Angewohnheit, die Ausgabe dorthin umzuleiten statt seine Ausgaben auf die Konsole zu schreiben. Da könnte also eine Fehlermeldung drinstehen.
-
Ja:
qemu: PC system firmware (pflash) must be a multiple of 0x1000
Hm.... :?
-
Das heißt vermutlich, dass er das BIOS nicht findet. Schau dir mal die linux-0.2.bat an, wenn die dabei war, sollten da die richtigen Optionen drin stehen. Ansonsten wäre meine Vermutung, dass ein -L Bios helfen könnte.
-
Geil :D, Danke, geht! :) Einen Schritt weiter!
Er öffnet QEMU, es aber dann steht da CDBOOT: Couldn't find NTLDR, was wohl irgendetwas damit zu tun hat, dass meine .iso nicht korrekt ist.
Ich habe also GRUB 2.0 runtergeladen, da drin ist aber nciths mit El-Torito...
-
[quote von Wiki]
Unter Windows gibt es noch keine Möglichkeit, ein CD-Image von GRUB2 zu erstellen.[/quote]
Also versuchs mal mit GRUB 1
-
Alles klar, jetzt hab ich GRUB 1.99, aber immer noch kein el torito in sicht :?
-
Warum nimmst du nicht jetzt wieder -kernel? Oder ein Floppyimage, das ist in der Regel einfach als CDs (wobei ich mir da unter Windows auch nicht ganz sicher bin)
-
Stimmt!
Ich hab -kernel genommen, und siehe da: Wie es sein soll, oben links steht Hello World!
Danke euch!!!!
-
Ja schön aber früher oder später brauchst du trotzdem die .iso wenn du dein OS auf echter HW laufen lassen willst.
hast du mkisofs und stage2_eltorito, sodass du die .iso so erstellen kannst?
mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o cdrom.iso cdrom_files/
-
Weder noch :(
-
Ja wie erstellst du dann deine .iso
-
Mit sonem iso-Creator, den man für alles möglich nehmen kann... und dadrin ist nur die kernel-Datei... was natürlich nicht funktionieren kann...
ich werd morgen mal nach den beiden sachen googlen.
-
Alles klar, jetzt hab ich GRUB 1.99, aber immer noch kein el torito in sicht :?
GRUB 1 bzw. GRUB legacy geht bis version 0.99 oder so.
GRUB 2 fängt etwa bei GRUB 1.98 oder so an.
Das ist also immer noch GRUB 2.
-
Oh, OK, dann lad ich mir nachher mal 0.99