Ottimizzare compilazione Android

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
ilmich
Master
Master
Messaggi: 1549
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 14.2 64bit
Kernel: 4.19.46
Desktop: dwm
Località: Roma

Ottimizzare compilazione Android

Messaggio da ilmich »

Ciao a tutti, noncurante di alcuni requisiti minimi suggeriti (quantità di ram in particolare) mi sono cimentato nella compilazione di una rom android (la cyanogenmod per la precisione) su slackware.
Premesso che a parte un pacchetto reperibile su slackbuilds (schedtool) non ho avuto alcun problema di sorta, volevo capire alcune cose per ridurre un po i tempi (16 ore anche se un bel po' del tempo l'ha passata a compilare solo webkit).
Per chi non lo sapesse/avesse mai fatto e per chiarire meglio, il sorgente android una volta scaricato con gli appositi tool si presenta come un source tree enorme con sorgenti che vanno da librerie di sistema al framework java fino ad arrivare alle singole applicazioni.
La compilazione avviene sfruttando dei 'semplici' makefile, di fatto per far partire la compilazione full, una volta fatti alcuni semplici passi basta dare un

Codice: Seleziona tutto

make {nome in codice del device}
e andare a fare altro.
Dopo questa premessa passiamo ai chiarimenti. Sui vari wiki ufficiali e non i passi per velocizzare il tutto (fermo restando che la prima volta sarà sempre biblicamente lenta) sono quelli che piu' o meno da pacchettizzatore conoscevo già ma ovviamente la cosa piu' complessa che io abbia mai compilato è stata la openjdk.
Il primo suggerimento è quello di aumentare il parallelismo dei task (make -jnum_jobs) e in base a varie fonti si suggerisce di usare la seguente formula

Codice: Seleziona tutto

numero_dei_core+1
oppure

Codice: Seleziona tutto

numero_dei_core+2
etc etc etc
E qui scatta la prima domanda....visto che di default android sembra compilare con un numero di jobs pari a 2(come il numero di core che ha il mio portatile) ha veramente senso aumentarli!??! In base alla mia esperienza anche come programmatore ho appreso (soprattutto empiricamente) che alla fine conta il numero di core 'fisici'.. qualsiasi task asincrono ulteriore non viene effettivamente eseguito in parallelo, quindi tecnicamente anche a metterne 8 sempre realmente 2 per volta ne fa.

