— Aggiornata al 10/04/2012 – Kernel Patch per problema Wifi Atheros incluso
 Ho aggiornato il link del sorgente del kernel perchè punti ad una versione opportunamente modificata, buon divertimento.

La presente è una piccola guida per la compilazione e ottimizzazione del kernel su Ubuntu a 64 bit e derivate. L’ottimizzazione si limita solo alle selezione della tipologia del processore all’interno dei files di configurazione, ulteriori ottimizzazioni possono essere eseguite all’interno di tali files in relazione alla propria configurazione Hardware.

Il risultato del lavoro svolto è un kernel compatibile con tutti i processori Intel appartenenti alla famiglia Core2, Corei3, i5, i7 ecc.
Questa guida non è adatta alla compilazione del kernel su macchine dotate di Cpu Amd, presto ne posterò una dedicata a questi processori.
L’ottimizzazione garantisce una migliore velocità nell’esecuzione dei compiti che assorbono molte risorse del processore, Es. codifica/decodifica video, compressione/decompressione files ecc.
Se utilizziamo il nostro pc solo per navigare in rete e scrivere qualche riga di testo non noteremo grandi differenze.

Prima di iniziare con il lavoro vero proprio ringrazio quanti in rete pubblicando ogni giorno le loro esperienze migliorano le nostre competenze e accrescono la nostra cultura. Un particolare ringraziamento va a Sankaran Raman dal cui lavoro ho attinto a piene mani.

Avviate il “Terminale” e digitate al prompt, nell’ordine così come vi appaiono, i comandi che via via troverete nel corso della lettura. Ogni comando è preceduto da una rapida spiegazione.
– Installazione librerie, compilatori e tutto il necessario. Ad ogni comando date “Invio”, inserite la vostra password e attendete che il sistema faccia il resto.
sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge libncurses5 binutils-dev libelf-dev libdw-dev libnewt-dev libncurses5-dev
sudo apt-get –no-install-recommends install asciidoc xmlto
sudo apt-get build-dep linux
– Creazione cartella contenente il sorgente del kernel e le patch all’interno della nostra Home (al termine di tutte le operazioni essa conterrà anche il nostro kernel bello e compilato in singoli pacchetti).

mkdir ~/Kernel_3.3.1
cd ~/Kernel_3.3.1
– Download del kernel e delle patch

wget -c http://dl.dropbox.com/u/56720744/linux-3.3.1.tar.bz2
Attendete il termine del download prima i dare il comando successivo (per ogni singolo comando).
wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.1-precise/0001-base-packaging.patch
wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.1-precise/0002-debian-changelog.patch
wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.1-precise/0003-default-configs.patch
– Scompattazione Kernel, creazione collegamento simbolico, accesso alla cartella.

tar xjvf linux-3.3.1.tar.bz2
ln -s linux-3.3.1 linux
cd linux
– Applicazione Patch al Kernel

patch -p1 < ../0001-base-packaging.patch
patch -p1 < ../0002-debian-changelog.patch
patch -p1 < ../0003-default-configs.patch
– Assegnazione diritti accesso ed esecuzione ai vari scripts
chmod -Rv +x debian/rules
chmod -Rv +x debian/scripts/
– Creazione nuovo profilo di compilazione per Corei7
cp debian.master/config/amd64/config.flavour.generic debian.master/config/amd64/config.flavour.i7
– Pulizia ed aggiornamento dei file di configurazione
fakeroot debian/rules clean
fakeroot debian/rules updateconfigs
– Modifica del file di configurazione per adattare il Kernel alle nostre richieste: è un passaggio fondamentale da eseguire con estrema attenzione. All’esecuzione del comando il terminale farà apparire una serie di domande, SOLO ALLA SECONDA RICHIESTA DOVETE RISPONDERE AFFERMATIVAMENTE.

