Neues Betriebsystem (Spielekonsole)

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Besteht Interesse an einem neuen System für das Rasbperry? 15

    1. Hab großes Interesse. (10) 67%
    2. Nicht so sehr. (5) 33%

    Zuerst mal Hallo an alle!

    Wo fange ich am besten an.
    Also ich arbeite seit ca. zwei Jahren an einem neuen betriebssystem.
    Die Entwicklung fing auf einem anderen board an, bin aber vor einiger zeit wegen
    der optimalen Grafischen leistung zum Raspberry gewechselt.
    Ich könnte hier jetzt seitenweise schreiben wie es dazu gekommen ist,
    ich werde mich aber ans wesentliche halten.

    Also das System ist für Entertainment und Games gedacht und heisst „Mediastream“.

    Zum einsatz kommen:
    Linux Kernel >= 3.0, UCLIBC Runtime, OpenGLES 2.0, mono usw.
    Was ich bisher umgesetzt habe.
    Die NET Runtime (MONO) läuft stabil.
    Gamepads mit force feedback funktionieren.
    Grafik Hardware funktioniert.
    Webcams funktionieren.

    Also die Anwendungen werden in C#,VB oder jeder cli kompatiblen Sprache geschrieben.
    Und man hat vollen zugriff auf die Hardware.

    Die Apps werden durch das Apphub gestartet.
    Heißt die "Apphub" app ist die erste anwendung die nach dem booten gestartet wird.
    Die sieht momentan noch ein bißchen wie die Microsoft Kacheln aus.

    Performance Einbußen durch NET gibt’s bisher keine.
    Da ich die Vector,Matrix,Rectangle Operationen in ARM Assembler geschrieben hab und
    von der runtime darauf zugegriffen wird.


    Allgemein
    Ich habe auch beruflich mit embedded Systemen zu tun, heißt
    ich habe bereits zig Toolchains und Hunderte male einen Kernel kompiliert.
    Wusste also genau wo ich ansetzten musste, um so ein Projekt umzusetzen.


    System Voraussetzungen

    Habe natürlich vorher recherchiert.
    Ob das mit dem RPi überhaupt möglich ist.

    Die Resultate sind sehr gut. Egal wie komplex bisher die Grafische Ausgabe ist,
    die 60 FPS brechen nie ein. Mehr als 60Hz geht nicht durch den Vertical Sync.
    Ihr müsst bedenken das das board Full-HD filme problemlos dekodieren kann.
    Das bei manchen, sich alles träge anfühlt, hat andere Hintergründe.
    Da bei vielen ein Resource fressender X11 Window Server, unzählige daemons und ganze
    Entwicklungsumgebungen laufen.

    Da würden auch alle Spielekonsolen der sechsten Generation nicht mehr rund laufen.


    Runtimes und Entwicklung (NET oder Java)
    Da Rapid Application Development (RAD) immer wichtiger wird,
    und sich Leute leider mit Assembler und C nicht mehr auseinander setzen wollen,
    muss man so was fast zwangsmäßig anbieten.

    Die entscheidung was man für eine High Level runtime unterstützt, war nicht leicht.
    Wichtig war mir nur das Just-in-time-Kompilierung (JIT) unterstützt wird,
    das können aber mittleweile beide runtimes.

    Also Java Bytecode oder NET (CIL) Bytecode.
    Die Entscheidung ist auf NET gefallen, die Gründe sind:
    Da für die NET Platform viele sprachen verfügbar sind C#, VB, C++ Managed, IronPython, Boo, Delphi.NET usw. In all den Sprachen kann man Apps schreiben.
    Visual Studio die beste ,mir bekannte, IDE ist.
    Die freie NET Implementierung mono sehr stabil läuft.

    Die Performance ist optimal da ich mono mit der vollen JIT unterstützung kompiliere.
    Und die grafischen Berechnungen alle auf der FPU laufen, entsteht nur mehr der Overhead des Marshalling, und der ist gering.


    Grundsystem
    Was man zuerst erwähnen sollte ist, das ich keine Unix Basis verwende.
    Heißt ich habe mir ein eigenes System entworfen.

    /Applications
    /Mountings
    /Resources
    /Resources/Fonts
    /System
    /System/Bin
    /System/Devices
    /System/Modules
    /System/Libraries
    /System/Process
    /System/Settings
    usw.

    Ich halte nicht viel vom Unix Unterbau oder der Linux Standard Base.
    Meiner Meinung komplett veraltet. Aber das ist Offtopic und müsste man wo anders besprechen.

    Wie gesagt es gibt kein /lib,/usr/lib, /usr/local/lib, dev und proc … usw mehr.

    Versioning ist komplett raus.
    Habe alle Makefile‘s bearbeitet damit man nur mehr einheitliche Librarys hat. z.B.
    /System/Libraries/libc.so
    /System/Libraries/libdl.so
    /System/Libraries/libpng.so
    /System/Libraries/linker.so
    usw.

    Die Binarys sind alle in /System/Bin z.B
    /System/Bin/ls
    /System/Bin/mkdir
    /System/Bin/mono
    usw.

    Die PATH Variable zeigt standardmässig auf /System/Bin.
    Ich benutze nur eine Partition auf der SD-Karte. Um von jedem OS
    Vollen Zugriff auf die Verzeichnisse zu haben.


    Hab die C Runtime die auf der neuesten stabilen UCLIBC basiert so abgeändert
    Das die neuen pfade benutzt werden. Also z.B. nicht /dev sondern /System/Devices .


    Der Boot Process
    Als erstes wird vom Kernel /System/Bin/init gestartet.
    In diesem Script werden zuerst die verzeichnisse gemountet z.B.

    devfs => /System/Devices
    procfs =>/System/Process
    sysfs => /System/Kernel

    Danach werden zusätzliche Kernel module geladen, für Gamepads usw…
    Pfade werden in der Umgebungs Variable gesetzt.
    Netzwerk wird gestartet.

    Zuletzt wird momentan noch eine shell gestartet.
    Später soll hier nur mehr die Apphub Anwendung gestartet werden.
    Apphub ist das gleiche wie bei android der Launcher oder bei den Konsolen das Dashboard.


    Die Apphub Anwendung
    Das ist sozusagen die Anwendung mit PID 1, wird die
    beendet fährt der kernel runter.Von hier aus werden alle Apps
    mit einer schönen Oberfläche gestartet.


    Die Apps (Anwendungen oder Games)
    Befinden sich im /Applications Ordner.

    Der Aufbau sollte so sein:
    /Applications/MeineApp
    /Applications/MeineApp/Thumbnail.png
    /Applications/MeineApp/Metadata.xml
    /Applications/MeineApp/Executable

    In dem Ordner “MeineApp” können jetzt auch die für die Anwendung relevanten Daten liegen
    z.B. /Applications/MeineApp/Content usw.

    Die Executable kann eine Binäre elf Datei, ein Script oder eben eine NET Anwendung sein.
    Apps auf basis von NET können mit jeder Entwicklungsumgebung die NET unterstützt geschrieben werden.
    Dazu hab ich Reference Assemblies geschrieben.


    Die Frameworks
    Basieren alle auf Version 4.0

    Also ich kompiliere nicht das ganze NET Framework.
    Mono lädt die Assemblies Standardmässig aus
    /System/Assemblies/

    Hier ist vorhanden:
    /System/Assemblies/mscorlib.dll
    /System/Assemblies/System.dll
    /System/Assemblies/System.Net.dll
    /System/Assemblies/System.Xml.dll

    Man könnte noch mehr hinzufügen das müsste man aber besprechen.

    Dan gibt es noch die von mir geschriebenen Assemblies
    /System/Assemblies/System.Graphics.dll
    Hier sind alle OpenGLES 2 funktionen, Vector, Matrix, Texture klassen usw. enthalten.

    /System/Assemblies/System.Applications.dll
    Hier ist alles drin für die Anwendungen.
    Keyboard, Controller, Mouse, Application, Settings usw…


    Ich hoffe Ihr könnt jetzt die Abläufe erkennen wie ich sie im Kopf hab.
    Bitte habt noch etwas geduld mit mir, wegen einem demo image,
    den ich will keinen vorführeffekt Erleben.


    Grüße an Alle
    Andreas

    Einmal editiert, zuletzt von Teamdevel (6. August 2013 um 11:48)

  • mccarthy
    Ja ich bin seit ca. 15 Jahren informatiker.
    Screenshots hab ich leider noch keine.

    framp
    Ich werde natürlich versuchen sobald wie möglich ein
    demo image hier reinzustellen.

    Also woran ich gerade arbeite ist.
    Das Platform SDK für Windows.
    Um c,c++ anwendungen zu entwickeln.

    Das Application SDK für Visual Studio.
    Um eine App oder ein Game direkt aus der Entwicklungsumgebung heraus
    auf dem board zu starten.

    Dazu schreibe ich gerade ein tool, das ich jetzt mal Bridge nenne.
    Was im hintergrund auf dem Raspberry läuft.

    Für die Entwicklung stehen jetzt...
    [font="Verdana"]libz, libpng, libfreetype, libpixman, libcairo, libEGL,
    libGLESv2, libgraphics, libsystem, libplatform und natürlich C Runtime
    [/font]
    [font="Verdana"]zur verfügung.[/font]


    [font="Verdana"]Wobei die libgraphics, libsystem, libplatform von mir kommen.
    In der Graphics library sind alle rechen intensiven Funktionen drin.[/font]
    [font="Verdana"]In der System library ist alles vorhanden um Gamepads, Keyboard, Maus usw. abzufragen.[/font]
    [font="Verdana"]Die Platform library dient als Layer um z.B. auch auf andere boards zu portieren.


    [/font]

    Einmal editiert, zuletzt von Teamdevel (31. Juli 2013 um 20:58)

  • @Alex
    Falls du ein paar Technische Details brauchst,
    damit es sich für dich weniger nach „Fake“ anhört, wäre das kein Problem.
    Jedoch bezweifle ich das du auch nur die Hälfte verstehen würdest.

    nette grüße

  • Habe zwar in der Abstimmung 'Nicht so sehr' ausgewählt, liegt daran das ich eher weniger spiele und schon garnicht auf'm Pi.
    Ansonsten interessiert mich das eher (programm)technisch.
    Ergeizig-ambitioniertes Projekt:thumbs1: Ich wünsch dir viel Erfolg.

    waren das Zeiten, als Ordner noch Verzeichnisse waren


  • Zuerst mal Hallo an alle!

    ...

    So jetzt wollte ich fragen ob hier ein paar leute Ideen, Fragen, Anregungen usw.
    zum Projekt haben!?

    Grüße an Alle
    Andreas


    Ebenfalls mal Hallo,

    also um Deinem Wunsch nachzukommen, sind Deine Informationen mehr als dürftig.
    Das mindeste, was mir fehlt um irgendeine Aussage zu machen, ist eine Art Grobkonzept.
    Bei den dünnen Angaben kann ich noch nicht mal die (Um)Frage beantworten, ob mich das interessiert ...


    cu,
    -ds-

  • dreamshader

    Du hast natürlich Recht mit den Informationen.
    Ist aber alles beabsichtigt, da aus meiner Erfahrung heraus, sich gezeigt hat.
    Das manche mit Zuviel Informationen am Anfang nichts anfangen können.
    Dann gibt’s natürlich wider welche die wollen alles auf einmal wissen.

    Auf jeden Fall hab ich den ersten Beitrag editiert
    vielleicht ist es jetzt besser verständlich.

    Hab heute auch zwei neue libraries fertig bekommen.

    libopenal.so
    Basierend auf der Open Source Variante von Creative labs.

    libspeech.so
    Für Sprachausgabe.
    Basiert auf der PICO engine von android, sind nicht die schönsten stimmen, aber frei.


    grüße
    Andreas

    Einmal editiert, zuletzt von Teamdevel (1. August 2013 um 12:03)

  • Hallo Andreas,

    zunächst mal danke für die ausführlichere Variante.

    Also wenn Du das alles so über jahre zusammengefummelt hast: Hut ab vor Deiner Geduld und Ausdauer.
    Wie Du die NET Runtimes auf den RPi bekommen willst, ist mir zwar schleierhaft, aber sei's drum.
    Ob das Ganze am Ende nicht ein Griff ins Klo wird, weil ein Handy nicht unbedingt als Spielekonsole geeignet ist, vermag ich ebenfalls nicht zu sagen.
    Durch die einheitlichen Libraries hast Du Dir m.E. ein Eigentor geschossen, weil Du dadurch die Probleme provozierst, die die bedauernswerten Menschlein haben, die auf die flotten Sprüche aus Redmond hereingefallen sind und sich seitdem mit inkompatiblen dlls rumschlagen.
    Dass Du, wenn ich es recht verstanden habe, einen umgekrempelten 3.0er Kernel verwendest, finde ich persönlich wieder beachtlich.
    Auf der anderen Seite wäre es mir persönlich viel zu viel Aufwand alle Software an diese Änderungen anzupassen.
    Das zweite Problem, das ich in dieser Richtung sehe ist, dass Du immer hinterherhinken und dadurch nie in der Lage sein wirst, aktuelle Hardware zu unterstützen.

    Mein Fazit: eine große, private Herausforderung. Für Deine Zwecke vermutlich genau das Richtige und eine nicht zu unterschätzende Leistung.
    Aber für die breite Masse imho vollkommen überflüssig und sinnlos. Allein schon, weil Du m.E. niemals in der Lage sein wirst als Einzelperson vernünftigen Support zu leisten.

    Salü und nix für ungut - aber ich sags halt so, wie ich es sehe ...
    -ds-

  • Ich verstehe noch nicht ganz, warum Ihr soviel Aufwand treibt .NET Linuxkompatibel zu machen?
    Die Sprache ist speziell für die Windowswelt gebaut und nicht wirklich die schnellste.
    Außerdem dürfte der Pi Probleme haben grafisch mit der PS1 mitzukommen.
    Wie sieht denn Eure Erfahrung mit der Performance im Vergleich zu anderen Konsolen aus?

  • Danke für deine Anregungen.
    Für gute Kritik bin ich natürlich immer offen.
    Es gibt Verfechter von Versioning und eben die die es hassen.
    Wenn du denkst dass es ohne nicht geht würdest du jedes android system
    in die Tonne werfen, denn die benutzen ebenfalls kein Versioning.

    Aber das mit dem Eigentor musst du mir natürlich erklären, den ich kompiliere von Grund auf alles selbst,
    also wo sollen hier Probleme bzw. fehlende Abhängigkeiten entstehen!?

    Zum Kernel, ich benutze immer den aktullen kernel der raspberry pi foundation und wende meine patches drauf an, kann mir nicht vorstellen das es aktueller geht.

    Zur NET runtime die läuft ja schon am board, mono benutzt die uclibc runtime!

    grüße
    Andreas


  • ...

    Aber das mit dem Eigentor musst du mir natürlich erklären, den ich kompiliere von Grund auf alles selbst,
    also wo sollen hier Probleme bzw. fehlende Abhängigkeiten entstehen!?

    ...
    grüße
    Andreas

    Hi,
    hatte ich, glaube ich, dazu geschrieben. Wenn es von einem .so immer nur eine Version gibt, dann funtionieren evtl. andere Komponenten die auf eine neuere/ältere aufsetzen, nicht (mehr). Schnittstellenproblematik halt ... deshalb auch der dll-Vergleich.

    cu,
    -ds-

  • orb

    Also das mit NET Bytecode sei mal dahingestellt.

    Aber was das Grafische anbelangt täuscht du dich sehr.
    Wir befinden uns auf gleichem Level wie eine WII.

    Da musst du schon unterscheiden ob du ein ganzes Betriebssystem am laufen hasst.
    Wo zig Anwendungen laufen oder eine art gaming konsole.

    Wo alles mit Assembler für grafische Berechnungen optimiert ist und nur eine App
    im normal Fall gleichzeitig läuft.

    Das man mit raspbian zu wenig leistung erziehlt
    hat weniger mit der hardware zutun.


    Aber danke für deine Beteiligung
    Andreas

    dreamshader

    Du hast natürlich mit den Abhängigkeiten nicht Unrecht.
    Aber aus den letzten Jahren heraus muss ich behaupten dass es mit Linux bzw. Unix viel
    mehr Probleme gibt. Wie oft wollte man was kompilieren und autoconf, automake zeigt einem an das man die falschen libraries hat.
    Dan will man mit autoconf neu konfigurieren dan geht das nicht weil man von autoconf selbst die falsche Version hat usw… da könnte ich sehr viel erzählen.

    Aber da macht jeder seine eigenen Erfahrungen.

    grüße

    Einmal editiert, zuletzt von Teamdevel (3. August 2013 um 22:19)

  • Hier mal eine Gegenüberstellung.

    [font="Courier New"] Hauptprozessor      Grafikprozessor       Arbeitsspeicher    Texturespeicher[/font]
    [font="Courier New"]Wii       Broadway PowerPC Hollywood (Ati) 88MB 3MB[/font]
    [font="Courier New"] 729 Mhz 243 Mhz[/font]
    [font="Courier New"] 1 GFLOPS[/font]


    [font="Courier New"]PS2 MIPS R5900 Graphics Synthesizer 32MB 4MB[/font]
    [font="Courier New"] 295 MHz 147 MHZ[/font]
    [font="Courier New"] 1 GFLOPS[/font]


    [font="Courier New"]XBOX Intel Celeron Geforce-3-Kern 64MB Geteilt[/font]
    [font="Courier New"] 733 MHZ 233 MHZ[/font]


    [font="Courier New"]RPi Broadcom 2708 VideoCore IV 256MB 256MB[/font]
    [font="Courier New"] 700 MHZ 250 MHZ[/font]
    [font="Courier New"] 24 GFLOPS

    [/font]

    Daten laut Wikipedia und Raspberry PI Foundation.
    nette grüße

    Einmal editiert, zuletzt von Teamdevel (8. August 2013 um 13:49)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!