UcxLog läuft problemlos auf Raspberry Pi

Moderator: DL7UCX

Benutzeravatar
DL6ER
Beiträge: 1082
Registriert: Montag 7. März 2011, 21:42
Kontaktdaten:

Re: UcxLog läuft problemlos auf Raspberry Pi

Beitrag von DL6ER »

Es gibt da ein Problem ganz bei den Basics - die Prozessorarchitektur. "Normale" Prozessoren (im Folgenden x86) haben eine CISC (Complex Instruction Set Computing) Architektur, während ARM Prozessoren RISC (Reduced ...) basiert sind.

Ein x86 Prozessor ist in der Lage eine ganze Menge teilweise sehr komplexer Operationen in nur einem einzigen Schritt auszuführen. Das war in der Vergangenheit notwendig, da man immer mehr Rechenoperationen in noch weniger Zeit unterbringen wollte. Und da man die Taktfrequenz aus verschiedenen Gründen nicht einfach immer weiter hinauf schieben kann, hat man dann dafür gesorgt, dass man die gleichen Operationen in weniger Takten ausführen kann. Um diese Komplexität zu erreichen braucht man eine ungeheure Anzahl von Transistoren zusätzlich, die den komplexen Maschinencode interpretieren und dann richtig verarbeiten können.

Beim ARM ist es anders herum konzipiert: Man wählt bewusst einen reduzierten Befehlssatz, der nur sehr allgemeine Befehle enthält. Damit kann man prinzipiell immer sein Ziel erhalten, aber manchmal nur auf Umwegen, d.h. mehrere Schritte für eine bestimmte Operation = mehr Zeit. Was man dabei aber gewinnt, ist dass man sich eine wahnsinnig große Menge an Logik sparen kann, da die Interpretation des Maschinencodes mit einer deutlich geringeren Auswahl an Befehlen auch deutlich einfacher ist.
Die unmittelbaren Vorteil für uns alle:
  • wesentlich weniger Transistoren = deutlich günstiger (ein durchschnittlicher ARM Prozessor kostet nur wenige Euros)
  • wesentlich weniger Transistoren = wesentlich weniger Energieverbrauch / Wärmeentwicklung
Wenn du das Programm nun kompilierst, übersetzt der Kompiler den menschenlesbaren Code (Maschinenunabhängig) in einen maschinenlesbaren Code (Maschinenabhängig). D.h. der Maschinencode von UcxLog enthält komplexe Aufrufe, die ein ARM Prozessor überhaupt nicht versteht. Daher startet UcxLog bei dir nicht.

wine macht folgendes: Rufe das Programm UcxLog.exe (Windows) auf und schau was es will. Für die gesamte Kommunikation mit dem Rechner selbst (der ja nun einmal keinen Windows, sondern einen Linux-Systemkern hat) dient es danach als Übersetzungsprogramm. Es generiert wieder gültigen x86-Code, der unter Linux läuft (darf auf den Arbeitsspeicher und das Internet zugreifen, etc.). Und das obwohl das Programm ursprünglich gar nicht für diese Umgebung. Sehr gute Leistung.

Aber jetzt kommt das aber: wine kann eben auch nicht mehr als gültigen x86-Code erzeugen. Doch damit kann der Prozessor vom Raspberry nichts anfangen -> UcxLog startet nicht.

Was du mit dem Übersetzen aus den Quellen erreicht hast, ist dass Wine selbst auf dem Raspberry läuft. Dennoch generiert es natürlich Code für x86, der dann nicht weiter verarbeitet werden kann. Die Entwicklung und das Festlegen welcher Code wann wo wie ausgeführt werden muss, war eine absolute Meisterarbeit und wird sich auf keinen Fall (in kurzer Zeit) auf eine gänzlich andere Architektur übertragen lassen. Im Prinzip ist es ein völlig neues Projekt, wobei es noch komplizierter wäre (die Befehle die man übersetzten will gibt es ja meistens gar nicht 1:1 beim ARM). Das Problem ist also ganz fundamentaler Natur.

