Interview mit Entwicklern von SabreMod & Hyper Toolchains

Um ein Android-Projekt wie einen Kernel oder ein ROM zu kompilieren, müssen Entwickler eine Toolchain verwenden. Gemäß elinux.org besteht eine Toolchain aus einer Reihe unterschiedlicher Software-Entwicklungstools, die durch bestimmte Phasen wie GCC, binutils und glibc (ein Teil der GNU-Toolchain) miteinander verbunden (oder verkettet) sind. Toolchains können einen Debugger oder einen Compiler für eine bestimmte Programmiersprache wie C ++ oder andere enthalten. Sehr häufig handelt es sich bei der für die Embedded-Entwicklung verwendeten Toolchain um eine Cross-Toolchain oder allgemeiner als Cross-Compiler bezeichnet. Alle Programme (wie GCC) laufen auf einem Host-System einer bestimmten Architektur (z. B. x86), erzeugen jedoch Binärcode (ausführbare Dateien), um auf einer anderen Architektur (z. B. ARM) ausgeführt zu werden.

Die am häufigsten verwendete Toolchain ist GCC, die ursprünglich vor fast 20 Jahren veröffentlicht wurde. Ein leicht modifizierter GCC wird von Google während des AOSP-Erstellungsprozesses verwendet. Während Googles GCC als die stabilste Toolchain angesehen wird, gibt es einige ziemlich anständige Konkurrenten wie Linaro und SabreMod. Es ist bekannt, dass diese Projekte die Gesamtsystemleistung auf vielen Geräten erheblich steigern. Werfen wir einen kurzen Blick auf den Hintergrund dieser Projekte.

Die Linaro-Organisation wurde Mitte 2010 gegründet und ihre Entwickler begannen fast augenblicklich mit der Arbeit an vielen Projekten, einschließlich GCC-basierter Toolchains für ARM. Mit Linaro kompilierte Android-Builds tauchten einige Monate später auf. Seit der Gründung der Linaro-Gruppe wurde sie von den Anwendern für ordentliche Leistungsverbesserungen und allgemeine Schnelligkeit gelobt. Linaro verwendet seine eigenen Lösungen und wird ständig aktualisiert. Sie können die neueste Version der Toolchain direkt von der Webseite herunterladen.

Einige Jahre später, im Jahr 2013, schuf ein Entwickler namens Paul Beeler das SaberMod-Projekt. Anfänglich wurde das Projekt auf SaberMod ROM für das Nexus 7 WiFi-Modell (2013) verwendet. Dies wurde mithilfe von Benutzerspenden auf dem Nexus 4 und Nexus 5 fortgesetzt. Die Toolchains basieren auf GNU GCC 4.8, 4.9 und 5.0 mit AOSP-Patches, die vorwärts in GNU GCC portiert wurden. SaberMod bietet im Gegensatz zu Googles Toolchain zusätzliche Optimierungsfunktionen, mit denen einige Änderungen im ROM vorgenommen werden können, um mehr Leistung zu erzielen, z. B. Optimierungen der Graphitschleifentransformation. SaberMod verfolgt andere Dienstprogramme von GNU in den Toolchain-Quellkomponenten, die im Allgemeinen aktueller sind als AOSP- oder Linaro-Toolchains, und verfolgt fast immer die Entwicklungszweige von GNU GCC, um die neuesten Patches und Fehlerbehebungen zu erhalten. Das Toolchain-Ökosystem von SabreMod unterscheidet sich stark von AOSP und verwendet komplexe Skripte, um schnelle, aktuelle Toolchains bereitzustellen. Andere Toolchain-Quellen wie das AOSP-basierte Toolchain-Build-Repository wurden stark modifiziert, um die Erstellung von SaberMod-Toolchains zu vereinfachen. Ich habe mich an einige Toolchain-Entwickler gewandt, um ein paar Fragen zu stellen.

Wenn Sie SaberMod in einem Wort beschreiben könnten, welches wäre das und warum?

