Eigenes OS?



  • Ich benutze auch die ganze Zeit Ubuntu und habe keinerlei Probleme gehabt. Allerdings nehme ich QEmu, da der QEmu-Launcher meiner Meinung nach etwas komfortabler ist wenn man öfters mal etwas an den Einstellungen ändert.

    Ich hab das mit cat in zwei Befehlen gemacht "cat boot.bin > MyOS" und "cat ckernel.bin >> MyOS" aber sollte auf das gleiche hinauslaufen.



  • Hi,

    das Problem hat sich mittlerweile erledigt. Ich habe beim Aufruf von nasm einfach mal die Option -O32 weggelassen und schon funktionierte es.


  • Mod

    Erstmal ein 👍 für die großartigen Tutorials, sehr interessant und informativ.

    Herzlichen Dank für das positive Feedback. Freut mich, wenn das Thema OS Development etwas belebt wird.

    Kleines Problem: aktueller 1st stage BL startet bei einigen PC nicht:
    http://www.brokenthorn.com/forums/viewtopic.php?f=15&t=1235

    Idee? Würde gerne meinen Aufbau weitgehend beibehalten.
    Wer Probleme beim Booten hat, nimmt bis zur Lösung diesen 1st stage BL als Austausch in den aktuellen Versionen ab Nr. 95: http://www.henkessoft.de/OS_Dev/Downloads/Version_94_stage1_bootloader.zip



  • Hallo,

    Erhard Henkes schrieb:

    Kleines Problem: aktueller 1st stage BL startet bei einigen PC nicht...

    ein Blick in den Quellcode von grub, z.B. aus boot.S:

    /*
    * This is a workaround for buggy BIOSes which don't pass boot
    * drive correctly. If GRUB is installed into a HDD, check if
    * DL is masked correctly. If not, assume that the BIOS passed
    * a bogus value and set DL to 0x80, since this is the only
    * possible boot drive. If GRUB is installed into a floppy,
    * this does nothing (only jump).
    */

    oder

    /*
    * Determine the hard disk geometry from the BIOS!
    * We do this first, so that LS-120 IDE floppies work correctly.
    */

    lässt erahnen, warum es immer mindestens einen problematischen Rechner geben wird...


  • Mod

    EDIT: Boot-Problem zunächst wieder gelöst, lag bei dem einen PC am Stack.

    FDC funktioniert leider auch nicht überall. Manche melden beim Lesen der Root Directory einfach Funkstille zurück. Schwieriges Thema.


  • Mod

    Hier könnte sich eine neue OS Community bilden, falls jemand von Anfang an dabei sein möchte:
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1772434.html#1772434
    Wichtig: Kein Stress oder Zeitdruck! Spaß sollte im Vordergrund stehen.


  • Mod

    Der Start hat geklappt. Wollte mich bei allen bedanken, die mich auf diesem Weg bisher unterstützten. Nun ist m.E. der richtige Zeitpunkt, um noch dazu zu stoßen, egal ob auf Basis Windows oder Linux.



  • Hallo Erhard,

    ich habe ja kein eingebautes Disketten-Laufwerk und habe gerade folgendes ausprobiert:
    - ein Floppy Driver USB genommen, angeschlossen - scheint noch zu funktionieren 🙂
    - damit eine Diskette formatiert - ja, ich habe bei mir noch eine Diskette gefunden:

    mkfs.msdos -F 12 -I /dev/sdc

    - Dateien boot2.sys und ckernel.sys (diese habe ich ja am Montag kompilieren können) ins Wurzelverzeichnis der Diskette kopiert und so sieht es aus:

    drwxrwxrwx 2 alex root 16384 1. Jan 1970 .
    drwxr-xr-x 3 root root 4096 7. Okt 19:04 ..
    -rwxr-xr-x 1 alex root 912 7. Okt 18:54 boot2.sys
    -rwxr-xr-x 1 alex root 34036 7. Okt 18:54 ckernel.sys

    - auf einen USB Stick habe ich mit dd die boot.bin kopiert
    - System neugestartet und vom USB Stick gestartet, mein BIOS kann es, wie es aussieht

    Nun kommt folgende Ausgabe:

    Loading Second Stage Bootloader
    **************
    BOOT2.SYS MISSING

    Heisst das, mein BIOS hat vom USB Stick gestartet und hat erkannt, dass es einen Disketten-USB-Adapter mit einer Diskette drin gibt - nur findet die BOOT2.SYS nicht? 🙂


  • Mod

    Ganz genau, er hat gebootet! Er verwendet für das Suchen/Nachladen des second stage Bootloaders das übliche Disketten-Format FAT12.
    ..


  • Mod

    ..



  • abc.w schrieb:

    Nun kommt folgende Ausgabe:

    Loading Second Stage Bootloader
    **************
    BOOT2.SYS MISSING

    Heisst das, mein BIOS hat vom USB Stick gestartet und hat erkannt, dass es einen Disketten-USB-Adapter mit einer Diskette drin gibt - nur findet die BOOT2.SYS nicht? 🙂

    Laut "boot.asm" (hab leider nur die "104"-Version, könnte also falsch sein meine Vermutung) heißt es eher, daß die "boot.bin" die "BOOT2.SYS" auf dem USB-Stick gesucht hat. Starte mal "vollständig" vom USB-Diskettenlaufwerk.



  • +gjm+ schrieb:

    ...Starte mal "vollständig" vom USB-Diskettenlaufwerk.

    Ausprobiert, geht nicht. Keine Ausgaben, BIOS geht dann weiter und bootet von der Festplatte...


  • Mod

    ..



  • Wenn das BIOS es unterstützt, sollte das Laufwerk über int 13h genauso aussehen wie ein ganz normales Floppylaufwerk auch.



  • Erhard Henkes schrieb:

    Kannst Du Dir hier ziehen: http://www.henkessoft.de/OS_Dev/Downloads/106.zip

    Vielen Dank! Stell da mal eine Seite rein auf der die Versionen schön sauber aufgelistet sind (zusammen mit den Chat-Protokollen). 🙂

    abc.w schrieb:

    Ausprobiert, geht nicht. Keine Ausgaben, BIOS geht dann weiter und bootet von der Festplatte...

    Probier mal folgendes:

    ; boot.asm (version 106)
    ReadSectors:
    (...)
    ; mov  dl, BYTE [DriveNum]   ; ändern in:
     mov  dl, BYTE [bootdevice]  ; Da unklar ist welche "Nummer" das Bootdevice hat,
    (...)                        ; wird "bootdevice" schon die richtige Nummer sein.
    

    Setzt aber voraus, daß das BIOS "CHS-Zugriffe" auf ein USB-Gerät unterstützt (emuliert).
    Die Version 106 startet auch "vollständig" von einem USB-Stick. Allerdings unter folgender Voraussetzung:

    - Der USB-Stick muß FAT12-formatiert sein. 🙂


  • Mod

    @+gjm+: Danke für den Versuch. Kannst Du noch etwas dazu sagen, wie man einen USB-Stick sauber mit FAT12 formatiert? Siehe z.B. hier: http://forum.chip.de/partition-formatierung/fat12-formatieren-750786.html 😕

    ..


  • Mod

    Chat-Protokolle

    ... befinden sich in unserem Forum (bitte Badestrand anmailen)

    Hier ist noch die Version 105 (106 war eine experimentelle Variante wegen des Floppy Treibers, um zu sehen, was bei echten PCs geht und was nicht 🙄 ): http://www.henkessoft.de/OS_Dev/Downloads/105.zip

    So sieht das bei mir mit Bochs (gebootet von echter Floppy) aus:

    PrettyOS [Version 0.1.0105]  (C) 2009 henkessoft.de
    
    Usable RAM: 1048124 KB
    
    Ram Disk at: 4008100Ch
    
    Floppy Driver Test!
    
    <Floppy Disc Root Dir>
    PRETTYOS        0 byte           (lab)  1st phys. sec: 31
    BOOT2.SYS       912 byte         (arc)  1st phys. sec: 33
    CKERNEL.SYS     33648 byte       (arc)  1st phys. sec: 35
    
    <DIR> dev
    35      file1
    35      file2
    35      file3
    1693    shell
    
    $> hi <--
    I am PrettyOS. Always at your service!
    $>
    

    Die obere Auflistung betrifft die Root Directory der Floppy Disk, während nachstehend die RAM Disk Struktur (vom User-Bereich mit incbin in den Kernel eingeschleuste Programme, z.B. shell) dargestellt wird. Details findet man hier: http://www.henkessoft.de/OS_Dev/OS_Dev3.htm#mozTocId610721



  • Erhard Henkes schrieb:

    Die obere Auflistung betrifft die Root Directory der Floppy Disk, ...

    Und genau das ist ein großes Problem. Die boot.asm ist teilweise "hardcoded" und deshalb nur für eine Diskette geeignet. Wenn ein USB-Stick formatiert ist, hat er einen MBR und eine Partition. "Angesprochen" wird er vom BIOS (falls das BIOS das unterstützt) via CHS (wobei gilt: CHS = xxx 255 63 (xxx = je nach Größe)).

    Normalerweise gehört die "boot.bin" in den ersten logischen Sektor der Partition (sprich ganz an den Anfang der Partition). Aber dann stimmt die gesamte "CHS-Zugriffslogik" nicht mehr. Prinzipell aber kein Problem das anzupassen.

    Allerdings das unangenehmste an der boot.bin ist das Dateisystem:

    Wenn man auf der Diskette eine Datei löscht und wieder raufkopiert, dann stimmt die Struktur des Root-Directory nicht mehr. Dummerweise werden gelöschte Dateien nicht gelöscht, sondern nur als gelöscht markiert. Was heißt, daß dann das Root-Directory einen Eintrag zuviel hat und geparst werden muß.

    Entweder programmiert jemand einen 510 Byte großen FAT12-Parser (und für den USB-Stick am besten gleich einen FAT32-Parser) oder beim Bootloader muß auf die Vorzüge eines FS verzichtet werden.



  • Spätestens bei Bootmedien mit Partitionen wird aus Stage1 wohl sämtlicher Filesystem Code verschwinden müssen. Die Partitionstabelle liegt nämlich auch im MBR. Es sind also letztendlich nur noch 440 Byte nutzbar für Stage1. Die jetzige Stage1 ist mit 480 Byte also schon zu groß. Die Stage1 von Grub ist auch schon 400 Byte groß ohne jeglichen Filesystem Code.

    Allerdings nutzt Grub einen anderen Trick aus. Der MBR besteht zwar nur aus den ersten Sektor des Bootmediums, aber der Rest des ersten Kopfes ist unbenutzt. Grub legt Stage2 also in diesen ungenutzen Platz auf dem ersten Kopf. Die Installationsroutine von Grub überprüft allerdings die Größe und kann die Stelle von Stage2 nachträglich in der compilierten Stage1 patchen.



  • Wenn Stage 1 die CHS der eigenen Partition selbst ermittelt (z.B. durch Auslesen der Partitionstabelle des MBR), dann müssen "Seltsamkeiten" wie bei GRUB erst nicht in Erwägung gezogen werden.

    In der eigenen Partition ist Platz genug für "seltsames" (jedenfalls solange wie PrettyOS noch kein FS hat).


Anmelden zum Antworten