Un altro suggerimento è quello di usare ccache per la compilazione delle parti in c/c++. Ora dato il soggetto della compilazione usarlo mi porta alla valutazione legata alla quantità di spazio necessaria (io sto facendo un port su diversi dispositivi quindi mi troverò nella situazione di dover rifare la compilazione per architetture leggermente differenti e quindi la cache generata per uno smartphone potrebbe non essere utile all'altro)
Quindi la seconda domanda è.. in base alla vostra esperienza quanto in media si riesce ad ottimizzare considerando che comunque data la natura del make dopo la prima compilazione (che sarebbe lunga anche usando ccache) viene aggiornato solo il delta!?!?
Questa domanda scaturisce dal fatto che se il guadagno non è eccessivo a sto punto preferisco duplicare il source tree e sfruttare la compilazione per delta piuttosto che buttare un sacco di gb per poi risparmiare 'solo' 2-3 ore su 16.

Grazie a tutti in anticipo
ho visto cose che voi astemi non potete immaginare
https://github.com/ilmich

rik70
Iper Master
Iper Master
Messaggi: 2174
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 64-current
Kernel: 5.6.x-ck1
Desktop: Xfce 4.14
Distribuzione: Arch Linux

Re: Ottimizzare compilazione Android

Messaggio da rik70 »

Rispondo giusto per dire che sono interessato alla faccenda. È da un po che mi frulla in testa l'idea di acquistare una di quelle cineserie di cui si parlava qui sul forum e metterci su una rom personalizzata, e ho subito pensato a un porting di cyanogenmod.
Avevo letto un po di documentazione: difficile ma non impossibile. Prima o poi mi cimento anch'io.
Tu su che dispositivi stai lavorando?

Sul numero di job, anch'io conoscevo la regola del numero_core+1, ma non mi è mai sembrato portare benefici tangibili.

Con ccache ho compilato diversi kernel e devo dire che la seconda ricompilazione - dopo un make clean - è drammaticamente più veloce, anche dopo l'applicazione di patch incrementali. Però dopo avanzamenti di versione, se non ricordo male, non cambia tantissimo.

Ma vado a memoria e a "sensazione", oltre a capirne poco o nulla, quindi seguo e lascio la palla ad altri.

ilmich
Master
Master
Messaggi: 1549
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 14.2 64bit
Kernel: 4.19.46
Desktop: dwm
Località: Roma

Re: Ottimizzare compilazione Android

Messaggio da ilmich »

rik70 ha scritto:Avevo letto un po di documentazione: difficile ma non impossibile. Prima o poi mi cimento anch'io.
E' piu' "semplice" di quanto si pensi, anche se in realtà questa affermazione deriva dal fatto che ho letto parecchio e non sono proprio digiuno di compilazioni di software su linux.. comunque per un qualcosa di funzionante in modo decente non bisogna allontanarsi troppo come versione(passare da un android 4.2 a lollipo richiede skill piu' avanzate) e bisogna avere a portata di mano la rom originale perchè l'80% delle informazioni e file vanno presi da li.
Io sto lavorando su un mediatek 6592 (cubot x9).. su github si trovano dei port per telefoni con lo stesso soc (ma ovviamente vanno adattati.. non c'e' niente che funzioni out of stock)
Infatti per il mio porting ho forkato un progetto per un altro smartphone (sempre mediatek 6592) che è ancora in uno stato embrionale.. per questo ho bisogno di un modo piu' rapido di fare le build :)

Riguardo alla tua esperienza mi sa che ci provo :)

P.s: per quanto riguarda le cineserie.. devo ammettere che plastiche a parte già con il software in dotazione sono delle piccole bestioline.. purtroppo spesso arrivano in italia con rom non proprio ottimizzate e/o non piu' aggiornate.. da qui il porting verso un qualcosa di attivamente sviluppato
ho visto cose che voi astemi non potete immaginare
https://github.com/ilmich

rik70
Iper Master
Iper Master
Messaggi: 2174
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 64-current
Kernel: 5.6.x-ck1
Desktop: Xfce 4.14
Distribuzione: Arch Linux

Re: Ottimizzare compilazione Android

Messaggio da rik70 »

Uh, anch'io devo lavorare su soc mediatek :)

Ho già fatto qualche esperimento sulle stock rom di 2 dispositivi: su un Huawey mi son tentato pure la modifica dell'ESR con editor esadecimale in modo da dare tutto lo spazio alle app e il resto su sd esterna.
Insomma roba da niubbo, ma tutto da slackware e sta cosa m'intriga assai. Anche perché vedo in giro prezzi/specifiche di quello che arriva nel nostro mercato dal made in China e mi viene da piangere.

Ho già adocchiato un octa-core Lenovo alla mia portata e mi sa che parto per una nuova avventura :D

Anch'io da tempo ormai su linux compilo parecchio: di "serio" mi son fatto una build Openelec per arm, ma non so se possa servire come scuola.
miklos ha scritto:purtroppo spesso arrivano in italia con rom non proprio ottimizzate e/o non piu' aggiornate.. da qui il porting verso un qualcosa di attivamente sviluppato
Esatto, questo è il motivo.
Vabbe', ho capito che ti romperò le balls :lol:

ilmich
Master
Master
Messaggi: 1549
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 14.2 64bit
Kernel: 4.19.46
Desktop: dwm
Località: Roma

Re: Ottimizzare compilazione Android

Messaggio da ilmich »

rik70 ha scritto:Ho già fatto qualche esperimento sulle stock rom di 2 dispositivi: su un Huawey mi son tentato pure la modifica dell'ESR con editor esadecimale in modo da dare tutto lo spazio alle app e il resto su sd esterna.
Insomma roba da niubbo, ma tutto da slackware e sta cosa m'intriga assai.
Alla faccia della roba da niubbo :)
comunque credo che per noi slackwaristi questo tipo di cose ci venga un po' piu' naturale dato che siamo stati abituati nel tempo a pensarla in modo molto poco automatizzato perchè abbiamo dovuto spesso andare piu' o meno a zappare dentro file di sistema per poter far andare una determinata cosa.
Ti faccio un esempio... come tutti i sistemi linux (e android scoprirai non ne fa la minima eccezione) il kernel dopo essersi caricato lancia l'eseguibile init che a sua volta esegue i comandi che trova in un file chiamato init.rc (a seconda del device possono in seguito splittarsi in piu' file).
Se prendi l'immagine di boot del telefono stock, la esplodi nelle sue parti (kernel e immagine di ramdisk) e ti ci fai un giro ti rendi conto di come si avvia il tutto, del fatto che esiste un fstab, che c'e' un sistema di permessi che limita gli accessi a determinate directory etc etc etc
Su android alcuni componenti hardware sono gestiti come demoni (l'interfaccia verso il modem, gps, sensori) altri come librerie caricate (driver scheda grafica, touchpad) un po' come accade su un sistema desktop.
A parte il kernel che è sotto licenza gpl, il resto è piu' permissivo e difatti tutta l'infrastuttura che si occupa di gestire l'hardware è separata dalla componente software che può aime essere un binario chiuso e senza sorgenti. Le attività di porting più complicate consistono nell'individuare questi binari (alcuni si trovano configurati in un file chiamato build.prop, altri devono seguire una naming convention tipo audio.nome_del_soc.so, altre le scopri analizzando i file di avvio della rom stock etc etc etc) e riportarli nella nuova rom compilata confidando che se non si fa un porting troppo spinto funzionino ugualmente essendo linkati con lo stesso equivalente delle glibc in ambito android.

Infatti alcuni maker riescono a portare una rom buildata per un telefono semplicemente andando a includere i binari proprietari presi dalla rom stock (che funzionano ugualmente) e impostando i vari demoni (modem, gps etc etc) affinchè usino queste nuove librerie. Se spulci su google ne trovi un po' di guide fatte cosi.

A me sta cosa però mi pare abbastanza sporca e poco istruttiva :)

