Da un'idea di N1m0y e dalla mia traduzione, ecco una guida su come buildare un kernel dai sorgenti.
Tutti i crediti vanno all'autore su XDA.
Prefazione
Usate questa guida per diffondere la conoscenza e per darvi alcuni termini chiave e per accendere qualche lampadina ed ingranare qualche marcia.
Nota: questa non è una guida per newbie su Linux. Prima che postiate questa domanda, dateci un'occhiata. Se involvesse una sintassi di comandi che non conoscete, fate la vostra ricerca da qualche altra parte prima di continuare con questa guida.
Step 1. Ambiente
A. Installate Ubuntu 12.04 (ultima versione 13.10) (nessun aiuto qui, se non sapete farlo, non dovreste avere a che fare coi kernel). Nota di Dionysus: è davvero semplicissimo e nella sezione Android x86 ho fatto una guida che si può applicare a qualsiasi distro Linux Debian based ed anche qualche altra (Fedora, OpenSuse etc etc).
B. Pacchetti richiesti: git-core, gnupg, flex, bison, gperf, libsdl-dev, libesd0-dev, libwxgtk2.8-dev, build-essential, zip, curl, libncurses5-dev, zlib1g-dev, lib32z1, lib32ncurses5, lib32bz2-1.0, lib32z1-dev, lib32ncurses5-dev, gcc-multilib, g++-multilib, e Adb.
Quindi per installare le dipendenze richieste, da terminale digitiamo:
e per installare adb, potete installarlo via terminale:codice:sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.8-dev build-essential zip curl libncurses5-dev zlib1g-dev lib32z1 lib32ncurses5 lib32bz2-1.0 lib32z1-dev lib32ncurses5-dev gcc-multilib g++-multilib
NB. il forum storpia il codice ed inserisce una "k" ed una chiocciola "@" di troppo, per cui sarebbe android, trattino, tools, trattino e alla fine adb.codice:sudo apt-get install android-tools-adb
o potete trovarlo nella cartella dove avete estratto SDK, a sua volta dentro la cartella platform-tools.
Installate anche git:
C. Aprite un terminale (ctrl+alt+t su Ubuntu)codice:sudo apt-get install git
D. Digitate "mkdir android" (crea la cartella android) (non inserite le virgolette)
E. Digitate "cd android" (entra dentro la cartella android)
G. Digitate "mkdir kernel" (crea la cartella kernel)
F. Chiudete il terminale.
Step 2. Vostri sorgenti
A. Aprite il terminale
B. Digitate "cd android/kernel" (entra dentro la cartella kernel situata dentro la cartella android)
C. Digitate "git clone git://github.com/DooMLoRD/android_prebuilt_toolchains.git toolchains" (recupera attraverso il comando git clone, il toolchains e lo piazza dentro la cartalla toolchains)
D. Adesso arriva la parte difficile, vi serve alcuni tipi di sorgenti per il vostro kernel. Controllate i due seguenti siti per il vostro dispositivo. Una volta che li avete scaricati, devono essere estratti o clonati dentro una cartella nella tua directory del kernel
Welcome to HTCdev
Samsung Open Source Release Center
Developer World
OpenSource Code Distribution
Cos'è un toolchain? Date un'occhiata qui. Questi toolchains sono instabili e non totalmente supportati ancora. Queste sono le versioni che uso e se volete usare una versione stabile (4.5.3 as of 07/06/12) trovate il link su google.
Step 3. Modifiche
Questa è la parte che incuriosisce la gente, loro vorrebbero sapere come fare modifiche al kernel e renderlo speciale. Comincia tutto questo che viene dalla root directory (~/android/kernel) del sorgente del kernel.
Mod 1. Applicare una patch
A. Scarica la patch che vuoi applicare, in questo caso questa dovrebbe funzionare.
B. Salvate il file come "kernelPatch" nella vostra directory del kernel
C. Aprite un terminale
D. Spostate dentro la root del vostro kernel la directory del kernel che volete patchare
E. Digitate "patch -p1 < ../kernelPatch"
Spiegazione:
A. Semplice, ci serve una patch. La patch in se stessa è semplice e differisce dall'originale albero (tree) del codice del kernel.
Posterà un veloce tutoria su come creare una patch nel terzo post. La patch sopra contiene diversi governor da aggiungere al vostro kernel.
B. Si spiega da sé.
C. Si spiega da sé.
D. Si spiega da sé.
E. In pratica lanciamo il comando della patch sulla nostra sorgente usando la patch che abbiamo scaricato prima. La porzione della patch è il binario, l'opzione "-p1" ci consente di controllare il numero di successivi slash (/) da rimuovere dal percorso del file (vi servirà di guardare quest'opzione più che usare una strana struttura di directory o di applicare le patch da un posto a casaccio) L'operatore "<" dirige il contenuto del nostro file "../kernelPatch" nel comando.
Mod 2. Aggoiungere un singolo governor
A. Aprite "drivers/cpufreq/Kconfig"
B. Aggiungete le seguenti stringe in uno spazio appropriato tra gli altri governorAdd the following lines in appropriate spot amongst the other govenor's
codice:config CPU_FREQ_DEFAULT_GOV_SMARTASS bool "smartass" select CPU_FREQ_GOV_SMARTASS select CPU_FREQ_GOV_PERFORMANCE help Use the CPUFreq governor 'smartass' as default.C. Aprite "drivers/cpufreq/Makefile"codice:config CPU_FREQ_GOV_SMARTASS tristate "'smartass' cpufreq governor" depends on CPU_FREQ help smartass' - a "smart" optimized governor! If in doubt, say N.
D. Aggiungete le seguenti stringhe in uno spazio appropriato.
E. Create a file chiamato "drivers/cpufreq/cpufreq_smartass.c" (l'ha spiegato un po' a cazzo di cane, il file è cpufreq_smartass.c dentro la direcotry drivers/cpufreq).codice:obj-$(CONFIG_CPU_FREQ_GOV_SMARTASS) += cpufreq_smartass.o
F. Inserite il sequente codice in quel file
[C] Smartass Kernel Govenor - Pastebin.com
G. Aprite "include/linux/cpufreq.h"
H. Sotto la sezione "Cpufreq Default" aggiugnete
Ok, c'è un governor aggiunto, fate gli stessi identici step per qualunque altro governor che vogliate aggiungere.codice:#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_SMARTASS) extern struct cpufreq_governor cpufreq_gov_smartass; #define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_smartass)
Spiegazione:
A. Aprite un file che avete già. Il Kconfig file ci lega dentro il nostro comando "make menuconfig" più tardi, facendo sì che la nostra mod sia un'opzione selezionabile.
B. Aggiungete il codice appropriato per il nostro governor per avere il nostro file .config. Il primo trancio ci permette di settare il nostro governor come default per il nostro kernel, l'altro ci permette di rimuoverlo o aggiungerlo alla build come vogliamo.
E-F. La creazione del governor stesso, non saltate questo passo. Suggerisco di leggere attrraverso questo codice per capire come funziona, è qualcosa di strepitoso.
G-H. Apre un file e aggiunge il codice necessario per legare il nostro modulo al resto del sorgente. Senza questo non saremo capaci di compilare il dovuto resto del sorgente senza conoscere se il modulo esiste.
Step 4. Ottenere un file config
Opzione A. Prendere un config file da un kernel.
A. Agganciare un device che sta usando un kernel simile al tuo e usarlo come base.
B. Aprite un terminale.
C. Andate nella vostra directory root del kernel.
D. Digitate "adb pull /proc/config.gz"
E. Digitate "gunzip config.gz"
F. Digitate "mv config arch/arm/configs/<your_config_name>_defconfig"
Spiegazione:
A. Questo vi permetterà di prendere un file di configurazione da un kernel che sapete funzionare. È molto più facile iniziare così. Come nota, non tutti i kernel supportano quest'opzione, così devi provarne diversi prima di avere il file funzionante. Se non funziona, guarda l'opzione B.
B. Hehe, ormai sei bravo a farlo.
C. Naviga verso la parte più alta della directory del tuo kernel.
D. Usa adb per prendere una copia del file config per i tuoi sorgenti.
E. Unzippa il file di configurazione.
F. Sposta il file di configurazione che hai preso verso la directory di configo così possiamo usarlo come referenza più tardi.
Opzione B. Usare il config del produttore.
Sfortunatamente, come detto sopra, non tutti i kernel supportano il metodo "/proc/config.gz". Puoi trovare un file di configurazione tipicamente nel percorso di configurazione del produttore "arch/arm/configs". Credo che quello per il mio HTC Flyer è chiamato "flyer_hc_defconfig", così dovrebbe essere (almeno simile) per te Inoltre leggi i readme per farti un'idea di come modificarli. Io farei una copia di esso chiamata "<your_config_name>_defconfig" e usarla come mia base.