Come buildare il proprio kernel
Parte 2/2
Step 5. Building
È tempo di partire col vero atto del building.
Part A. Step prebuild.
A. Apri un terminale e vai nella root del tuo kernel
B. Digitate "export ARCH=arm"
C. Digitate "export CROSS_COMPILE=~/android/kernel/toolchains/arm-eabi-linaro-4.6.2/bin/arm-eabi-"
Part B. La prima build.
A. Digitate "make <your_config_name>_defconfig"
B. Digitate "make menuconfig" e fate i cambiamenti richiesti per usare qualsiasi modulo avete aggiunto.
C. Digitate "make -j<maximum number of jobs>" (I jobs sono le operazioni per volta che la macchina esegue. Solitamente si fa [numero di core del pc] x2, ma tanti tengono la tesi di [numero di core del pc]+1. Io personalmente quando buildo faccio make -j8 ossia 4 core x2.)
Part C. Re-Builds
A. Digitate "make clean"
B. Digitate "make oldconfig"
C. Digitate "make -j<maximum number of jobs>"
Part D. Building i moduli
Avete due opzioni:
A. Digitate "make modules"
B. Digitate "make path/to/your/module.ko"
Spiegazione:
Parte A. (Questi step sono richiesti ogni volta che chiudi il terminale e lo riapri)
A. Ok, non lo spiego più.
B. Questo comando setta il tuo obbiettivo dell'architettura (arm, x86, powerpc etc)
C. Definisce il percorso per il toolchain che stiamo per usare per compilare il kernel. Puoi cambiarlo indicando il percorso di qualunque toolchain hai scaricato o ti senti di usare. Il modo in cui è configurato è per usare il toolchain Linaro usato sopra.
Parte B. (Questi devono essere eseguire la prima volta che buildi il kernel)
A. Carica il tuo file di configurazione da prima.
B. Apri un meno per configurare il kernel. Userà il file di config caricato nel precedenti step come basi.
C. L'inizio del build. Tipicamente permetto un job per core, così sulla mia macchina quad core metto "make -j4". Aumentare il numero non renderà la build più velocemente, il tuo processore deve essere in grado di supportare i jobs che gli stai assegnando.
Parte C. (usate i comandi quando build qualsiasi volta che non sia la prima)
A. Questo comando soddisfa ogni vecchio binario o modulo che avete compilato prima e iniziamolo daccapo. Mi piace eseguirlo ogni build, a meno che i miei cambiamenti piccoli e localizzati.
B. Un meraviglioso comando: analizza quello che ha cambiato e ti conduce verso le nuove opzioni.
C. Vedi la spiegazione per la parte C sopra.
Parte D.(usa questi per buildare i moduli del kernel
A. Quest ribuilderà tutti i moduli.
B. Rebuilderà solo il modulo che ti serve. Utilissimo quando dovrai rebuildare il modulo wifi.
Step 6. Ed ora?
Ok, abbiamo cominciato a buildare ed aspettiamo che finisca. Quali sono i possibili risultati?
Risultato A. La build riesce
Grande! Hai buildato il tuo primo kernel dai sorgenti! Ci sono un paio di cose che ti serviranno per usare questo kernel nel tuo device: qualsiasi modulo ".ko" (kernel object) e i binary zImage. Se presti attentione all'output del compilatore, vedrai la locazione di questi oggetti. Comunque i seguenti comandi ti renderanno la vita un pelo più semplice:
A. Aprite un terminal
B. Andate nella root directory del kernel
C. Digitate "mkdir ../<tuo_kernel>_output"
D. Digitate "cp arch/arm/boot/zImage ../<tuo_kernel>_output/zImage"
E. Digitate "find . -name "*.ko" -exec cp {} ../<your_kernel>_output \;"
Spiegazione:
A-C. Si spiegano da sé
D. Spostate i binari del nostro kernel nella cartella di output
E. Questo tocco di magia trova tutti i moduli .ko e li copia nel file di output.
Vi servirà inoltre di assemblare l'immagine del kernel contenente gli iniramfs per il vostro device, assieme ai binari del kernel. Quello comunque è oltre lo scopo di questa guida. Per iniziare, provate a cercare le sequenti frasi.
codice:
building android kernel image
xda build kernel image
xda unpack boot.img
Risultato B. La build fallisce
Oh, è fallita. Beh, sai cosa, succederà un sacco di volte. Googla e sperimenta diverse soluzioni. I seguenti consigli cercheranno di aiutarti nel debug.
Esegui una build pulita.
A. Backuppa il tuo file di config (digitate "cp .config ../backupConfig")
B. Ri-eseguite il processo di build usando il vostro defconfig dall'inizio.
Limitate l'output
A. Un altro buon consiglio è quello di eseguire "make -j1" per capire dove sta l'errore, così il testo di output nel terminale sarà più lento e potrete scovarlo.
Potete comunque postare nel thread di SOS development per provare a risolvere insieme agli altri utenti.
Il bello è comunque provare e riprovare! Non vi aspettate nella maniera più assoluta di riuscire al primo colpo, ricordate quello che ho scritto all'inizio di questa maxiguida, gli errori del terminale saranno i vostri compagni più fedeli, saranno sempre lì, per aiutarvi a crescere, fateli vostri amici!