SultanXDA förklarar Unified ROM Approach på OnePlus 3/3T

Vi tog kontakt med SultanXDA för att fråga om hur hans enhetliga ROM och kärna fungerar för OnePlus 3/3T. Läs vidare när vi får reda på det!

Tillbaka när vi täckte den XDA Recognized Developer Sultanxda släppte sin anpassad CyanogenMod 13 ROM och kärna för OnePlus 3T, blev många förvånade över att se "samma" ROM-bygget som släpptes för OnePlus 3T ta sig till OnePlus 3 (eller vice versa!).

Sultanxda antog den enhetliga strategin för att distribuera ROM för OnePlus 3 och den OnePlus 3T på grund av deras i stort sett liknande hårdvara och mjukvara på låg nivå. Detta innebar att ROM erbjöd korskompatibilitet mellan båda enheterna, där samma ROM-zip kunde distribueras till duon. Korskompatibla blixtlås gjorde det möjligt för användare (och utvecklaren också) att inte oroa sig för att blinka fel zip av misstag och få en murad enhet. Detta är inte att säga att OnePlus 3/3T är lätt att bygga - det medför bara mindre huvudvärk totalt sett för alla inblandade parter.

Vi kontaktade XDA Recognized Developer

Sultanxda för att belysa hela förfarandet lite mer för att uppmuntra antagandet av hans metod. Här är de viktigaste tipsen från konversationen med extra betoning:

Vad är skillnaden på OnePlus 3/3T som tillåter enhetliga ROM?

Anledningen till att en enhetlig ROM är möjlig är att OnePlus förenade BSP (de proprietära biblioteken) [Board Support Package]. Även om det är enkelt att förena en kärna, är det normalt omöjligt för [ROM]-utvecklare att förena en ROM på grund av inkonsekvenser i BSP: n som bara OEM kan åtgärda. På min sida var allt jag behövde göra att förena kärnan och separera några GPU-firmware-bilder. GPU: s firmware-bilder skiljer sig mellan Snapdragon 820 och 821, så de är inte korskompatibla. Jag modifierade kärnan för att göra den ladda rätt GPU-firmware för varje enhet att fixa detta. Jag då lade till motsvarande firmware-bilder till ROM i denna commit. Resten av de enhetsspecifika firmware-bilderna (som modembilderna) finns i en firmware-partition på varje enhet, så GPU-problemet var det enda firmware-relaterade problemet jag stötte på.

Hur tar ROM och kärna ut vilken enhet det är?

Kärnan vet vilken enhet den körs på tack vare starthanteraren. Starthanteraren väljer enhetsträdets konfiguration (packad i kärnavbildningen) som matchar dess kort-ID och skickar detta konfiguration på kärnan Detta ger kärnan flexibilitet att ladda de lämpliga konfigurationerna för både OnePlus 3 och OnePlus 3T. Du kan hitta styrelse-ID för OnePlus 3 och den OnePlus 3T genom att följa hyperlänkarna.

Behöver du bara en modifierad kärna för att stödja unified builds?

Nej, ROM-minnet måste också vara enhetligt. OnePlus förenade BSP från och med Open Betas för OP3 och höll den enhetlig i den officiella OP3T OxygenOS-utgåvan. Detta innebär att ROM-skivor måste använda proprietära bibliotek från antingen OP3:s Open Beta-byggen eller OP3T: s officiella OxygenOS-utgåva för att kunna förenas. Det finns också kravet på GPU-firmwarebild som jag beskrev ovan, och OP3T: s pekskärm firmware måste inkluderas i ROM också (detta lades till i GPU firmware commit jag länkade till ovan).

Det finns också en varning för den förenade kärnan: utvecklare måste antingen använda min kärna (som redan är förenad), eller så måste de lägga till OP3-stöd till OP3T: s OxygenOS-kärna. Stöd för OP3T kan inte helt enkelt läggas till OP3:s kärna på grund av ofullständigt stöd för Snapdragon 821, så sammanslagningen kan kräva mycket arbete från villiga OP3-utvecklare. Min kärna hade redan komplett Snapdragon 821-stöd när jag fick OP3T (eftersom min kärna är baserad på Snapdragon 821-grenen från CAF), så sammanslagningen var ganska smärtfri för mig.

Jag är säker på att många utvecklare hellre skulle använda OP3T: s OxygenOS-kärna snarare än min kärna, vilket skulle kräva stöd för OP3 till den. Jag tittade inte på att skapa en enhetlig kärna för OxygenOS ROM, så ytterligare arbete kan krävas för att få det att hända.

Kan andra utvecklare ta en titt på koden och se hur detta går till?

Ja. Sultanxda nämner att allt hans arbete är offentligt tillgängligt på hans GitHub-konto, så att alla med den erforderliga kunskapen kan se hur ROM-föreningen genomfördes. Visst, förfarandet är lite involverat och kräver en nivå av expertis, men det är en mycket ställ-och-glöm-process med fördelar som har sitt ursprung i form av mindre underhåll, mindre dubbelarbete och en förbättrad känsla av säkerhet att människor inte kommer att blanda ihop filerna för de två enheterna eftersom endast en zip fungerar för båda. När en ROM eller kärna har förenats och bekräftats vara fullt fungerande på både OnePlus 3 och OnePlus 3T, krävs mycket lite extra arbete.


Vi hoppas att vi tog fram ny information som borde hjälpa fler utvecklare att välja enhetliga versioner för enheterna. Utvecklingen på OnePlus 3T växer, och enhetliga versioner är framtiden för båda enheterna framöver.