Besteht Interesse an einem neuen System für das Rasbperry? 15
-
Hab großes Interesse. (10) 67%
-
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