Eigenes OS?


  • Mod

    Nun besteht das OS-Development-Projekt "PrettyOS" fünf Jahre. Für mich ein Anlass, kurz zurück und auch voraus zu schauen. Wer es ganz genau wissen will, muss nur den von mir als Logbook verwendeten Thread "Eigenes OS?" durchlesen. Dazu braucht man aber lange, denn dort stehen alle Höhen und Tiefen, alle Erfolge und Wirren.

    Begonnen hat alles mit meiner Frage: "Mich würde mal interessieren, wer alleine oder mit anderen an einem eigenen OS entwickelt, zu welchem Zweck und in welcher Sprache (ASS, C oder C++)? Links?"

    In der Nachfolge unternahm ich mit Unterstützung des Sub-Forums "Assembler" meine eigenen Schritte in das spannende und fordernde OSDev-Gebiet. Das waren wilde Zeiten. Kennzeichend hierfür:

    nasm boot.asm -f bin -o boot.bin
    nasm kernel.asm -f bin -o kernel.bin
    copy /b boot.bin + kernel.bin myOS.img
    partcopy myOS.img 0 400 -f0
    

    In diesem "myOS" steckte der feste Wille, weiter zu kommen als nur bis zum ersten Buchstaben im Bildschirmspeicher in Real Mode. Um mich selbst zu verpflichten, startete ich ein Tutorial zu diesem Thema und führte den Thread "Eigenes OS?" ohne Unterbrechung fort, auch in Zeiten, in denen außer mir niemand etwas dort zum Besten gab. Der Einstieg in OSDev ist wirklich hart.

    Da ich von Grund auf starten wollte, verzichtete ich auf fremde Bootloader wie z.B. GRUB. Das führte später zu Problemen, aber es gelang immer wieder den Bootloader (heute haben wir stage 1 und 2) für den wachsenden Kernel fit zu bekommen. Vielleicht ein Fehler, vielleicht ein Feature. Fünf Jahre hat diese Entscheidung überdauert, ein Wechsel wurde inzwischen vorbereitet, aber erst durchgeführt, wenn wirklich notwendig.

    Das Tutorial http://www.henkessoft.de/OS_Dev/OS_Dev1.htm hat mir selbst am meisten geholfen, wird inzwischen aber auch von anderen genutzt, um die schwierigen ersten Schritte zu gehen.

    Die großen Probleme kamen bald, z.B. der Wechsel von Real Mode nach Protected Mode. Fragen wie: "Ich wollte mal auf die Schnelle in den PM umschalten, macht aber einen Reset. Ich finde momentan den Fehler einfach nicht. Liegt es an GDTR/GDT, am fehlenden IDT oder am far jump?" zeigen die Grundproblematik bei OSDev. Schnell geht gar nix. Manuals, Specs, try & error. Eine große Hilfe sind die Emulatoren: Bochs, qemu, VBox, vmware, VPC, usw.

    Unser Entwickler MrX war ebenfalls von Anfang dabei, zunächst als Zuschauer, der sich am 23.03. zum ersten Mal im Thread zu Wort meldete: "Das Tutorial gefällt mir sehr gut" und auf seinen (noch heute) favorisierten Emulator VirtualBox verwies.

    Getauft wurde "myOS" von mir auch schon im März 2009 auf den Namen "PrettyOS".

    BL, Kernel, Keyboard, Video, Timer, Exceptions & Interrupts, das kam alles recht schnell und klappte gut.

    Bis sich eine Community bilden konnte, dauerte es aber noch einige Zeit, in der ich mich durch die Wirren des Pagings, Heaps, Multitaskings und der Kernel-User-Schnittstelle (syscalls) kämpfte. Bei Multitasking wäre ich fast auf der Strecke geblieben, wenn ich nicht bei "lowlevel" Unterstützung gefunden hätte. das war der kritische Mai 2009.

    Im Juni 2009 habe ich mich durch Tanenbaum "Modern OS" gebohrt. Theorie ist nett, aber bei OSDev sind Intel Manuals, Specs, praktische Ratschläge wichtiger. User Mode und Syscalls waren im Juni 2009 dran. Ein Riesenspaß, wenn endlich das erste User-Programm das OS verwendet.

    Im August 2009 kam dann die Beschäftigung mit FAT hinzu, zunächst FAT12 am Beispiel der altehrwürdigen Floppy Disk. Die Floppy kostete gewaltig Kraft, das zog sich bis in den Herbst 2009 hinein.

    Der Anfang ist immer hart. Der Weg ist mit #GPF und #PF gepflastert. Heute sind dies große Ausnahmen und werden rasch behoben.

    Im Okt. 2009 starteten wir unseren IRC chat: "Heute abend ... treffen wir uns im Channel #PrettyOS." Das ist noch heute neben dem eigenen Sub-Forum eine wichtige Plattform der Kommunikation. Die Community kostete viel Kraft, brachte aber neuen Antrieb in das Hobby-OS. Alleine schafft man kein "PrettyOS". Allen Mitentwicklern sei Dank!

    Am 17. Okt. 2009 dieser Satz von mir: "Wir möchten PrettyOS mittelfristig mit einem USB-Treiber ausstatten, da USB das moderne Bus-System ist."
    Über die Jahre wurde aus der Willenserklärung wirklich Realität. EHCI, OHCI, UHCI und neuerdings xHCI laufen inzwischen als Treiber in PrettyOS.

    EHCI war ein dickes Brett! Das Umsetzen dauerte mehrere Monate. Eine Erfolgsmeldung kam erst im April 2010: "Da es heute gelungen ist, das Zusammenspiel von PCI, EHCI und USB 2.0 fehlerfrei zu betreiben, ist es an der Zeit diesen Thread mal wieder "auszupacken". Für mich ist das der Beweis, dass man vieles (nicht alles) bewirken und erreichen kann, wenn man es wirklich will und dran bleibt."

    Am 23.05.2010 schrieb ich: "Meilenstein: Heute konnten Files von verschiedenen usb-Sticks (512 MB FAT16, 1 GB FAT16, 4 GB FAT32, 16 GB FAT32) per FAT16/32-Filesystem aufgespürt (root dir) und von usb MSD mittels SCSI command "read(10)" in den Speicher geladen (FAT, data area) werden." und am 30.05.2010: "Der "Meilenstein" konnte ausgebaut werden: rev. 476 ... ttt.elf (unser tic-tac-toe) vom usb-stick (mit FAT16 oder FAT32) wurde geladen und ausgeführt." und am 10.06.2010: "Meilenstein: Heute haben MrX und ich es in einem tollen team work geschafft, mit 3:\ttt elf von einem usb-stick ttt zu laden und zu starten."

    Ja, es sind diese "Meilensteine", die eine gewisse Belohnung für den verbissenen Kampf mit Code, Specs, Emulatoren und Hardware darstellen. Tests mit Hardware waren für uns immer wichtig, das halten wir heute noch so.

    MrX ist PrettyOS bis heute treu geblieben und hat dieses Hobby-OS mit großer Gestaltungskraft mit voran getrieben.

    Juli 2010 kam dann die Grafik dazu. Ich schrieb damals: "Der "Sündenfall" ist erfolgt. Das Text-"Paradies" ist beendet. Nun wird die Pixel-"Hölle" folgen."
    Ganz so schlimm wurde es nicht, PrettyOS ist heute noch vor allem text-basiert.
    Die Beschäftigung mit VBE und vm86 war dennoch sehr interessant. Die Module sind vorhanden und können genutzt werden. Die Maus kam damals auch dazu, bis heute nicht praktisch genutzt.

    Im Juli 2010 wurde ein erstes BMP dargestellt, und im August 2010 ein Netzwerkpaket gesendet. "Das "Ping" (Ping Request) hat sein "Pong" (Ping Reply) gesehen!"

    MrX baute im September 2010 ein "serial log" auf, das uns später bei der TCP/IP-Entwicklung große Dienste leistete.

    So ging es weiter: Multi-Boot, APM, Netzwerk (z.B. DHCP, TCP/IP).

    Im Juli 2011: "Heute ist gelungen, dass sich ein User-Programm aus PrettyOS heraus in den IRC "einwählte" und sich in die Kanäle #PrettyOS und #Lost einloggte." und "Heute hat MrX seine Überarbeitung der VBE-Shell präsentiert. Ein weiterer Meilenstein in der Geschichte von PrettyOS."

    MrX bastelte damals ein PrettyOS Screenshot: http://kloke-witten.dyndns.org/~philipp/Bilder/PrettyOS-Screenshots.png

    Im August 2011 startete das IPC-Konzept, das von MrX ausgebaut wurde. Hier werden noch heute wichtige Daten des OS abgelegt.

    Im August 2011 wurde auch usb als wesenliches Konzept in PrettyOS bestätigt: "Es wurde beschlossen, dem EHCI-Treiber (für USB 2.x) nun auch einen UHCI-Treiber (für USB 1.x) beizustellen." Es folgte dann auch OHCI.

    Im Okt/Nov 2011 wurde e1000 via CDI betrieben. Der e1000 Treiber wurde von tyndur übernommen.

    Im Nov 2011 stieß auch Jonas OSDever hinzu, der heute zur Entwickler-Kerntruppe gehört.

    Die Pausen wurden länger. 2012 war eine eher ruhige Zeit, auch das gehört dazu. dennoch wurde im Nov. 2012 das Thema Sound mittels AC97 angepackt und umgesetzt.

    MrX ist auch unser "Aufräumer" (Nov 2012): "MrX hat den Kernel verschlankt, indem er die gewaltigen Informationsmengen über Hardware mittels vendor/ID codes in ein user-Programm namens "devmgr" geschaufelt hat." Das war eine wichtige Aktion, denn bei jedem Bootvorgang auf Hardware wird der Kernel von Floppydisk geladen.

    Ein HDD-Treiber kam hinzu.

    02.04.2013: "Wir haben uns heute entschieden, das OS-Development-Forum auch für nicht registrierte Personen frei geben zu lassen. Manche scheuen einfach die Pflicht, sich in vielen Foren zu registrieren, weil sie dabei den Überblick verlieren. Wir wollen einfach nicht, dass uns ein Ratschlag oder ein interessierter Developer durch diese Hürde für unser Projekt verloren geht."
    Diesen richtigen Schritt haben wir nicht bereut. In der Anfangszeit mussten wir uns allerdings gegen unfaire Attacken und Diskussionen schützen. Das ist heute vorbei. PrettyOS hat seinen Platz in der OSDev-Szene gefunden.

    24./25.08.2013: "Endlich sind wir durchgedrungen zu den Ports am Hub. ... Heute haben wir mit 3 Hubs und 2 Sticks verschiedene Formationen (3 oder 4 Ebenen) getestet (alles Hardware, alles usb2). Eine echte Freude, wenn man dann die Sticks im device manager sieht und Files davon laden kann."
    Das sind die kleinen Freuden beim OSDev. USB ist ein gewaltiger Dschungel.

    Seit dem 26.08.2013 hat PrettyOS auch eine eigene Website: http://prettyos.de

    Im Sept. 2013 wurde das Thema xHCI gestartet, das sich zusammen mit usb3 bis heute hinzieht (am 18.04.2014 gelang die erste Adressierung eines usb3-sticks auf Hardware). Dafür mussten wir zuerst ACPI, APIC und MSI zum Laufen bekommen.

    April 2014: Es gibt nun beliebig viele sichtbare Konsolen.

    Mein Dank gilt den aktiven Entwicklern MrX und JonasOSDever, aber auch allen, die uns durch Diskussionen und temporäre Begleitung weiter brachten. 👍

    Der Blick nach vorne? Das ist schwierig. Da wir für diese "Arbeit" nicht bezahlt werden und man für Hobby-OSDev Leidenschaft und Geduld mitbringen muss, ist es nicht leicht gezielt Entwickler zu gewinnen. Daher muss man hier auf den Zufall hoffen. Ansonsten werden wir PrettyOS langsam aber stetig weiter ausbauen und stabilisieren. Ich denke darüber nach, wie man dieses herrliche OS didaktisch besser zugänglich machen könnte, was aber nicht leicht ist, solange es sich in Entwicklung befindet. Lassen wir die Zukunft einfach auf uns zukommen und wünschen PrettyOS neue Interessenten an seinem Innenleben.


  • Mod

    Meilenstein: 23.04.2014: erster Transfer mit selbst aufgesetztem setup/data/status mit xhci am Hardware USB3 Root Port (test-PC).


  • Mod

    Meilenstein: 25.04.2014: erster Transfer usb_getDeviceDescriptor mit selbst aufgesetztem setup/data/status mit xhci am Hardware USB3 Root Port (test-PC) im Rahmen des usb-Moduls von PrettyOS.


  • Mod

    Meilenstein: 04.05.2014: Bulk-Transfers nehmen in xhci ihre Arbeit auf! 👍


  • Mod

    Meilenstein: 13.05.2014: 3:/ttt wird von 16 GB usb-Stick (2.10) mit FAT32 korrekt gestartet! 👍



  • ...



  • Ich bin zwar nicht Erhard, aber antworte trotzdem mal.

    Was anders: Ich lese seit langem in diesem Thread nur noch über USB dies, USB das. Was sind abseits von USB die nächsten Baustellen? Magst einen kleinen Überblick geben?

    Das stimmt nur bedingt. Man liest zwar fast nur USB, allerdings hat es in jüngerer Zeit durchaus auch auf anderen Baustellen Arbeit gegeben:
    - Jonas' ACPI-Code ist seit kurzem dabei. Dort werden für die Nutzung des APIC wichtige Daten ausgelesen
    - PrettyOS unterstützt seit kurzem "beliebig" viele Konsolen in Form von Konsolenstacks, zwischen denen mit Alt+Bild-Auf/Ab gewechselt werden kann
    - Zahlreiche kleinere Verbesserungen wurden eingebaut (Caching verbessert, Effizienz des FAT-Treibers) und Begonnenes fortgesetzt (Arbeit an der Ramdisk)
    - Es gab zahlreiche Fehlerbehebungen (z.B. wurde kürzlich das Problem gelöst, weswegen der Floppytreiber unter Bochs nur Timeouts gab)

    Das ist im USB-Grundrauschen untergegangen, aber hat trotzdem stattgefunden.

    Ein Weg (Abseits von USB), der in Zukunft zu gehen sein wird: Neuimplementation von Paging, Vereinigung von Code des User-Heaps (vor einiger Zeit von Jonas neu implementiert) und des Kernel-Heaps. Weitere Baustellen können der Datei documentation/NextRelease.txt entnommen werden.



  • Was die Anregung zur Nummerierung der Konsolen betrifft... Aus logischer Sicht halte ich die gegenwärtige Implementation für richtiger. 0 ist halt kleiner als 1. Und aus Implementationssicht ist die gegenwärtige Variante auch einfacher, weil '0' auch in ASCII kleiner als '1' ist (das nutzt die derzeitige Implementation aus, auch wenn das natürlich recht leicht zu erweitern wäre). Aus ergnomischer Sicht stimme ich zu.

    Die Anregung zum "Durchzappen" durch die Konsolen halte ich für sinnvoll. Steht nun auf meiner TODO-Liste.


  • Mod

    Meilenstein: 29.05.2014: IOAPIC funktioniert endlich vollständig am test-PC mit ICH7 Chipsatz. Nun arbeiten sowohl die xhci- als auch die ehci-Slots mit APIC/IOAPIC. Die Überraschung war, dass es auch PCI Lines E-H gibt.


  • Mod

    Nun wurde die Entwicklung an einer ganz anderen Ecke vorangetrieben, nämlich dem Filesystem, das bei uns vor allem in fsmanager.h/c und fat.h/c residiert. Die shell wurde um wichtige Befehle für die Datei-/Ordner-Bearbeitung erweitert.


  • Mod

    Momentan ist mal wieder Sendepause. Vielleicht geht es in der dunklen Jahreszeit wieder weiter. 😉


  • Mod

    So ganz langsam nimmt das OS wieder Fahrt auf. Es gibt also Hoffnung, dass es noch weiter geht ... 🙂


  • Mod

    Frohe Weihnachten! 🙂

    http://www.fotocommunity.de/pc/pc/mypics/1786009/display/35266357

    Ein Dankeschön an alle Entwickler und Unterstützer unseres Hobby-OS. Auch im Jahre 2014 entwickelte sich PrettyOS weiter, der Chat ist nicht verwaist, und es verbleiben noch genügend offene Baustellen für 2015.


  • Mod

    Ein Frohes Neues Jahr wuensche ich allen Entwicklern und Freunden unseres Projektes PrettyOS! Ich bin sehr gespannt, welche Bereiche wir in 2015 am staerksten weiter entwickeln werden. Mein persoenlicher Favorit ist immer noch USB.


  • Mod

    Der Januar hat munter begonnen. Wenn die Entwicklung in 2015 so weiter geht, könnte PrettyOS noch eine interessante Zukunft haben, vor allem wenn es gelingt den Bereich apic/msi zu stabilisieren.



  • vor allem wenn es gelingt den Bereich apic/msi zu stabilisieren.

    Erledigt!


  • Mod

    Nun wurden auch in xhci endlich die Ports und xHC-Slots entkoppelt, sodass man nun beliebig Sticks anstecken, abziehen, wieder anstecken kann. Ein wichtiger Schritt. Diese Vertauschungslogik muss nun auch für u/o/eHCI getestet werden.


  • Mod

    Die Basis für usb Human Interface Devices (HID) ist gelegt. Bisher positiv getestet an OHCI mittels VBox.


  • Mod

    Das Gleiche gilt für Mass Storage Devices gemäß UFI/CBI, wie z.B. usb-Floppy.


  • Mod

    Nun sind wir am Thema "interrupt transfers", zunächst am Beispiel des Hubs, der hierbei auf Anfrage (IN auf den Interrupt Endpoint) ein Byte zurück gibt, das in Bit 0 für den Hub steht und in Bit n (1-7) für den entsprechenden Port (1-7). Wir verwenden dazu zunächst die Periodic List am ehci.


Anmelden zum Antworten