Joe (frap129) : Optimierung. Ich sage das, weil es das Hauptziel unseres (des SaberMod-Teams) ist, nicht unbedingt die Geschwindigkeit. Während die Optimierung zu erheblichen Leistungs- und Geschwindigkeitssteigerungen führen kann, kann sie beispielsweise den Code verkleinern oder bestimmte Optimierungen hinzufügen, die eine bessere Nutzung der Hardware eines Geräts ermöglichen.

Eine Toolchain ist nicht besonders einfach zu entwickeln. Können Sie mir sagen, welche Sprachen und Tools erforderlich sind, um ein Projekt wie SabreMod zu kompilieren?

Joe : Viele Programme sind erforderlich, bevor man überhaupt eine Toolchain erstellt, genau wie bei Android. Dinge wie Bison, Libpython-Dev, die Programme, die Sie nur in einer Anleitung zum Einrichten einer Build-Maschine zum Kompilieren eines ROMs sehen und dann vergessen. Ebenso wie für Android werden viele Repos und Projekte benötigt, der Haupt-GCC-Code, BinUtils, GDB, MPFR und MPC sind das Nötigste, aber für zusätzliche Funktionen und Leistung fügen wir andere Projekte und Bibliotheken wie GMP, CLooG, ISL, OSL hinzu. und Python. Das klingt wahrscheinlich alles nach Unsinn, aber denken Sie an den externen Ordner in Android Build Source, die Dinge im Hintergrund, die dafür sorgen, dass es funktioniert.

Adin (YoshiShaPow) : In Bezug auf Sprachen erfordert die Entwicklung keine vollständige Beherrschung einer Programmiersprache (obwohl dies sicherlich sehr hilfreich ist). Nur die Kenntnis der Codestruktur und der grundlegenden Syntax kann jemandem helfen, großartige Arbeit zu leisten!

Können Sie uns sagen, warum Sie sich für Toolchains entschieden haben? Und was war die schwierigste Situation, der Sie bisher begegnet sind?

Paul : Anfangs interessierte ich mich für die Linaro-Toolchain, stellte jedoch fest, dass es einige Fehler gab, die in den Toolchains von AOSP nicht vorhanden waren. Daher wurde die Entscheidung getroffen, eine neue Toolchain zu erstellen, die ausschließlich auf GNU GCC und AOSP-Toolchain-Quellen basiert und mit Linaro-ROM-Patches zur Optimierung von Jellybean ausgestattet ist. So wurde SaberMod geboren. Weitere Änderungen in den Toolchains und der Android-Systemquelle kamen in den folgenden Jahren. Das Schwierigste war, die Toolchains ähnlich wie AOSP kompilieren zu lassen und herauszufinden, welche Versionen von GNU-Dienstprogrammen (binutils, gdb usw.) benötigt wurden, um die Toolchains korrekt zu kompilieren.

SaberMod ist nicht das einzige Projekt, an dem Sie arbeiten. Können Sie uns etwas über Hyper Toolchains erzählen?

Joe : Hyper Toolchains war ursprünglich nur eine Seite, die ich auf GitHub erstellt habe, um meine eigenen Toolchains zu organisieren, damit sie nicht nur überladen und mit den restlichen Repos verwechselt werden, sondern nachdem ich mehr und mehr mit Toolchains zu tun hatte Am Ende entstanden Dinge, die sich von Ihren standardmäßigen SaberMod-, Linaro- oder AOSP GCC-Toolchains deutlich unterschieden. Durch das Mischen von Linaro und SabreMod wurde das Spektrum der Funktionen erweitert, die Entwickler ausschließlich mit Toolchains ausführen konnten. Da habe ich beschlossen, einen Thread zu erstellen, damit Entwickler mehr Kontrolle über die Geschwindigkeit und den reibungslosen Ablauf ihrer Projekte haben können, nicht nur über die Geschwindigkeit und Reaktionsfähigkeit von SaberMod oder den reibungslosen Ablauf von Linaro.

