Introducció al port

Aquesta primera secció us introduirà els detalls de portar Ubuntu Touch a un dispositiu Android. Tingueu en compte que està escrit pensant en el públic en general, no principalment el desenvolupador de ports experimentat. En seccions posteriors hem fet un esforç per diferenciar mantenint el text principal més concís per satisfer les necessitats del lector més experimentat, alhora que proporcionem enllaços a la lectura complementària per als menys experimentats.

La guia en el seu conjunt està escrita com una seqüència de passos que descriuen com podria procedir un port ideal. No obstant això, l’adaptació és impredictible i desordenada. Cada dispositiu és diferent i en realitat és probable que iterar i revisar alguns passos, saltar per sobre d’altres passos i descobrir nous i indocumentats reptes.

Què és l’Ubuntu Touch?

Ubuntu Touch és un sistema operatiu de codi obert per a dispositius mòbils. Es pot portar a dispositius que s’envien originalment amb Android OS. Per desgràcia, la majoria d’aquests dispositius depenen en certa mesura del programari privatiu.

Per ser específic, els venedors de dispositius tendeixen a mantenir el codi que parla directament al maquinari del dispositiu (els controladors de dispositius de baix nivell) propietari. Aquests components són comunament anomenats vendor «blobs» (Binary Large OBjects). Les vendor blobs s’han d’incorporar a un port d’Ubuntu Touch. Tingueu en compte que aquests components són específics no només per a cada dispositiu, sinó també per a cada versió d’Android. Per tant, és necessari assegurar la versió correcta d’aquests components a l’hora de construir un port.

És per això que Ubuntu Touch no es pot construir completament a partir del codi font per a la majoria dels dispositius comercials. En lloc d’això, portar el sistema a aquests dispositius implica integrar els blobs de proveïdor abans esmentats en la resta del sistema, que es pot construir des de la font.

El següent component d’Ubuntu Touch és un sistema de fitxers arrel precompilat que s’ha d’instal·lar al dispositiu. Aquest component no es comunica directament amb el maquinari del dispositiu. En lloc d’això, aquesta comunicació està mediada per una capa d’abstracció de maquinari (HAL) que s’ha de construir per a cada dispositiu específic, perquè cada dispositiu té la seva arquitectura de maquinari específica. Aquest component s’anomena Halium i està disponible en diferents versions corresponents a diferents versions d’Android.

El projecte Halium permet que els sistemes Linux s’executin amb maquinari Android. És un esforç conjunt de múltiples sistemes operatius mòbils, en particular Lune OS, Droidian i Ubuntu Touch.

El portatge d’Ubuntu Touch es construeix a la part superior del Halium GSI. El Halium GSI es discuteix més avall. De vegades també pot ser útil provar amb un dels altres sistemes operatius per depurar un problema des de diferents angles.

Halium és una part indispensable d’un port Ubuntu Touch i està disponible en forma de programari de codi obert. El desenvolupament d’una nova versió de Halium és una tasca molt considerable, per la qual cosa només hi ha disponibles unes poques versions de Halium. Cada port d’Ubuntu Touch s’ha de basar en una de les versions disponibles de Halium i en els blobs de proveïdor de la versió Android corresponent. Vegeu les dues primeres columnes de la taula de sota per a més detalls.

Per tant, un port Ubuntu Touch es compon d’aquests components:
  • El sistema de fitxers arrel d’Ubuntu Touch (UT) (rootfs)

  • theHalium <https://halium.org/> the (contingut a les imatges d’arrencada i del sistema)

  • Les taques del venedor

El porter, heu de construir un nucli de Halium, que s’instal·la juntament amb l’Ubuntu Touch rootfs i el Halium GSI, per crear un port d’Ubuntu Touch que funcioni.

Versions d’Android i Halium

Halium es construeix utilitzant codi font per a una versió modificada del sistema operatiu Android anomenada LineageOS (vegeu el lloc web de LineageOS i el wiki). El codi font requerit està disponible en línia i ha de ser descarregat i configurat per construir la versió correcta de Halium per a cada port de dispositiu individual. La taula següent mostra quines versions són necessàries per a les diferents versions de Halium.

Versió d’Android

Versió de Halium

Lineage OS (LOS)

7.1

7.1

14.1

1.0

1.0

16.0

10.0

10.0

17.1

11.0

11.0

18.1

12.0

12.0

19.1

13.0

13.0

20.0