Aber es gibt eine Lösung: Man lässt wine wie gehabt gültigen x86 Code erzeugen. Hier kommt jetzt qemu ins Spiel. Eigentlich dazu gedacht andere Architekturen zu simulieren (z.B. für die Entwicklung völlig neuer Chips), kann es mittlerweile auch den anderen Weg gehen: x86 Code auf ARM übersetzen. Dieser (und nur dieser) Code kann dann auf dem Prozessor ausgeführt werden und UcxLog startet. Aber man muss ich klar sein, dass man einen Trick auf einen Trick aufsetzt um es irgendwie ans Laufen zu bekommen. Es ist halt nicht vorgesehen Windowsprogramme auf dem Raspberry zu betreiben. Selbst für Microsoft waren die Hürden scheinbar zu groß, denn selbst unter dem aktuellen Windows 8.1 für Tablets lassen sich keine x86 Programme, sondern nur von vornherein für ARM kompilierte Programme, nutzen. Wir versuchen etwas wo der Hersteller selbst keine Unterstützung für gibt. Un ich bin mir ziemlich sicher, dass sie es tun würden, wenn sie es (mit vernünftigen Geschwindigkeiten) könnten!
In diesem Sinne besitzt Linux ein einzigartige herausragende Position, denn da alle Programme als OpenSource vorliegen, wurde schon fast alles auch für ARM kompiliert und kann einfach genutzt werden. Da UcxLog aber nicht als OpenSource vorliegt, bekommt man es nicht auf dem einfachen Weg auf das Raspberry.

Ich hoffe, dass nun der Hintergrund und die Problematik klarer geworden ist. Für weitere Testvorschläge und Fragen bin ich natürlich offen 8)
73 Dominik
Benutzeravatar
DL6ER
Beiträge: 1082
Registriert: Montag 7. März 2011, 21:42
Kontaktdaten:

Re: UcxLog läuft problemlos auf Raspberry Pi

Beitrag von DL6ER »

Nach Ändern von gefühlten 1000 Zeilen Code und einer ganzen Nacht Kompilierens habe ich ein Raspberry Pi vor mir liegen, das x86 Code langsam aber sauber ausführen kann. Insgesamt waren dermaßen viele Änderungen nötig, dass ich ein eigenständiges Image für den Raspberry Pi erstellen werden, welches man dann herunterladen und direkt wie das originale Image auf die SD-Karte kopieren und nutzen kann.
Ich denke das ist die beste Lösung für alle (es läuft sofort, man muss nicht stundenlang alles aus einem HowTo abtippen und außerdem ich muss keine 20 Seiten Dokumentation schreiben).

:!: :!: Wichtig: Das ist die erste Vorab-Schnupper-Version! :!: :!:
Es ist zwar vollständig, aber bei weitem noch nicht alles getestet (auch wenn ich mir schon sehr Mühe gegeben habe :wink: ).
Desweiteren ist es noch nicht an einem echten Bildschirm getestet sondern nur über VNC (ich habe kein Gerät mit HDMI- oder Cinch-Anschluss!).

Weitere Anweisungen werde ich auf einem Blog vermelden (das schein mir hier zweckmäßig): http://raspberrywine.blogspot.de/

Technische Details: In einem komplizierten Geflecht arbeiten jetzt zwei Betriebssysteme zusammen. Eins läuft auf dem ARM Prozessor (das ursprüngliche System das sich um Grafik und generellen Systemablauf kümmert).
Daneben läuft noch ein völlig unabhängiges x86 Debian, welches sich ausschließlich um wine kümmert.
Beide sprechen über eine von mir hierfür relativ stark modifizierte Version von qemu miteinander.

Die meisten anderen Programme laufen aber ohne irgendwelche weiteren Anpassungen eurerseits.

Was UcxLog betrifft: Leider funktioniert das Anlegen der Startverknüpfung nicht so wie gewollte (immerhin läuft wine in einem anderen Betriebssystem, das muss manuell mit einem Skript von mir erstellt werden).

edit: Es gibt noch ein kleinen Problem mit Multi-Thread-Programmen, deswegen lässt sich UcxLog erst ab der Alpha2 Version installieren/ausführen. Daran arbeite ich aber gerade noch. Für den weiteren Verlauf bitte auf den Blog gucken.

73 Dominik
Benutzeravatar
DL6ER
Beiträge: 1082
Registriert: Montag 7. März 2011, 21:42
Kontaktdaten:

Re: UcxLog läuft problemlos auf Raspberry Pi

Beitrag von DL6ER »

Ein erster Vorgeschmack, für mehr habe ich heute leider keine Zeit mehr...
https://www.youtube.com/watch?v=8fs56hS-Rek

73 Dominik
Antworten