Wir haben SultanXDA kontaktiert, um zu erfahren, wie sein einheitliches ROM und sein einheitlicher Kernel für das OnePlus 3/3T funktionieren. Lesen Sie weiter, wenn wir es herausfinden!
Damals, als wir über den XDA Recognized Developer berichteten Sultanxda ließ seine frei benutzerdefiniertes CyanogenMod 13 ROM und Kernel für das OnePlus 3TViele Leute waren überrascht, dass der „gleiche“ ROM-Build, der für das OnePlus 3T veröffentlicht wurde, seinen Weg auf das OnePlus 3 findet (oder umgekehrt!).
Sultanxda hat den einheitlichen Ansatz zur Verteilung von ROMs für die übernommen OnePlus 3 und das OnePlus 3T aufgrund ihrer weitgehend ähnlichen Hardware und Low-Level-Software. Dies bedeutete, dass das ROM eine Kreuzkompatibilität zwischen beiden Geräten bot, wobei dieselbe ROM-Zip-Datei an das Duo verteilt werden konnte. Kreuzkompatible Zips ermöglichten es Benutzern (und auch dem Entwickler), sich keine Sorgen zu machen, dass sie versehentlich die falsche Zip flashen und ein blockiertes Gerät erhalten. Das soll nicht heißen, dass die OnePlus 3/3T einfach zu bauen sind – es bereitet allen Beteiligten insgesamt nur weniger Kopfschmerzen.
Wir haben uns an den anerkannten XDA-Entwickler gewandt Sultanxda um etwas mehr Licht auf das gesamte Verfahren zu werfen, um die Übernahme seiner Methode zu fördern. Hier sind die wichtigsten Erkenntnisse aus dem Gespräch mit zusätzlicher Betonung:
Was ist beim OnePlus 3/3T anders, das einheitliche ROMs ermöglicht?
Der Grund, warum ein einheitliches ROM möglich ist, liegt darin, dass OnePlus das BSP (die proprietären Bibliotheken) [Board Support Package] vereinheitlicht hat. Obwohl die Vereinheitlichung eines Kernels einfach ist, ist die Vereinheitlichung eines ROM für [ROM-]Entwickler aufgrund von Inkonsistenzen im BSP, die nur der OEM beheben kann, normalerweise unmöglich. Meinerseits musste ich lediglich den Kernel vereinheitlichen und einige GPU-Firmware-Images trennen. Die Firmware-Images der GPU unterscheiden sich zwischen Snapdragon 820 und 821, sodass sie nicht kreuzkompatibel sind. Ich habe den Kernel modifiziert, um es zu erstellen Laden Sie die richtige GPU-Firmware für jedes Gerät, um dieses Problem zu beheben. Ich habe dann die entsprechenden Firmware-Images hinzugefügt zum ROM in diesem Commit. Die restlichen gerätespezifischen Firmware-Images (z. B. die Modem-Images) befinden sich in einer Firmware-Partition auf jedem Gerät das GPU-Problem war das einzige Firmware-Problem, mit dem ich konfrontiert war.
Wie finden ROM und Kernel heraus, um welches Gerät es sich handelt?
Dank des Bootloaders weiß der Kernel, auf welchem Gerät er läuft. Der Bootloader wählt die Gerätebaumkonfiguration (im Kernel-Image gepackt) aus, die seiner Board-ID entspricht, und übergibt diese Konfiguration auf den Kernel Dies gibt dem Kernel die Flexibilität, die entsprechenden Konfigurationen sowohl für OnePlus 3 als auch für das zu laden OnePlus 3T. Die Board-ID finden Sie hier OnePlus 3 und das OnePlus 3T indem Sie den Hyperlinks folgen.
Benötigen Sie nur einen modifizierten Kernel, um einheitliche Builds zu unterstützen?
Nein, auch das ROM muss vereinheitlicht werden. OnePlus hat das BSP ab den Open Betas für das OP3 vereinheitlicht und es in der offiziellen OP3T OxygenOS-Version vereinheitlicht. Das bedeutet, dass ROMs proprietäre Bibliotheken entweder aus den Open Beta-Builds des OP3 oder der offiziellen OxygenOS-Version des OP3T verwenden müssen, um vereinheitlicht zu werden. Es gibt auch die oben beschriebene GPU-Firmware-Image-Anforderung und den Touchscreen des OP3T Firmware muss ebenfalls im ROM enthalten sein (dies wurde im GPU-Firmware-Commit hinzugefügt, auf das ich verlinkt habe). über).
Außerdem gibt es eine Einschränkung gegenüber dem einheitlichen Kernel: Entwickler müssen entweder meinen Kernel verwenden (der bereits vereinheitlicht ist) oder sie müssen OP3-Unterstützung zum OxygenOS-Kernel des OP3T hinzufügen. Die Unterstützung für OP3T kann aufgrund der unvollständigen Snapdragon 821-Unterstützung nicht einfach zum OP3-Kernel hinzugefügt werden, sodass die Vereinheitlichung möglicherweise viel Arbeit von willigen OP3-Entwicklern erfordert. Mein Kernel hatte bereits vollständige Snapdragon 821-Unterstützung, als ich das OP3T erhielt (da mein Kernel auf dem Snapdragon 821-Zweig von CAF basiert), sodass der Vereinheitlichungsprozess für mich ziemlich schmerzlos war.
Ich bin mir sicher, dass viele Entwickler lieber den OxygenOS-Kernel von OP3T als meinen Kernel verwenden würden, was die Hinzufügung von Unterstützung für OP3 erfordern würde. Ich habe nicht darüber nachgedacht, einen einheitlichen Kernel für OxygenOS-ROMs zu erstellen, daher sind möglicherweise zusätzliche Arbeiten erforderlich, um dies zu erreichen.
Können andere Entwickler einen Blick auf den Code werfen und sehen, wie das gemacht wird?
Ja. Sultanxda erwähnt, dass alle seine Arbeiten auf seinem öffentlich zugänglich sind GitHub-Konto, sodass jeder mit dem erforderlichen Know-how sehen kann, wie die ROM-Vereinheitlichung durchgeführt wurde. Zugegeben, das Verfahren ist etwas kompliziert und erfordert ein gewisses Maß an Fachwissen, aber Es ist ein Prozess, bei dem man alles nur einmal festlegen und vergessen kann Die Vorteile ergeben sich aus geringerem Wartungsaufwand, weniger Doppelarbeit und einer verbesserten Leistung Sie haben die Gewissheit, dass die Dateien der beiden Geräte nicht verwechselt werden, da nur eine ZIP-Datei für beide funktioniert. Sobald ein ROM oder Kernel vereinheitlicht ist und bestätigt wurde, dass er sowohl auf dem OnePlus 3 als auch auf dem OnePlus 3T voll funktionsfähig ist, ist nur noch sehr wenig zusätzlicher Aufwand erforderlich.
Wir hoffen, dass wir neue Informationen ans Licht gebracht haben, die mehr Entwicklern helfen werden, sich für einheitliche Builds für die Geräte zu entscheiden. Die Entwicklung des OnePlus 3T nimmt zu, und einheitliche Builds sind in Zukunft die Zukunft für beide Geräte.