comunque le parole sono ancora a zero.. io per prendere dimestichezza con queste cose ho compilato e testato una cyanogenmod ufficiale (avendo a disposizione anche un telefono pienamente supportato) e sicuramente la sto facendo troppo semplice, però devo ammettere che pensavo fosse una cosa da esseri sovraumani per poi scoprire che sbattendoci un po' la testa (come ho fatto agli inizi con slackware) ce la si puo' fare :)

comunque il mio porting lo pubblicherò su github.. appena ho qualcosa di funzionante aggiornerò il post affinche ne possa usufruire chiunque ne fosse interessato :)
ho visto cose che voi astemi non potete immaginare
https://github.com/ilmich

ilmich
Master
Master
Messaggi: 1549
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 14.2 64bit
Kernel: 4.19.46
Desktop: dwm
Località: Roma

Re: Ottimizzare compilazione Android

Messaggio da ilmich »

Visto che sembra interessare a qualcuno piccoli aggiornamenti :) Sto compilando solo la recovery (senza quella non riuscirei ad installare la rom) perciò considerando che è tutto codice c/c++ ccache effettivamente si fa sentire e successive compilazioni si riducono ad 1/4 del tempo :shock:
Il repository l'ho pubblicato, non avendo ancora prodotto nulla di testato non è ancora definitivo, però all'interno di un source tree cyanogenmod (e con tanta probabilità qualsiasi android) si integra perfettamente

https://github.com/ilmich/android_device_cubot_x9
ho visto cose che voi astemi non potete immaginare
https://github.com/ilmich

rik70
Iper Master
Iper Master
Messaggi: 2174
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 64-current
Kernel: 5.6.x-ck1
Desktop: Xfce 4.14
Distribuzione: Arch Linux

Re: Ottimizzare compilazione Android

Messaggio da rik70 »

Vai tranquillo che - anche se sono indietro col "comprendonio" - io ti seguo 8)

Avatar utente
SIV
Linux 3.x
Linux 3.x
Messaggi: 921
Iscritto il: mer 25 apr 2007, 14:07

Re: Ottimizzare compilazione Android

Messaggio da SIV »

Ragazzi anche io vorrei iniziare a metter mano modificando ROM e quant'altro. Potreste darmi qualche lettura iniziale? Giusto per iniziare a capire come ma soprattutto in che direzione muovermi.

ilmich
Master
Master
Messaggi: 1549
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 14.2 64bit
Kernel: 4.19.46
Desktop: dwm
Località: Roma