Des del 20.04, els ports d’Ubuntu Touch es basen normalment en Halium 9.0 o posterior. Les versions més antigues de Halium es consideren obsoletes i ja no són compatibles amb ports nous.

Imatge genèrica del sistema

A partir de la versió 9.0 d’Android, es va introduir un canvi significatiu d’arquitectura. Els blobs de proveïdor específics del dispositiu ara resideixen en una partició separada en lloc de compartir una partició amb la resta de la imatge del sistema. Aquesta separació del codi específic del dispositiu del codi genèric va fer possible el que es coneix com a Imatge del sistema genèric (GSI).

Un GSI és una imatge de sistema que es construeix per poder funcionar amb una àmplia gamma de dispositius. Els dispositius Android, a partir de la versió 9.0, utilitzen un GSI. Per a més informació, vegeu les pàgines del desenvolupador d’Android

El desenvolupament de l’arquitectura GSI d’Android també va aclarir el camí per a la ara disponible imatge genèrica del sistema Halium 9.0 arm64 (d’ara endavant coneguda com a el Halium GSI, o simplement el GSI) que s’utilitza per a Ubuntu Touch. Això, però, és una mica diferent del GSI d’Android. Per a una explicació més detallada del Halium GSI, consulteu la thepàgina wiki sobre les construccions del Gitlab CI de la imatge genèrica del sistema Halium <https://github.com/ubports/porting-notes/wiki/GitLab-CI-builds-for-devices-based-on-haliumarm64-(Halium-9)>..

Què significa això per al procés de port?

Atès que el GSI és un component independent del dispositiu preconstruït, simplifica eficaçment la tasca de construir un port viable eliminant gran part de la tasca meticulosa i que requereix molt de temps d’obtenir els blobs de proveïdor específics del maquinari compilats a la imatge del sistema i configurats per funcionar correctament.

Els reptes del procés portuari

Construir els components necessaris i aconseguir que treballin junts adequadament sempre implica una quantitat de modificacions de codi, configuració i proves.

Per sort, hi ha una comunitat de portadors que estan desitjosos de veure Ubuntu Touch portat a nous dispositius. Quan tingueu problemes, hauríeu de cercar les fonts següents (Obtenir ajuda de la comunitat) per veure si altres abans d’haver resolt el problema. Hi ha grups de xat de Telegram en línia que podeu unir-vos per demanar ajuda, però tingueu en compte que els participants ho estan fent en el seu temps lliure.

Nota

En el passat hi havia diferents mètodes per a la portabilitat. Troba els detalls històrics enllaçats a la secció de ports obsolets.

Coneixements i competències

Els portadors venen en totes les mides i formes, per dir-ho així. Per tant, aquesta guia no pressuposa un ampli coneixement o habilitats en cap àmbit en particular. No obstant això, com a mínim hauríeu d’estar familiaritzat amb algunes ordres d’intèrpret d’ordres comunes i estar còmode treballant des del terminal en el vostre ordinador. A més, la guia es basa en un ordinador amfitrió que executa Linux. Si teniu algun coneixement de programació, això us serà útil en algun moment, especialment si esteu familiaritzats amb C / C++. A més, hauríeu de familiaritzar-vos amb el git i configurar un compte de Github o Gitlab per fer un seguiment dels canvis de codi. És prudent començar a documentar els seus passos des del principi.

Hem intentat donar una sèrie d’explicacions en el camí. No obstant això, aquesta guia no és una referència en profunditat a l’arquitectura i el funcionament intern d’Ubuntu Touch, i obtenir una comprensió més profunda, en conseqüència, requerirà una quantitat d’investigació per la seva part.

Obtenir ajuda de la comunitat

Quan et trobis amb problemes, i ho faràs, fes referència a una o més de les fonts següents:

Assessorament general

Com més rigorós sigui a l’hora de fer notes i documentar els seus passos, menys temps passarà retrocedint els seus passos i endevinar el seu camí al llarg. A l’hora d’abordar les qüestions que sorgeixen en el camí, és prudent treballar-les una a una. Si intentes corregir diverses coses alhora, t’arrisques a acabar intentant endevinar quins canvis van resoldre un problema donat, que fàcilment condueix a trencar la funcionalitat en qüestió una vegada més en una etapa posterior.

Si després de llegir això no us desanima, acollim amb satisfacció els vostres esforços i us desitgem la millor sort!

La següent secció presenta una clau per a la resta d’aquesta guia.