[qemu] Elf-Kernel unter Win starten?



  • hallo,

    ich habe nach anleitung des lowlevel-wikis einen kernel erstellt (http://www.lowlevel.eu/wiki/Teil_4_-_Hello_World).

    im wiki steht auch, wie sich der entsprechende kernel mit qemu starten lässt.
    das funktioniert auch, aber eben nur unter linux.

    wenn ich das gleiche mit der windows-version von qemu versuche, kommt dreimal eine "boot failed"-meldung (da steht, dass qemu weder von der festplatte, noch von floppy oder cd/dvd booten konnte).

    bei linux kommt das wie gesagt nicht, daher die frage: wie kann ich diesen elf-kernel mit qemu unter windows starten?

    lg



  • Welches Format das Kernel-Image hat ist egal. In dem Tutorial steht, dass GRUB verwendet wird. Der kann jeden Kernel, der Multiboot-Konform ist laden, unabhängig davon in welchem Image-Format der Multiboot-Header verpackt ist. Wenn sie Multiboot-Konform ist kannst du auch eine PE, d.h. Exe-Datei mit GRUB und jedem anderen Multiboot-Konformen Bootloader laden.

    So viel zur Multiboot-Theorie. Ich denke dein Problem ist, dass in deinem Disketten-Image kein GRUB-Bootloader vorhanden ist. In dem Artikel ist ein Link, wie man ein GRUB-Image erstellt.
    Dein Problem könnte aber auch mit einer veralteten Quemu-Version auf Windows zu tun haben. Laut Artikel kann quemu Multiboot-Kompatible Kernel ab Version 0.11 laden. Dein Linux hat wahrscheinlich Quemu >=0.11 während du auf dem Windows eine Dinosaurier-Version hast. Also am besten einfach mal ne neuere Quemu-Version downloaden.

    Wobei ich persönlich die GRUB-Variante bevorzugen würde. Dann kannst du das Floppy-Image nämlich auch in jedem anderen Emulator verwenden und, wenn du es mit Rawwrite auf eine Diskette brennst, auch auf realer Hardware laufen lassen. Denn automatisches laden eines Multiboot-Kernels ist ein Vorzug von Quemu (und, wenn ich mich nicht täusche auch Bochs) den es auf realer Hardware nicht gibt.



  • Jonas OSDever schrieb:

    Welches Format das Kernel-Image hat ist egal. In dem Tutorial steht, dass GRUB verwendet wird. Der kann jeden Kernel, der Multiboot-Konform ist laden, unabhängig davon in welchem Image-Format der Multiboot-Header verpackt ist. Wenn sie Multiboot-Konform ist kannst du auch eine PE, d.h. Exe-Datei mit GRUB und jedem anderen Multiboot-Konformen Bootloader laden.

    So viel zur Multiboot-Theorie. Ich denke dein Problem ist, dass in deinem Disketten-Image kein GRUB-Bootloader vorhanden ist. In dem Artikel ist ein Link, wie man ein GRUB-Image erstellt.
    Dein Problem könnte aber auch mit einer veralteten Quemu-Version auf Windows zu tun haben. Laut Artikel kann quemu Multiboot-Kompatible Kernel ab Version 0.11 laden. Dein Linux hat wahrscheinlich Quemu >=0.11 während du auf dem Windows eine Dinosaurier-Version hast. Also am besten einfach mal ne neuere Quemu-Version downloaden.

    Wobei ich persönlich die GRUB-Variante bevorzugen würde. Dann kannst du das Floppy-Image nämlich auch in jedem anderen Emulator verwenden und, wenn du es mit Rawwrite auf eine Diskette brennst, auch auf realer Hardware laufen lassen. Denn automatisches laden eines Multiboot-Kernels ist ein Vorzug von Quemu (und, wenn ich mich nicht täusche auch Bochs) den es auf realer Hardware nicht gibt.

    ja, aber ich verwende kein grub, sondern qemu.
    unter linux lässt sich damit der kernel starten:
    qemu -kernel <kernenname>

    wenn ich das unter windows mache, kommten diese fehlermeldungen.

    mit grub und usb-stick hab ich bisher keine so tollen erfahrungen gemacht. das fängt schonmal damit an, dass es keine anständiges tutorial gibt, wie man das ganze überhaupt auf den usb-stick bekommt. und die paar tutorials, die es gibt, funktionieren nicht. grub wird halt gestartet, findet aber den kernel nicht.



  • hallo, hier noch ein nachtrag:

    ich habe jetzt grub2 auf einem USB-Stick erstellt (nach dieser Anleitung: http://wiki.osdev.org/GRUB2).

    Eine "grub.cfg" datei hab ich auch erstellt.

    Ort von "grub.cfg": \boot\grub\grub.cfg
    Ort von dem Kernel: \boot\kernel

    Inhalt von grub.cfg

    set timeout=3
    set default=0
    
    menuentry "Kernel" {
    	multiboot /boot/kernel
    	boot
    }
    

    wenn ich dann vom usb stick boote, dann kommt eine fehlermeldung von grub2 (wenigstens scheint grub2 zu funktionieren), da steht irgendwas von "Error 15".

    soweit ich richtig informiert bin, heißt das, dass irgendwas mit "grub.cfg" nicht stimmt.

    was ist da das problem?



  • Befindet sich der kernel wirklich unter /boot/kernel? Laut http://www.lowlevel.eu/wiki/Teil_4_-_Hello_World#Der_Hello-World-Kernel befindet sich der Kernel unter /kernel, also

    set timeout=3
    set default=0
    
    menuentry "Kernel" {
        multiboot /kernel
        boot
    }
    


  • pyhax schrieb:

    Befindet sich der kernel wirklich unter /boot/kernel? Laut http://www.lowlevel.eu/wiki/Teil_4_-_Hello_World#Der_Hello-World-Kernel befindet sich der Kernel unter /kernel, also

    set timeout=3
    set default=0
    
    menuentry "Kernel" {
        multiboot /kernel
        boot
    }
    

    ist das nicht davon abhängig, wo ich den kernel hintue? ich hab das jetzt nämlich so ausprobiert.
    ich hab den kernel jetzt in das oberste verzeichnis des usb sticks kopiert (also ".\"), d.h. der kernel ist jetzt sogar zweimal vorhanden (einmal unter ".\kernel" und einmal unter "\boot\kernel").
    die grub.cfg hab ich entsprechend abgeändert.

    die "Error 15" - Fehlermeldung kommt immernoch.



  • ok, habe gerade im englischen artikel gelesen, dass da irgendwo eine "device.map" datei sein soll.

    da ist nirgends eine.



  • GRUB ist Case-sensitive, d.h. du musst Groß-/Kleinschreibung bei den Dateinamen beachten. Und heißt der Kernel wirklich nur "kernel" ohne Dateiendung?

    Was Device.map betrifft: Da kann ich dir leider nicht helfen. Ich hab nur den "alten" GRUB legacy und brauch keine device.map. Soweit ich das Rauslesen kann, ist eine device.map jedoch optional und für deine Zwecke solltest du sie erstmal nicht brauchen.



  • Jonas OSDever schrieb:

    GRUB ist Case-sensitive, d.h. du musst Groß-/Kleinschreibung bei den Dateinamen beachten. Und heißt der Kernel wirklich nur "kernel" ohne Dateiendung?

    Was Device.map betrifft: Da kann ich dir leider nicht helfen. Ich hab nur den "alten" GRUB legacy und brauch keine device.map. Soweit ich das Rauslesen kann, ist eine device.map jedoch optional und für deine Zwecke solltest du sie erstmal nicht brauchen.

    ja, die datei heißt "kernel", ohne dateiendung.

    aber warum läuft das ganze immernoch nicht?

    vielleicht könnte bitte ein moderator diese thread in den OS-bereich verschieben? vielleicht haben die ja noch eine idee.



  • Stimmt auch die Groß-/Klein-Schreibung der Verzeichissse?

    Und kopiere bitte mal den GRUB-Output, deine Menu.cfg und den Inhalt des USB-Sticks (über "tree <Laufwerksbuchstabe>: /F" in der CMD) hierher.



  • das hier ist die fehlermeldung von grub:

    GRUB loading stage1.5.
    
    GRUB loading, please wait...
    
    Error 15
    

    der usb-stick ist, abgesehen von den grub dateien und dem kernel, leer.
    das hier sind alles dateien, die grub installiert hat (wie gesagt, bis auf den kernel und grub.cfg):

    D:\
    │   kernel
    │
    └───boot
        │   kernel
        │
        └───grub
            │   915resolution.mod
            │   acpi.mod
            │   affs.mod
            │   afs.mod
            │   afs_be.mod
            │   aout.mod
            │   at_keyboard.mod
            │   ata.mod
            │   ata_pthru.mod
            │   befs.mod
            │   befs_be.mod
            │   biosdisk.mod
            │   bitmap.mod
            │   bitmap_scale.mod
            │   blocklist.mod
            │   boot.mod
            │   bsd.mod
            │   btrfs.mod
            │   bufio.mod
            │   cat.mod
            │   chain.mod
            │   cmostest.mod
            │   cmp.mod
            │   configfile.mod
            │   cpio.mod
            │   cpuid.mod
            │   crypto.mod
            │   cs5536.mod
            │   date.mod
            │   datehook.mod
            │   datetime.mod
            │   dm_nv.mod
            │   drivemap.mod
            │   echo.mod
            │   efiemu.mod
            │   elf.mod
            │   example_functional_test.mod
            │   ext2.mod
            │   extcmd.mod
            │   fat.mod
            │   font.mod
            │   fshelp.mod
            │   functional_test.mod
            │   gcry_arcfour.mod
            │   gcry_blowfish.mod
            │   gcry_camellia.mod
            │   gcry_cast5.mod
            │   gcry_crc.mod
            │   gcry_des.mod
            │   gcry_md4.mod
            │   gcry_md5.mod
            │   gcry_rfc2268.mod
            │   gcry_rijndael.mod
            │   gcry_rmd160.mod
            │   gcry_seed.mod
            │   gcry_serpent.mod
            │   gcry_sha1.mod
            │   gcry_sha256.mod
            │   gcry_sha512.mod
            │   gcry_tiger.mod
            │   gcry_twofish.mod
            │   gcry_whirlpool.mod
            │   gettext.mod
            │   gfxmenu.mod
            │   gfxterm.mod
            │   gptsync.mod
            │   gzio.mod
            │   halt.mod
            │   hashsum.mod
            │   hdparm.mod
            │   hello.mod
            │   help.mod
            │   hexdump.mod
            │   hfs.mod
            │   hfsplus.mod
            │   hwmatch.mod
            │   iorw.mod
            │   iso9660.mod
            │   jfs.mod
            │   jpeg.mod
            │   keylayouts.mod
            │   keystatus.mod
            │   legacycfg.mod
            │   linux.mod
            │   linux16.mod
            │   loadenv.mod
            │   loopback.mod
            │   ls.mod
            │   lsacpi.mod
            │   lsapm.mod
            │   lsmmap.mod
            │   lspci.mod
            │   lvm.mod
            │   mdraid09.mod
            │   mdraid1x.mod
            │   memdisk.mod
            │   memrw.mod
            │   minicmd.mod
            │   minix.mod
            │   minix2.mod
            │   mmap.mod
            │   msdospart.mod
            │   multiboot.mod
            │   multiboot2.mod
            │   nilfs2.mod
            │   normal.mod
            │   ntfs.mod
            │   ntfscomp.mod
            │   ntldr.mod
            │   ohci.mod
            │   part_acorn.mod
            │   part_amiga.mod
            │   part_apple.mod
            │   part_bsd.mod
            │   part_gpt.mod
            │   part_msdos.mod
            │   part_sun.mod
            │   part_sunpc.mod
            │   parttool.mod
            │   password.mod
            │   password_pbkdf2.mod
            │   pbkdf2.mod
            │   pci.mod
            │   play.mod
            │   png.mod
            │   probe.mod
            │   pxe.mod
            │   pxecmd.mod
            │   raid.mod
            │   raid5rec.mod
            │   raid6rec.mod
            │   read.mod
            │   reboot.mod
            │   regexp.mod
            │   reiserfs.mod
            │   relocator.mod
            │   scsi.mod
            │   search.mod
            │   search_fs_file.mod
            │   search_fs_uuid.mod
            │   search_label.mod
            │   sendkey.mod
            │   serial.mod
            │   setjmp.mod
            │   setpci.mod
            │   sfs.mod
            │   sleep.mod
            │   squash4.mod
            │   tar.mod
            │   terminal.mod
            │   terminfo.mod
            │   test.mod
            │   test_blockarg.mod
            │   testload.mod
            │   tga.mod
            │   trig.mod
            │   true.mod
            │   udf.mod
            │   ufs1.mod
            │   ufs2.mod
            │   uhci.mod
            │   usb.mod
            │   usb_keyboard.mod
            │   usbms.mod
            │   usbserial_common.mod
            │   usbserial_ftdi.mod
            │   usbserial_pl2303.mod
            │   usbtest.mod
            │   vbe.mod
            │   vga.mod
            │   vga_text.mod
            │   video.mod
            │   video_bochs.mod
            │   video_cirrus.mod
            │   video_fb.mod
            │   videoinfo.mod
            │   videotest.mod
            │   xfs.mod
            │   xnu.mod
            │   xnu_uuid.mod
            │   xzio.mod
            │   zfs.mod
            │   zfsinfo.mod
            │   command.lst
            │   crypto.lst
            │   fs.lst
            │   moddep.lst
            │   partmap.lst
            │   parttool.lst
            │   terminal.lst
            │   video.lst
            │   boot.img
            │   cdboot.img
            │   diskboot.img
            │   g2hdr.img
            │   grldr.img
            │   kernel.img
            │   lnxboot.img
            │   pxeboot.img
            │   efiemu32.o
            │   efiemu64.o
            │   core.img
            │   grubenv
            │   grub.cfg
            │   kernel
            │
            └───locale
                    de.mo
                    en_AU.mo
                    en_CA.mo
                    en_GB.mo
                    es.mo
                    pt.mo
                    pt_BR.mo
                    zh_CN.mo
    

    dieshier ist der inhalt von grub.cfg ("Menu.cfg" hab ich nicht):

    set timeout=3
    set default=0
    
    menuentry "kernel" {
    	multiboot /boot/kernel
    	boot
    }
    


  • nur so ne frage: die liste oben verrät aber nix persönliches über mich oder meinen computer?



  • Sie verrät mir jegliche Systeminformationen von dir und jetzt werde ich dich ewig lang mit Werbung bombadieren. Muhahaha. 😃

    Nein, Spaß beiseite. Den Output wollt ich nur wegen ggf. mehr Fehlerinfos sehen. Der Output von Tree zeigt im Prinzip nur, welche Verzeichnisstruktur und welche Dateien sich auf dem Stick befinden. Die kryptischen Zahlen kommen von dem verkrüppelten Konsolen-Zeichesatz.

    Spontan sehe ich momentan nichts, was mit deinem Fehler zusammenhängt. Ich bin grade ein einem Schulcomputer, deswegen kann ich auch leider gerade keinen USB-Stick mit GRUB bestücken um zu sehen ob ggf. etwas fehlt. Werd mich dann heut Nachmittag nochmal dransetzen.



  • Ok, mein Stick ist zwar noch nicht mit GRUB2 bestückt, aber laut Internet wird deine Fehlermeldung durch einen GRUB legacy im MBR ausgelöst, der natürlich nach seinen Dateien und nicht nach denen von GRUB2 sucht. Hattest du auf diesem USB-Stick schonmal die alte GRUB version installiert?
    EDIT: Überprüf am besten mal mit dieser Anleitung, welche Version im MBR steht.

    Ansonsten: GRUB2 ist, soweit ich gelesen habe, momentan noch in der Entwicklung. Und GRUB legacy hat ihm gegenüber auch keine Nachteile, sieht halt nur nicht so schön aus. Probier erstmal nach dieser Anleitung GRUB legacy zu installieren.
    Wenn er funktioniert kannst du ja vorerst den verwenden. Wenn nicht melde dich nochmal.



  • hallo, ich hatte früher auf diesem stick grub legacy.

    wie lösche ich den mbr von einem usb-stick? ich hab den stick, bevor ich grub2 drauf hab, formatiert...

    p.s.: ich habe jetzt im lowlevel-forum diese frage auch gestellt:
    http://forum.lowlevel.eu/index.php?topic=3068.0



  • Wenn du einen alten GRUB drauf hast, benutz doch einfach den weiter. Ansonsten versuch nochmal, ob das grub-install wirklich fehlerfrei durchgelaufen ist.

    Jonas OSDever schrieb:

    Dann kannst du das Floppy-Image nämlich auch in jedem anderen Emulator verwenden und, wenn du es mit Rawwrite auf eine Diskette brennst, auch auf realer Hardware laufen lassen.

    Disketten tut es übrigens nicht gut, wenn sie brennen. 😉



  • taljeth schrieb:

    Wenn du einen alten GRUB drauf hast, benutz doch einfach den weiter. Ansonsten versuch nochmal, ob das grub-install wirklich fehlerfrei durchgelaufen ist.

    Jonas OSDever schrieb:

    Dann kannst du das Floppy-Image nämlich auch in jedem anderen Emulator verwenden und, wenn du es mit Rawwrite auf eine Diskette brennst, auch auf realer Hardware laufen lassen.

    Disketten tut es übrigens nicht gut, wenn sie brennen. 😉

    tja genau das ist der punkt, ich hab das alte grub NICHT drauf, sondern, wie gesagt, grub2. und ich hab den stick formatiert, eigentlich sollte das weg sein.

    disketten hab ich zwar auch, aber die funktionieren alle nicht mehr.



  • p.s.:

    soll ich mal "shred" über den usb-stick laufen lassen?



  • Ich bin kein Unixer, aber ich bezweifle, dass sicheres löschen was für den MBR bringt. Der ist ja für das Dateisystem gar nicht sichtbar. Geh einfach mal nach der (2.) Beschreibung, die ich dir gepostet hab (zu Install to USB scrollen) und installiere GRUB legacy.
    Den kannst du dir von hier downloaden. Ich benutz ihn für meinen Multiboot-Kernel und hab damit absolut keine Probleme.



  • Jonas OSDever schrieb:

    Ich bin kein Unixer, aber ich bezweifle, dass sicheres löschen was für den MBR bringt. Der ist ja für das Dateisystem gar nicht sichtbar.

    Derartige Programme arbeiten meist auch nicht auf Dateisystemebene, sondern schreiben den Datenmüll direkt auf das Blockdevice. Wenn man am Anfang der Festplatte mit dem Schreiben beginnt, hat man den MBR dann auch direkt erwischt.

    Mit dd gehts aber gezielter.


Anmelden zum Antworten