Re: Ottimizzare compilazione Android

Messaggio da ilmich »

Ieri mi ci sono rimesso dopo un po' di tempo e sto facendo delle prove incrociate per cercare di capire l'ottimizzazione massima che posso raggiungere col mio vetusto portatile(comunque ho notato che alla fine dei conti i requisiti indicati da varie fonti per la compilazione sono un po' generosi.. io ci sono riuscito con un vecchio amd dual core con 4gb di ram).
comunque tornando in topic, ho provato a compilare aumentando la parallelizzazione e contrariamente a quanto ipotizzavo il tempo si è dimezzato (dalle 16 ore sono passato alle 7) :shock: . Ora vediamo come va con entrambe le ottimizzazioni (parallelizzazione + ccache).

Riguardo alle letture iniziali io non ho mai trovato una guida generica esaustiva, ma sempre piccoli tutorial.
Comunque le mie fonti sono
  • forum di sviluppatori qui trovi un sacco di informazioni suddivise anche per modello del telefono
  • wiki di cyanogenmod il wiki mi ha aiutato a capire come flashare le rom e in questo momento come creare un source tree per il porting
  • pagina ufficiale qui ho compreso un po' l'architettura e come funzionano i vari strati hardware
  • http://elinux.org/Android_Portal qui ci sono un po' di info varie.. la piu' interessante è sicuramente quella su come funziona il boot
come prima cosa ho provato a customizzare una rom stock e ho utilizzato questo comodissimo script bash https://github.com/JustArchi/ArchiKitchen che sostanzialmente ti consente di crearti una rom con i permessi di root attivati, rimuove un po' di software inutile.. ma non solo

il resto l'ho appreso strada facendo :)
ho visto cose che voi astemi non potete immaginare
https://github.com/ilmich

Avatar utente
SIV
Linux 3.x
Linux 3.x
Messaggi: 921
Iscritto il: mer 25 apr 2007, 14:07

Re: Ottimizzare compilazione Android

Messaggio da SIV »

Grazie mille :thumbright:

rik70
Iper Master
Iper Master
Messaggi: 2174
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 64-current
Kernel: 5.6.x-ck1
Desktop: Xfce 4.14
Distribuzione: Arch Linux

Re: Ottimizzare compilazione Android

Messaggio da rik70 »

Ok, mi riaggancio giusto per dire che è arrivato l'arduer ciainafon:

Immagine
Un classico.

Son già su con la recovery TWRP e ho backuppato la stock rom... ....eheh, già qui bisognerebbe aprire una parentesi: ho il "sospetto" che "questi" aggeggi escano con rom modificate, altro che stock rom :D
Ma non divaghiamo oltre.

Ora mi serve ram per la compilazione - un dual core ce l'ho.

Che dite: possiamo usare questo topic anche per fare domande che esulano dall'argomento principale?

ilmich
Master
Master
Messaggi: 1549
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 14.2 64bit
Kernel: 4.19.46
Desktop: dwm
Località: Roma

Re: Ottimizzare compilazione Android

Messaggio da ilmich »

rik70 ha scritto:Son già su con la recovery TWRP e ho backuppato la stock rom... ....eheh, già qui bisognerebbe aprire una parentesi: ho il "sospetto" che "questi" aggeggi escano con rom modificate, altro che stock rom :D
si si... i telefoni importati, come il mio almeno, passano dal rivenditore che ci mette una rom modificata per i mercati occidentali.
rik70 ha scritto:Che dite: possiamo usare questo topic anche per fare domande che esulano dall'argomento principale?
credo che forse sia meglio o cambiare il titolo, oppure creare un topic ad-hoc.
In realtà l'argomento esula un po' da slackware, pero' se non ci sono controindicazioni da parte di nessuno :)

comunque riguardo l'argomento del topic, ho fatto l'ultima prova attivando ccache e il tempo (dopo la prima compilazione full da 7 ore) è sceso a 4 ore. PUrtroppo credo che di piu' non riesca ad ottenere visto che adesso il tempo maggiore lo impiega a compilare codice java. C'e' pure da dire che, una volta ottenute le immagini, la compilazione per delta è molto piu' veloce.

Io sono riuscito a creare la mia prima cyanogenmod che va in bootloop hahahahahahahahah. Ho ricominciato da capo il mio port perchè volevo farmi del male e imparare il piu' possibile :)

p.s: @rik70 mi sa che abbiamo lo stesso soc :)