SaberMod und Hyper Toolchains werden von einem Entwicklerteam entwickelt. Können Sie uns alle ein wenig über sich erzählen?

Paul : Mein Interesse an Android begann mit dem G1 vor fast 4 Jahren. Ich hatte keine Erfahrung im Codieren. Ich interessierte mich für Open Source, hatte aber keine Ahnung, wo ich anfangen sollte, ein ROM, einen Kernel oder so etwas zu machen. Ich begann mit dem Experimentieren mit android bash scripting für native apps2sdext, basierend auf einer Entwicklerarbeit von firerat. Dies ermöglichte mehr Speicher für Apps, was zu der Zeit sehr begrenzt war (500 MB für System und Apps). Danach habe ich dies für den Evo Shift 4g bis zum Nexus 7 fortgesetzt, als der Mod aus Speichergründen nicht mehr benötigt wurde. Ich habe auch eine Kernel-Entwicklung mit dem Evo Shift 4G begonnen, indem ich andere Festplatten-Scheduler wie BFS mit einbezogen habe, die zu diesem Zeitpunkt noch niemand für das Gerät gemacht hatte. Ich habe die Kernel-Entwicklung auf dem Nexus 7 fortgesetzt. Aber meine Kernel-Entwicklung wird immer noch als gering eingestuft, abgesehen davon, dass hier und da Änderungen vorgenommen wurden, um die Kernel mit SaberMod-Toolchains zu kompilieren und Optimierungen vorzunehmen. Ich besitze derzeit ein Nexus 5.

Joe : Nun, ich habe vor etwas mehr als 2 Jahren angefangen, an der Entwicklung zu arbeiten, ohne Erfahrung in Codierung, Linux oder Android. Als Teenager, der gerade ein Upgrade von einem alten iPod mit Jailbreak auf ein schickes neues Nexus 7 der ersten Generation durchgeführt hatte, beschloss ich, so viel wie möglich mit Android herumzuspielen und schließlich meine eigenen nächtlichen Builds mit hinzugefügten Apps, Skripten und Mods zu kompilieren. Nach einer Weile hörte ich auf, als mein Nexus 7 tragisch zerbrochen war (RIP in Stücken). Sobald ich genug gespart hatte, um eine gebrauchte GS3 zu bekommen, lud ich die neueste Quelle herunter, begann mit der Arbeit mit der ROM-Quelle und fing an, die meiste Software auch auf meinem PC zu erstellen. Ich habe kürzlich eine OnePlus One bekommen, die mir die Entwicklung erheblich erleichtert und mich motiviert hat.

Adin : Mein erstes Android-Projekt entstand während einer Gehirnerschütterung und war im April 2014 aus der Schule entlassen worden. Als ich endlich das OK für die Elektronik bekam, entschloss ich mich, ein Android-Projekt auszuprobieren und fertigte schließlich ein Custom-Projekt an Kernel für das Moto G. Ich hatte zu der Zeit auch keine Kenntnisse über Codierung und Linux. Einige Leute sagen, es sei verrückt für einen 15-Jährigen, diese Dinge tun zu können, aber ich sehe das als Motivation, nach Besserem zu streben. Damit haben Joe und ich eine Reihe von TGM-Hybrid-Kernels erstellt. Ich kann einen 3 × 3 Zauberwürfel auch im Durchschnitt in 15 Sekunden lösen. Mein aktueller täglicher Fahrer ist der OnePlus One.

Vielen Dank für Ihre Zeit und viel Glück bei Ihren Projekten!

SaberMod und Hyper Toolchains finden Sie auf und GitLab. Werfen Sie einen Blick darauf, wenn Sie Ihr eigenes benutzerdefiniertes ROM veröffentlichen möchten. Was ist deine Lieblings-Toolchain und warum? Teilen Sie Ihre Gedanken in den Kommentaren unten.