Eigenes OS?


  • Mod

    Beschäftigt man sich mit einem usb-Treiber wie für das aktuelle xHCI, das usb3 in "Super Speed" ermöglicht, so sind die Anforderungen an das OS bereits hoch. Schwachstellen wie das nicht-funktionierende APIC und fehlender Ausdruck von 64-bit-Variablen werden nun spürbar. Für MSI-X benötigen wir APIC-IO. So greift eins ins andere.


  • Mod

    Die Entwicklung des xHCI Treibers geht gut voran. Event Ring und Command Ring funktionieren und wurden auf Hardware (Testrechner mit usb3-Steckkarte in PCIe-Slot) getestet. Der noch fehlende MSI-X Interrupt-Mechanismus wurde testweise durch Polling ersetzt, um die Entwicklung der xHCI-Strukturen und -Abläufe voran zu bringen. Mit xHCI erhält unser Hobby-OS ein recht aktuelles Feature, das die Kette UHCI, OHCI, EHCI nun um die Basis für Superspeed vervollständigt.


  • Mod

    I/O und local APIC wurden nun ebenfalls in Angriff genommen. Leider geraten dabei manche Emulatoren ins Stocken. Interessante Aufgaben.


  • Mod

    Fehler wurde behoben. Local APIC timer läuft nun auf Hardware und Emulatoren korrekt. APIC ist damit für weitere Experimente einsatzfähig.


  • Mod

    Auf Basis APIC und MSI (nicht MSI-X!) kann nun die Entwicklung von xHCI und usb3 weiter verfolgt werden.


  • Mod

    Transaktionen/Transfers für usb3 als Frames konfiguriert.


  • Mod

    Frohe Weihnachten!

    Ein Dankeschön an alle Entwickler und Unterstützer unseres Hobby-OS. es geht nicht mehr in Riesenschritten voran, dennoch gab es auch in 2013 einige interessante Weiterentwicklungen, z.B.:

    - AC97
    - User Programm "devmgr" hat den Kernel deutlich verschlankt
    - ATA-HDD-Treiber
    - usb-Hub ist integriert
    - md bzw. mkdir für FAT12/16/32 erstellt Unterverzeichnis
    - xHCI ergänzt nun UHCI, OHCI, EHCI
    - I/O APIC und local APIC mit MSI

    Das Forum wurde nun für nicht registrierte Personen frei geschaltet, um Barrieren zu beseitigen, und wir haben eine eigene Website http://www.prettyos.de als zentrale Information geschaffen.


  • Mod

    Das Projekt PrettyOS ist nun 5 Jahre alt. So langsam kommt wieder mehr Bewegung in das Development. Es gibt mehr als 10 sichtbare Konsolen (so viele man möchte). xHCI erhält seine Interrupts nun vollständig (APIC und MSI sind uns noch etwas fremd). ACPI läuft grundsätzlich.

    Hoffentlich geht es so munter weiter. 😉

    http://prettyos.de 👍


  • Mod

    In vmware ist heute in xhci/usb3 ein Übergang von "enabled" zu "addressed" gelungen. Das ist der erste Schritt im Umgang mit dem usb-Device. Bei xhci läuft das via TRB auf dem Command-Ring. Der Transferring am EP0 muss dazu dennoch schon bereit sein. Das ist nun gelungen! Dies sind die positiven Momente im OS-Development. Man bastelt über Wochen und Monate, kämpft sich durch specs, testet gemäß try & error, versucht durchzuhalten, und dann ist er da, der Erfolg, in Form eines Success, eines Resultats oder eines Übergangs von a nach b. Alles kleine Dinge, die wie in einem großen Puzzle perfekt zusammenspielen müssen.
    Nun fehlt noch der Schritt die Hardware zu überzeugen. Das wird gelingen! 🙂


  • Mod

    Heute hat der test-PC (mein alter Rechner, der von echter Floppy bis usb3-Steckkarte alles Mögliche aufweist) den Adressierungsvorgang unterstützt. Das zeigt, dass Hardware die Forderungen der Spezifikation viel ernster nimmt als die Emulatoren, deren Entwickler offenbar zufrieden sind, wenn der Vorgang überhaupt vollständig abläuft.


  • 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.


Anmelden zum Antworten