COMPILAZIONE KERNEL DA SORGENTI AOSP(GOOGLE):
- By Anto999 & Crotan -
COSA SERVE:
-Ubuntu OS(per i kernel il migliore è 12.04 LTS)
-Un pc con almeno 2GB di RAM
-Almeno 20 GB di harddisk libero
-Scaricamento Jdk:
	codice:
	sudo apt-get install openjdk-6-jdk
 -Scaricare le librerie compilazione:
	codice:
	$ sudo apt-get update
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 git
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
 -Sarebbe necessario un riavvio adesso per far funzionare al meglio l'ambiente....
-Creazione cartelle/scaricamento sorgenti google dove posizionare il tutto:
	codice:
	-Aprite il terminale
-mkdir android
- mkdir toolchains
- cd toolchains
- mkdir linaro
- cd ..
- cd ..
- cd android
- git clone https://android.googlesource.com/kernel/omap.git -b android-omap-tuna-3.0-jb-mr1.1 maguro
 -Scaricamento toolchain
	codice:
	-Scaricate questo:
https://releases.linaro.org/13.03/components/android/toolchain/4.7/android-toolchain-eabi-linaro-4.7-2013.03-2-2013-03-17_20-47-57-linux-x86.tar.bz2
-aprite il file ed estraete tutti i file nella cartella linaro creata prima
-entrate nella cartella android/maguro ed aprite il makefile,trovate la stringa CROSS_COMPILE=
Nel mio caso è:
CROSS_COMPILE= /home/antonio/android/toolchains/linaro/bin/arm-eabi-
se avete seguito me vi basterà cambiare antonio nel nome del vostro pc dato ad ubuntu
 Adesso è d'obbligo prima della compilazione riavviare il PC...
All'accensione...
-Se volete fare alcune modifiche al kernel cercate su github,poi proseguite con il prossimo step...
Compilazione:
	codice:
	$ cd android
$ cd maguro
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE= /home/antonio/android/toolchains/linaro/bin/arm-eabi-
$ make tuna_defconfig
$ make -j#(numero core del vostro PC+1)
 Per ripacchettare il kernel usate questa guida:
-Scaricate questo zip: Kernel tools.zip
-prendete la cartella Androkernel e la copiate nella cartella /out del kernel
-prendete il file buildbootimg.sh e copiatelo nella directory principale del kernel
-prendete la cartella mkboot e la estraete nello stesso posto del file buildbootimg.sh
- dopo la compilazione eseguite il file buildbootimg.sh e troverete alla fine il kernel gia zippato in Out/Androkernel/androkernel.zip
Per l'overclock:
/samsung/arch/arm/mach-s5pv210/cpu-freq.c
Per cambiare il nome del kernel,basta andare in:
/android/maguro/arch/arm/configs/tuna_defconfig
all'interno del file cercate:
CONFIG_LOCALVERSION='e qui lo modificate a vostro piacere'
"ovviamente non esagerate con le parole"
Per aggiungere governor:
A. Aprite "drivers/cpufreq/Kconfig"
B.Aggiungere le seguenti righe nel punto appropriato, tra gli altri governor
	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.
 
	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.
 C.Aprite "drivers/cpufreq/Makefile"
D.Aggiungere la seguente riga nel punto appropriato.
	codice:
	obj-$(CONFIG_CPU_FREQ_GOV_SMARTASS)     += cpufreq_smartass.o
 E. creare un file chiamato "drivers / cpufreq / cpufreq_smartass.c" 
F. Inserire il codice seguente del file.
[C] Smartass Kernel Govenor - Pastebin.com
G. Aprite "include / linux / cpufreq.h"
H. Nella sezione "Default Cpufreq" aggiungete
	codice:
	#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_SMARTASS)extern struct cpufreq_governor cpufreq_gov_smartass;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_smartass)
 adesso il governor è aggiunto...
potete trovare altri governor nel mio github:
https://github.com/antonio8297/Governor-suorce
oppure in quello di qualche altro kernel developer.
Aggiungere gli Scheduler
Gli Scheduler sono situati in  kernel_source/block. Seguire le seguenti istruzioni per implementarli nel nostro Kernel:
1) Prendere lo Scheduler ed incollarlo in /block 
2) Aprire il file Kconfig.iosched e aggiungere la scelta del Kconfig. Esempio per lo Scheduler SIO:
	codice:
	 
config IOSCHED_SIO
tristate "Simple I/O scheduler"
default y
---help---
The Simple I/O scheduler is an extremely simple scheduler,
based on noop and deadline, that relies on deadlines to
ensure fairness. The algorithm does not do any sorting but
basic merging, trying to keep a minimum overhead. It is aimed
mainly for aleatory access devices (eg: flash devices).
 3) Impostare la scelta di Default:
	codice:
	 default "sio" if DEFAULT_SIO
 4) Salvate il file e spostatevi al Makefile, situato sempre in /block. Qui basterà semplicemente aggiungere questa riga di codice ( per il SIO ):
	codice:
	obj-$(CONFIG_IOSCHED_SIO)    += sio-iosched.o
 Salvare nuovamente. FINISH. Sceduler aggiunto 
Costruire un modulo
Esistono due metodiche:
A. Digitare make modules
B. Digitare make path/to/your/module.ko
Parte D. (Usateli solo per la costruzione di moduli del kernel.)
A. Questo ricostruisce tutti i moduli
B. Ricostruirà solo il modulo richiesto. Molto utile quando si ha bisogno di ricostruire un modulo WiFi.