COME CREARE E COMPILARE UN CUSTOM KERNEL
Questa parte proveremo a dedicarla alla compilazione di un immagine kernel (ovviamente compatibile con Note II).
PREMESSE
Doverosa premessa: non è una guida ovviamente su come diventare esperti sviluppatori, primo perchè chi scrive non è assolutamente all'altezza di farlo e secondo perchè la strada è lunga e tortuosa. Sviluppare è in realtà un termine improprio quando si parla di kernel (e restringere il campo al solo ecosistema android è errato e limitante): chi lavora sui sorgenti deve avere delle nozioni anche basilari di programmazione principalmente sul linguaggio C e C++, non esistono in giro molti "how to" e le guide che si trovano in rete sono spesso molto generiche e non mirate ad un device specifico, soprattutto perchè Linux non è solo Android, ma molto molto di più.
Nel corso della discussione verranno tuttavia trattati alcuni aspetti legati alla personalizzazione e alla modifica del codice sorgente (purtroppo questo passaggio è necessario, dato che i sorgenti così come forniti da Samsung sono afflitti da alcuni errori di gravità assolutamente non trascurabile: exynos exploit e Sudden death syndrome su tutti) nonchè aspetti legati alle tecniche di patching (modifica al volo del codice sorgente mediante file diff o patch) o aspetti legati alla creazione di programmi (bash shell script) per eseguire operazioni semplici o complesse sia durante le fasi di boot dell'immagine compilata che durante la compilazione stessa, fino ad arrivare alla compilazione completa e al flash del kernel.
REQUISITI HARDWARE E SOFTWARE
Ecco quello che uso io:
- Una macchina con una distribuzione Linux, nel mio caso sappiate che sto operando con un laptop vecchio di 4 anni: Sistema operativo Ubuntu 12.04 LTS, sistema a 64bit, 2 gigabyte di ram e processore dualcore a 2 ghz di frequenza massima.
Con questa configurazione che è decisamente SCADENTE riesco a compilare senza problemi lo zImage e relativi moduli in circa 20 minuti.
Considerateli come requisiti hardware minimi.
Dal punto di vista software va benissimo anche un'installazione Ubuntu su una partizione secondaria (tipico esempio: Wubi, cercate su google. E' il modo più semplice per avere una partizione in dual boot con Ubuntu, fra l'altro la distribuzione è completa di tutti i requisiti necessari alla compilazione tranne per quel che riguarda qualche libreria che vedremo in seguito come installare).
Evitate come la peste le macchine virtuali, a meno che non abbiate una bestia come PC.
NOTA: molti di voi si staranno chiedendo se è possibile compilare un kernel con windows direttamente, senza passare per virtual box o Ubuntu. La risposta è ambigua: esistono dei compilatori incrociati che sono assemblati per funzionare con windows (e ovviamente cygwin) ma sono sperimentali e molto ma molto meno efficienti del corrispettivo Linux. E dato che non sono molto diffusi tra i developers, non godono nemmeno di adeguato supporto. In altre parole è preferibile puntare su Linux piuttosto che addentrarsi in percorsi poco battuti senza poter contare sull'aiuto di nessuno, perdereste molto più tempo.
1- UTILIZZO DEL TERMINALE
Una delle applicazioni più utilizzate in ambiente Linux è il terminale, che torna utile se non indispensabile per effettuare i vari passaggi necessari alla compilazione di un kernel.
Dovrete farci l'abitudine semplicemente perchè i comandi Unix e GNU non sono disponibili attraverso una GUI, ma sono richiamabili solo da terminale attraverso una semplice stringa di comando.
Una volta presa confidenza con il terminale vi garantisco che non tornerete più indietro.
Per avviare una sessione terminale basta usare la combinazione di tasti
codice:
CTRL(sx) + ALT + T
2- COMPLETAMENTO DELLA CONFIGURAZIONE DI LINUX
Il primo passo da fare è configurare Linux installando alcune librerie aggiuntive, come detto in precedenza.
Avviamo una sessione terminale e digitiamo il comando:
codice:
sudo apt-get install libncurses5-dev
Il comando prevede un azione super user "sudo" (su linux dovremo autenticarci ogni volta dovremo installare o rimuovere pacchetti, librerie o programmi) e vi verrà richiesta la vostra password (l'avrete creata alla prima installazione di Linux/Ubuntu) per l'installazione delle librerie.
3- STRUTTURA DELLA CARTELLA DI LAVORO
Per rendere il vostro lavoro semplice vi consiglio di impostare correttamente la vostra postazione di lavoro, utilizzando uno schema molto semplice.
Potrete utilizzare qualunque percorso vi aggradi ma dovrete poi ricordarvi tutti i percorsi senza difficoltà per rendere il flusso di lavoro fluente e senza intoppi, quindi se possibile utilizzate per le cartelle solo nomi semplici e senza spazi o caratteri speciali.
Cominciamo con l'avviare una sessione terminale.
Noterete che sarete indirizzati al percorso di default che è
codice:
nome_utente@ubuntu:~$
In altre parole...la vostra Home.
E cominceremo da qui: creeremo una cartella direttamente nella nostra home che chiameremo ad esempio "android" tanto per semplificarci la vita.
Digitiamo il seguente comando
Adesso spostiamoci all'interno della nuova cartella sempre usando il terminale, con il comando:
Una volta dentro creiamo delle sottocartelle con il comando utilizzato in precedenza
Questo creerà una cartella chiamata "source" all'interno della quale metteremo i sorgenti del kernel, una volta scaricati.
NOTA: Non perdo tempo dicendo che una volta preso confidenza con i comandi terminale potrete procedre ancora più speditamente. Un esempio? Avremmo potuto creare la cartella "source" senza per forza spostarci prima in "android".
codice:
mkdir /home/nome_utente/android/source
Questo comando avrebbe creato la cartella "source" direttamente e da qualunque percorso vi sareste trovati in quell'istante e soprattutto all'esatto percorso indicato dal comando.
4- PROCURARSI UNA TOOLCHAIN ADATTA ALLO SCOPO
Con il termine toolchain si indica letteralmente "catena di attrezzi" o semplicemente compilatore incrociato. E' in parole povere un insieme di programmi (eseguibili) compilati a loro volta e che servono a compilare correttamente un'immagine partendo da codice sorgente e librerie codificate.
Per compilare un immagine che si suppone debba girare su un device android dovremo utilizzare una toolchain dedicata all'architettura del terminale di destinazione, quindi dobbiamo stare attenti a quale compilatore utilizziamo.
Io utilizzo attualmente una toolchain Linaro 4.6.3, la trovate QUI
Scaricatela e copiate l'archivio nella cartella "android" che abbiamo creato in precedenza. Per farlo potrete utilizzare il nautilus, il file explorer di default di Ubuntu.
Scompattate l'archivio e settate i permessi della cartella ottenuta, che dovrebbe chiamarsi "android-toolchain-eabi" come da screen shot allegato: (tasto destro destro del mouse e proprietà, tab permessi)
Assicuratevi che ci sia la spunta nella casella "Allow executing files as programs" e applicate la proprietà a tutti i sotto percorsi.
Il passo successivo è la configurazione della toolchain: dovrete aggiungere una variabile di sistema indicante il percorso della vostra toolchain ad un file a cui accede Linux in particolari occasioni.
Da terminale digitate il comando:
Il comando non fa altro che dire a Linux di aprire un file chiamato ".bashrc" situato al percorso "~/" che è la root di Linux, utilizzando il programma gedit, un semplice editor di testo paragonabile a Notepad++.
Rechiamoci alla fine del file in oggetto ed aggiungiamo la stringa
codice:
PATH=$PATH:~/android/android-toolchain-eabi/bin
NOTA: il percorso parla da solo. Il cuore di tutta l'operazione è situata dentro alla cartella "bin" a sua volta dentro la cartella "android-toolchain-eabi" ottenuta dalla scompattazione della toolchain scaricata in precedenza, a sua volta contenuta nella cartella da noi creata "android".
Chiaro, no? 
Salviamo e chiudiamo Gedit.
5a- IL CODICE SORGENTE
A questo punto possiamo scaricare il codice sorgente. Potreste utilizzare come sorgente un codice di un custom kernel esistente come quella cagata dello SpeedWizz kernel, ma vi toglierei il piacere di fare delle modifiche "originali" ad un sorgente stock, quindi procureremo il codice direttamente da Samsung, ci divertiremo di più 
Li trovate QUI
Assicuratevi di scaricare quelli corretti per la versione internazionale - il file corretto è "GT-N7100_JB_Opensource_Update2.zip"
Una volta scaricato il file scompattatelo fino ad ottenere quello che vedete nello screen
Scompattate adesso l'archivio kernel.tar.gz fino ad ottenere una cartella "kernel" come da immagine sotto
Adesso non dovrete fare altro che copiare il contenuto della cartella "kernel" dentro cartella "source" creata in precedenza. E' consigliabile come al solito settare i permessi per rendere eseguibili i files contenuti all'interno delle sottocartelle utilizzando il metodo visto in precedenza.
Dovreste ottenere qualcosa di simile allo screen sotto
[CENTER]
....Continua al post successivo....