EDIT: ma la twrp te la sei compilata in autonomia?!oppure hai fatto il port seguendo una delle tante guide in giro?!
ho visto cose che voi astemi non potete immaginare
https://github.com/ilmich

rik70
Iper Master
Iper Master
Messaggi: 2174
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 64-current
Kernel: 5.6.x-ck1
Desktop: Xfce 4.14
Distribuzione: Arch Linux

Re: Ottimizzare compilazione Android

Messaggio da rik70 »

miklos ha scritto:p.s: @rik70 mi sa che abbiamo lo stesso soc :)
Si è lo stesso, il che mi sa che rende la faccenda ancora più interessante :)
Qui però ho anche il 4G come rete mobile.
miklos ha scritto:comunque riguardo l'argomento del topic, ho fatto l'ultima prova attivando ccache e il tempo (dopo la prima compilazione full da 7 ore) è sceso a 4 ore
Buono. Quanti job stai passando al make?
miklos ha scritto:ma la twrp te la sei compilata in autonomia?!oppure hai fatto il port seguendo una delle tante guide in giro?!
No, ne ho preso una data come funzionante e ho fatto qualche modifica - tipo fuso orario e sciocchezze simili. Al momento son riuscito a compilarmi i tool che mi servono, tipo mkbootimg, make_ext4fs, simg2img, etc. Ma ci voglio tornare sulla recovery, anche perché è da li che si passa. Me ne serviva una urgentemente per il dump dell'intera rom, così se faccio danni almeno mi rimane una possibilità.

Per la faccenda topic, la parola spetta a te che l'hai aperto e ai mod 8)

ilmich
Master
Master
Messaggi: 1549
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 14.2 64bit
Kernel: 4.19.46
Desktop: dwm
Località: Roma

Re: Ottimizzare compilazione Android

Messaggio da ilmich »

rik70 ha scritto:Qui però ho anche il 4G come rete mobile.
dovrebbe essere indifferente, nel senso che il modem viene gestito da dei binari che, durante il porting, vengono presi direttamente dal telefono.
rik70 ha scritto:Buono. Quanti job stai passando al make?
si si.. per me è perfetto.. in queste 4 ore mi dedico alla vita 'reale' :lol: comunque ho passato un bel -j4 al make
rik70 ha scritto:Al momento son riuscito a compilarmi i tool che mi servono, tipo mkbootimg,
verifica un po', perchè su la maggior parte dei mediatek le immagini di boot sono diverse dallo standard e per lo spacchettamento e impacchettamento devi utilizzare questi tool (leggevo pure che per i soc mediatek piu' recenti questo non è piu' vero, perciò dipende dal caso)
Ovviamente se per crearti la recovery hai utilizzado i tool automatici per windows che si trovano in giro non te ne sei dovuto preoccupare.

Adesso apro un topic nuovo, eventualmente se i moderatori lo trovano non appropriato lo capirei :)
ho visto cose che voi astemi non potete immaginare
https://github.com/ilmich

rik70
Iper Master
Iper Master
Messaggi: 2174
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 64-current
Kernel: 5.6.x-ck1
Desktop: Xfce 4.14
Distribuzione: Arch Linux

Re: Ottimizzare compilazione Android

Messaggio da rik70 »

miklos ha scritto:verifica un po', perchè su la maggior parte dei mediatek le immagini di boot sono diverse dallo standard e per lo spacchettamento e impacchettamento devi utilizzare questi tool (leggevo pure che per i soc mediatek piu' recenti questo non è piu' vero, perciò dipende dal caso)
Sì sì, uso anch'io quelli. Purtroppo il tizio rilascia il binario linux mkbootimg solo per 64-bit, ma non i sorgenti.
Ma gli script perl funzionano col binario che mi sono compilato io: scompattano e ricompattano alla perfezione.

Windows - e mi son dovuto modificare pure i driver ADB :lol: - l'ho usato solo per il readback della rom con MTKDroidTools +SpFlash e per flashare la recovery TWRP.

Ok, vada per il nuovo topic, confidando nell'animo buono dei mod.

Rispondi