lf consiglia

Articoli Recenti

10 aprile 2012

Compilazione Kernel 3.3.1 su Ubuntu x86 e derivate - Wifi no problem

-


- Aggiornata al 10/04/2012 - Kernel Patch per problema Wi-Fi Atheros inclusa
 Ho aggiornato il link del sorgente del kernel perché punti ad una versione opportunamente modificata, buon divertimento.

Un saluto a tutti, come promesso eccovi la versione per sistemi a 32 bit della guida già pubblicata.
Successivi approfondimenti ed ulteriori ottimizzazioni saranno presenti in successivi post.
Le differenze tra l'architettura a 32 e a 64 Bit sono minime ma, poiché ho postato le istruzioni da seguire passo passo, era necessario aggiornare la guida con le opportune modifiche. 


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 ed 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 delle 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 il 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 Core i7

cp debian.master/config/i386/config.flavour.generic debian.master/config/i386/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, RISPONDETE AFFERMATIVAMENTE SOLO ALLA SEGUENTE RICHIESTA: "Do you want to edit config: i386/config.flavour.i7? [Y/n]".

fakeroot debian/rules editconfigs
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...”. È 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” alle successive domande presenti a schermo. 

- Copia delle impostazioni generiche ed impostazione della nostra configurazione come predefinita all'interno del processo di compilazione 

cp debian.master/abi/3.2.0-20.33/i386/generic debian.master/abi/3.2.0-20.33/i386/i7

cp debian.master/abi/3.2.0-20.33/i386/generic.modules debian.master/abi/3.2.0-20.33/i386/i7.modules

sed -i s/getall\ i386\ generic\ virtual/getall\ i386\ generic\ virtual\ i7/g debian.master/etc/getabis

sed -i s/\=\ generic\ virtual/\=\ generic\ virtual\ i7/g debian.master/rules.d/i386.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 / Core i-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
- Pulizia di 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_i386.deb linux-headers-3.3.1-030301-i7_3.3.1-030301.201204021435_i386.deb linux-headers-3.3.1-030301_3.3.1-030301.201204021435_all.deb

Riavviamo per utilizzare il nuovo Kernel.

Ho verificato la guida su di una macchina virtuale e non ho riscontrato problematiche, attendo i vostri feedback. A presto.