fakeroot debian/rules editconfigs

    Rispondete “n” alla prima domanda, “Y” alla seconda.
    Ora siete entrati nella configurazione del kernel procedete in questo modo (per selezionare intendo muoversi su e giù con le frecce del cursore e poi dare invio):

    1 – Selezionare “Processor type and features”

    2 – Selezionare “Processor family (Generic-x86-64)” 

    3 – Selezionare “Core 2/newer Xeon

    4 – Scorrete tutte le voci in basso fino a trovare “Preemption Model …”
    (Questa voce determina come la vostra cpu si “dedicherà” alla gestione dei vari compiti/programmi in esecuzione nel vostro sistema unitamente alla voce “Timer frequency…”. E’ possibile privilegiare una più rapida risposta del sistema a scapito però dei tempi di esecuzione reali dei vari processi. Consiglio vivamente di lasciare “Desktop”).

    5 – Scorrete tutte le voci in basso fino a trovare “Timer frequency …”
    (Ora se avete un fisso potete selezionare la voce 1000hz, un portatile non superate soglia 300hz. In rete ho trovato infinite differenti spiegazioni e consigli sull’uso di tale parametro, a meno che non utilizziate sul vostro sistema delle applicazioni professionali per la gestione di audio e video settate tale valore su 300hz).

    6 – Tornate al menù precedente Selezionando la voce “Exit” presente nella parte bassa dello schermo

    7 – Selezionate “Networking support …”

    8 – Selezionate “Networking options …”

    9 – Scorrete tutte le voci in basso fino a trovare “The IPv6 protocol”, pigiate sulla vostra tastiera la lettera “M” 
    (in fase di compilazione verrà creato un modulo del kernel per il protocollo IPv6 che sarà possibile bannare per impedirne l’uso da parte del sistema in maniera definitiva).

    10 – Tornate al menù precedente Selezionando la voce “Exit” presente nella parte bassa dello schermo

    11 – Tornate al menù precedente Selezionando la voce “Exit” presente nella parte bassa dello schermo

    12 – Usciamo dal menù sempre Selezionando la voce “Exit” presente nella parte bassa dello schermo

    13 – Rispondiamo “Yes” alla domanda che ci verrà posta all’uscita, salveremo le modifiche apportate alle configurazione base.

    Rispondete “n” alla successive domanda presenti a schermo. 

– Copia delle impostazioni generiche e impostazione della nostra configurazione come predefinita all’interno del processo di compilazione 

cp debian.master/abi/3.2.0-20.33/amd64/generic debian.master/abi/3.2.0-20.33/amd64/i7
cp debian.master/abi/3.2.0-20.33/amd64/generic.modules debian.master/abi/3.2.0-20.33/amd64/i7.modules
sed -i s/getall amd64 generic virtual/getall amd64 generic virtual i7/g debian.master/etc/getabis
sed -i s/= generic virtual/= generic virtual i7/g debian.master/rules.d/amd64.mk
cp debian.master/control.d/vars.generic debian.master/control.d/vars.i7
sed -i s/supported=”Generic”/supported=”Nehalem”/g debian.master/control.d/vars.i7
sed -i s/target=”Geared toward x86_64/target=”Geared toward i7/g debian.master/control.d/vars.i7

– Ottimizzazione del kernel attraverso le variabili -mtune e -march, il compilatore si occuperà di produrre un kernel ottimizzato per architetture Intel Dual Core / Corei-xx
 
sed -i s/= gcc/= gcc -march=corei7 -mtune=corei7/g Makefile
sed -i s/= g++/= g++ -march=corei7 -mtune=corei7/g Makefile
sed -i s/core2/corei7/g arch/x86/Makefile
sed -i s/core2/corei7/g arch/x86/Makefile_32.cpu

– scrittura di tutte le modifiche sul disco

sync
– pulizia prima dell’inizio della compilazione vera e propria
 
fakeroot debian/rules clean
– compilazione delle dipendenze, sorgente e header

skipabi=true skipmodule=true fakeroot debian/rules binary-indep
– avvio del processo di compilazione del kernel

time skipabi=true skipmodule=true no_dumpfile=yes fakeroot debian/rules binary-i7

uliamo quello che non serve più e, infine, diamo il comando per l’installazione del nuovo kernel.

cd ..

rm linux

rm -rf linux-3.3.1

sudo dpkg -i linux-image-3.3.1-030301-i7_3.3.1-030301.201204021435_amd64.deb linux-headers-3.3.1-030301-i7_3.3.1-030301.201204021435_amd64.deb linux-headers-3.3.1-030301_3.3.1-030301.201204021435_all.deb

Riavviamo per utilizzare il nuovo Kernel.

Sistema utilizzato Kubuntu 12.04 x64 – Cpu Corei3 2°Gen. – 6GB Ram.
Unico problema riscontrato: la mia scheda di rete al ritorno dalla ibernazione (in via di risoluzione) non riesce a riagganciarsi alla stessa rete wireless.
Presto la guida per la versione a 32 Bit, un saluto a tutti.
Ringrazio il “padrone di casa” e i suoi collaboratori per l’ospitalità concessami.
No more articles