PrettyOS startet nur emuliert



  • Hallo,

    da man ja anscheinend als unregistrierter Nutzer nichts im PrettyOS-Forum schreiben kann (ganz toll gemacht 🙄), schreib ich das halt hier.

    Ich wollte mal nachfragen, wie man PrettyOS auf einem "echten" Computer gestartet bekommt.

    Ich hab bisher die floppy-Datei (zu finden im PrettyOS Ordner: /prettyos/trunk/Source/) über qemu ( qemu-system-i386 -fda FloppyImage.img ) gestartet, was auch immer gut funktioniert hat, sogar Internetverbindung usw., es funktioniert auch auf einer 64-bit Emulation ( qemu-system-x86_64 -fda FloppyImage.img ), alles kein Problem.

    Nun wollte ich das ganze mal richtig starten.

    Also Linux hochgefahren, USB-Stick an Computer und sudo dd if=./FloppyImage.img of=/dev/sda1 eingegeben, wobei /dev/sda1 die USB-Devicedatei ist.

    Danach Computer neugestartet und im Bootmenü den USB-Stick ausgewählt. Danach kam kurz eine Meldung wo irgendwas mit Bootloader stand, dann ist seltsamerweise mein normales Betriebssystem hochgefahren, da war irgendein Fehler.
    Zuerst dachte ich, das Ganze liegt daran, dass ich einen 64-bit Computer habe, aber das kanns nicht sein, ich habs nämlich auch auf einem anderen Computer, der 32-bit ist, ausprobiert, da war der gleiche Fehler.

    P.S.: Nein, diesen Thread bitte nicht ins PrettyOS-Forum verschieben, weil da kann ich ja wie gesagt nichts posten. Besser wäre es, ihr würdet endlich das Forum für alle freischalten.



  • USB-Sticks funktionieren nur mit viel Glück. Als ich das versucht habe, konnte ich nur die wenigsten PCs überreden, vom USB-Stick zu booten, aber auf einem ging es dann doch. Du könntest Legacy-USB-Support im BIOS aktivieren, vielleicht hilfts.

    Wenn Du echte Disketten und ein entsprechendes Laufwerk hast, versuchs damit.



  • Mr X schrieb:

    USB-Sticks funktionieren nur mit viel Glück. Als ich das versucht habe, konnte ich nur die wenigsten PCs überreden, vom USB-Stick zu booten, aber auf einem ging es dann doch. Du könntest Legacy-USB-Support im BIOS aktivieren, vielleicht hilfts.

    Wenn Du echte Disketten und ein entsprechendes Laufwerk hast, versuchs damit.

    Ich hab keine Disketten mehr.

    Aber warum ist das abhängig vom USB-Stick? Dem Bootloader müsste es eigentlich egal sein, von welchem Medium er gestartet wird, denn ich schreibe ja mit dd eine bitgenaue Kopie des Image auf den USB-Stick, d.h. der eigentliche Bootloader bleibt unverändert und müsste eigentlich starten.

    Wie lässt sich das Problem lösen?

    Und warum werden nicht-registrierte User aus dem PrettyOS-Forum ausgeschlossen?



  • Bis wohin kommt der Bootloader denn? (Was ist die letzte Ausgabe, falls Du die sehen kannst)



  • Mir ist übrigens gerade eine Idee gekommen, was vielleicht das Problem ist. Dooferweise muss ich erstmal einen Weg finden, das Problem möglichst ohne USB-Stick zu reproduzieren.



  • Loading second stage bootloader...



  • Das unterstützt meine Theorie:
    Im Stage1-Bootloader nutzen wir noch brav die Nummer des Bootdevices, die uns das BIOS übergeben hat. Dem Stage2-Bootloader wird diese zwar übergeben, aber er nutzt sie nicht, stattdessen wird stets 0 genommen. Das trifft auf den meisten Systemen zu (dort, wo das erste Floppy-Laufwerk genommen wird), nicht aber z.B. auf (den meisten) Systemen mit USB-Stick.

    Geh mal nach /stage2_bootloader/boot2.asm und schreib in die Funktion entry_point: folgendes:

    mov BYTE [DriveNum], dl
    

    Wenn es dann funktioniert...



  • ich hab vorher das vorkompilierte image genommen.

    wenn ich prettyos auf linux kompilieren will mit
    sh ./build.sh

    kommt irgendwann der fehler

    nasm kernel/data.asm -Ox -f elf -Ikernel/ -o object_files/kernel/data.o
    kernel/data.asm:15: error: `incbin': unable to open file `user/vm86/VIDSWTCH.COM'
    kernel/data.asm:18: error: `incbin': unable to open file `user/vm86/APM.COM'
    make: *** [object_files/kernel/data.o] Fehler 1

    😕



  • Welche PrettyOS-Revision?



  • Mr X schrieb:

    Welche PrettyOS-Revision?

    die allerneuste: http://prettyos.svn.sourceforge.net/viewvc/prettyos.tar.gz?view=tar



  • Die allerneuste uralte. Der Link verweist auf das alte Repository. (Siehe hier: http://www.c-plusplus.net/forum/310029)

    Und in der wirklich neusten Revision ist das Build-Problem unter Linux behoben.



  • Mr X schrieb:

    Die allerneuste uralte. Der Link verweist auf das alte Repository. (Siehe hier: http://www.c-plusplus.net/forum/310029)

    Und in der wirklich neusten Revision ist das Build-Problem unter Linux behoben.

    zum glück aktualisiert ihr immer eure FAQ, besonders die oberste. 😕

    gibts ne möglichkeit, den ganzen "trunk/Source" ordner runterzuladen? ohen svn? ich hab keine ahnung wie das geht und grad keine lust, irgendwas zu googlen.



  • hm. Anscheinend nicht. Zumindest finde ich keine Tarball-Option auf Sourceforge (https://sourceforge.net/p/prettyos/code/1407/tree/)

    zum glück aktualisiert ihr immer eure FAQ, besonders die oberste. 😕

    Danke für den Hinweis - da ist tatsächlich ein Link nicht aktualisiert worden. Wird sobald möglich geändert (bzw. entfernt, wenn niemand den "Download Tarball"-Button findet.)



  • Ich fürchte, es wird dir nichts anderes übrig bleiben, als dir SVN zu besorgen und es damit herunterzuladen.



  • Mr X schrieb:

    Ich fürchte, es wird dir nichts anderes übrig bleiben, als dir SVN zu besorgen und es damit herunterzuladen.

    ok, wie ist der aufruf? bestimmt irgend so ein "clone repository" wie bei git oder so

    p.s.: also z.b. bei git ist es so, dass man über ein webinterface eine zip runterladen kann, aber anscheinend gibts das hier nicht.



  • habs selbst herausgefunden:
    svn checkout http://svn.code.sf.net/p/prettyos/code ./

    jetzt werd ich mal die zeile ausbessern und kompilieren.



  • serlib_cpp.cpp:10:42: Fehler: »operator new« nimmt Typ »size_t« (»unsigned int«) als ersten Parameter [-fpermissive]
    userlib_cpp.cpp:14:44: Fehler: »operator new« nimmt Typ »size_t« (»unsigned int«) als ersten Parameter [-fpermissive]
    make[1]: *** [userlib_cpp.o] Fehler 1
    make: *** [userlibs] Fehler 2

    findet ihr das etwa lustig?



  • Nunja. GCC/Clang ändern mit jedem Release ihre Definition des new-Operators. Pass es manuell an das an, was dein GCC will. Wenn Du uns deine GCC oder Clang-Version nennst, können wir eine zusätzliche #ifdef-Weiche für diese Version anlegen.



  • Mr X schrieb:

    Nunja. GCC/Clang ändern mit jedem Release ihre Definition des new-Operators. Pass es manuell an das an, was dein GCC will. Wenn Du uns deine GCC oder Clang-Version nennst, können wir eine zusätzliche #ifdef-Weiche für diese Version anlegen.

    GCC-Version:
    gcc-Version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1)

    Wobei ich glaube, dass es mittlerweile schonwieder eine neue GCC-Version gibt.

    Warum braucht ihr überhaupt C++? Linux hats vorgemacht, C würde im Grunde reichen!



  • GCC-Version:
    gcc-Version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1)

    Das ist seltsam, weil wir (auf Windows) ebenfalls GCC 4.7.2 einsetzen. Dann ändere halt lokal den Prototypen, sodass es kompiliert. Oder nimm Clang, dass ist eh der bessere Compiler 😃

    Warum braucht ihr überhaupt C++? Linux hats vorgemacht, C würde im Grunde reichen!

    Userprogramme. Und im Nachhinein würde ich sagen, dass C++ im Kernel auch ganz praktisch gewesen wäre. Konstruktoren und Desktruktoren sind eben doch komfortabler als irgendwelche delete_console(console_t* c);-Funktionen.


Anmelden zum Antworten