Dimensione: 11619
Commento: LKN
|
Dimensione: 11620
Commento:
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 208: | Linea 208: |
* [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] di Greg Kroah-Hartman, disponibile nei termini della licenza Creative Commons Attribution-ShareAlike 2.5 | * [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] di Greg Kroah-Hartman, disponibile nei termini della licenza Creative Commons Attribution-Share Alike 2.5 |
IndiceBR TableOfContents(2) |
Introduzione
In informatica, il kernel costituisce il nucleo di un sistema operativo. Si tratta di un software con il compito di fornire ai processi in esecuzione sull'elaboratore un accesso sicuro e controllato all'hardware. Dato che possono esserne eseguiti simultaneamente più di uno, il kernel ha anche la responsabilità di assegnare una porzione di tempo-macchina e di accesso all'hardware a ciascun programma ([http://it.wikipedia.org/wiki/Multitasking multitasking]).
Compilare il codice sorgente del kernel, anziché installare uno dei pacchetti precompilati, assicura certamente alcuni vantaggi, tra cui:
- un avvio più veloce, dato che i moduli da caricare sono solo quelli propri del computer in uso e non ve ne sono di inutili,
- un sistema operativo più veloce perché potete ottimizzare il codice sul vostro processore.
- la possibilità di attivare opzioni che non sono presenti nei kernel precompilati.
Non è necessario compilare un kernel nei casi in cui l'hardware funzioni alla perfezione e le periferiche vengano completamente riconosciute. A volte per far riconoscere correttamente al sistema una data periferica basta caricare i moduli necessari con le dovute opzioni. È utile ricompilare il kernel solo se tali moduli non sono presenti o se si è certi che i driver della periferica sono presenti solo in una nuova versione successiva a quella attualmente in uso. Inoltre, l'aumento di prestazioni avviene in gran parte solo nella fase di avvio. |
È bene tener presente che compilare un nuovo kernel significa, nella sostanza, cambiare sistema operativo, in quanto esso ne costituisce il motore; inoltre è richiesta un buona conoscenza del proprio hardware.
Preparativi
Installare le varie dipendenze
Il processo di compilazione richiede l'installazione di alcuni pacchetti specifici, da [:SynapticHowto:Synaptic] installare:
build-essential
bin86
kernel-package
libncurses5
libncurses5-dev
In alternativa è possibile soddisfare tutte le dipendenze con [:Apt:apt-get] da terminale. Digitare il seguente comando:
sudo apt-get install build-essential bin86 kernel-package libncurses5 libncurses5-dev fakeroot
Se si desidera configurare il kernel tramite un'interfaccia grafica, attraverso l'uso dei comandi make gconfig o make xconfig, è necessaria l'installazione dei seguenti pacchetti:
libglade2-dev, necessario per il comando make gconfig
libqt3-headers e libqt3-mt-dev, necessari per make xconfig.
Scaricare i sorgenti del kernel
Scaricare il pacchetto da [http://www.kernel.org questo] indirizzo.
In questo modo si avrà la possibilità di installare l'ultima versione stabile del kernel, la cosiddetta versione vanilla. Procedere quindi alla sezione [#estrarre successiva].
È anche possibile scaricare il pacchetto ufficiale del kernel di Ubuntu dai [:Repository:repository]. Da terminale, digitare il seguente comando:
sudo apt-get install linux-source
Ubuntu non fornisce tutte le versioni dei kernel più aggiornate, scegliendo infatti questa opzione si correrà il rischio di non avere l'ultimo kernel stabile.
Estrarre l'archivio dei sorgenti
Una volta scaricato il pacchetto dal sito ufficiale del progetto kernel, è necessario estrarlo e copiarlo nella cartella /usr/src/.
È consigliato scompattare e compilare il kernel da utente normale. Il proprietario , per policy debian, della cartella /usr/src è il gruppo src. Per assegnare al proprio utente i diritti di scrittura e lettura, è sufficiente inserire il proprio utente in questo gruppo con il comando:
sudo adduser UTENTE src
Qualora il gruppo src non avesse più i diritti di scrittura sulla cartella /usr/src, dovranno essere ripristinati con il seguente comando:
sudo chmod -R g+wr /usr/src/*
Ora scompattiamo e copiamo i sorgenti nella cartella di destinazione:
sudo tar -xvjf linux-[VERSIONE_SCARICATA].tar.bz2 && cp -R linux-[VERSIONE_CHE_AVETE_SCARICATO] /usr/src/
Compilazione e installazione
Entrare nella directory dei sorgenti del kernel appena scaricati:
cd /usr/src/linux-[VERSIONE_CHE_AVETE_SCARICATO]
Applicare patch
A questo punto, se necessario, sarà possibile applicare una o più patch al kernel.
Tra le più diffuse si possono trovare quelle di:
[http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/ Con Kolivas]
[ftp://ftp.kernel.org/pub/linux/kernel/people/alan/ Alan Cox]
[ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/ Andrew Morton]
Di solito le patch vengono applicate utilizzando l'insieme di due comandi: patch e cat (o anche bzcat se il file ha estensione .bz2).
Copiare la patch nella directory dei sorgenti del kernel e digitare il seguente comando:
bzcat [NOME_DELLA_PATCH].bz2 | patch -p1 --dry-run
L'opzione --dry-run permette di simulare l'applicazione della patch senza modificare realmente i file. Se non vengono visualizzati errori, si può procedere con l'applicazione della stessa con il seguente comando:
bzcat [NOME_DELLA_PATCH].bz2 | patch -p1
Se il procedimento non andrà a buon fine, sarà necessario verificare di aver scaricato la versione corretta della patch e ripetere il procedimento.
Configurazione
È possibile importare una vecchia configurazione di un altro kernel. Se si dispone del file .config è sufficiente copiarlo all'interno della directory dei sorgenti.
Se si vuole utilizzare la configurazione del kernel attualmente in uso, è sufficiente digitare, all'interno della directory dei sorgenti:
sudo make oldconfig
A questo punti il sistema vi farà domande solo sulle nuove voci del file di configurazione presenti nel nuovo kernel e non contemplate in quello vecchio. Si può pervenire allo stesso risultato per via grafica caricando il vecchio file di configurazione del kernel ,presente in /boot e chiamato config-2.6-XX-XX-XXXXX,e selezionando i moduli che ci interessano.
Per personalizzare la configurazione eliminando eventuali moduli, o per crearne una nuova, ci sono diverse modalità:
- Grafica:
usando le librerie gtk (consigliato su Ubuntu)
make gconfig
usando le librerie qt (consigliato su Kubuntu)
make xconfig
Pseudo grafica:
make menuconfig
Per l'utente più inesperto è consigliabile effettuare la configurazione con il metodo grafico.
Potrete cercare le varie opzioni di configurazione di ogni versione del kernel in questo utilissimo sito: [http://kernel.xc.net/ Linux Kernel Configuration Archive]
La cancellazione di un semplice modulo può compromettere l'intero sistema. Per cercare di ridurre al minimo gli errori, usare il comando «lshw» per visualizzare il proprio hardware. |
Alla fine la configurazione viene salvata all'interno del file .config presente nella cartella del kernel. È consigliato farne una copia, se si è soddisfatti del lavoro svolto.
Configurazione standard
Seguire quanto descritto per evitare spiacevoli inconvenienti in fase di compilazione:
In «General Setup» attivare:
- -Support for paging of anonymous memory (swap)
- --Support for prefetching swapped memory
- -Support for paging of anonymous memory (swap)
In «Processor type and features»:
In «Processor family» scegliere il modello del processore.
Attivare Preemption Model-> Voluntary Kernel Preemption (Desktop)
In «High Memory Support» scegliere:
off se si possiede meno di 1 GB di RAM
1GB Low Memory Support se si possiede 1GB di RAM
4GB se si possiede più di 1GB di RAM
In «Timer frequency» abilitare: 1000 Hz
In «Graphics Support»
Disabilitare NVIDIA RIVA se si usano driver Nvidia proprietari.
In «Block layer -> IO Schedulers» lasciare solo «CFQ I/O scheduler», otterrete una migliore performance.
In «Kernel hacking» deselezionare «Kernel debugging».
Compilare
Finita la fase di personalizzazione, per compilare, digitare:
fakeroot make-kpkg clean
In questo modo vengono puliti i sorgenti. Non digitare tale comando se non si è mai ricompilato il kernel. E successivamente:
fakeroot make-kpkg --append-to-version=-custom --initrd kernel_image kernel_headers modules_image
Il flag di revisione è opzionale ed è solamente utile per visualizzare il nome del kernel attraverso il comando:
uname -r
C'è la possibilità di scrivere tutto ciò che si vuole al posto di «-custom» (esempio: dopo il trattino "-10.k7" in base al tipo di processore disponibile sulla propria macchina).
Generalmente i kernel Ubuntu usano un'immagine initrd per creare il cosiddetto ramdisk, una porzione di memoria RAM usata per caricare i moduli necessari al sistema.
È sufficiente aggiungere l'opzione «--initrd» al comando precedente.
Non è un'opzione essenziale in quanto se si compilano i moduli relativi al filesystem sulla quale fa il boot e i moduli del chipset, non c'è bisogno dell'immagine initrd. Inoltre il boot risulta un po' più veloce. Serve invece nei kernel ufficiali che devono supportare un gran numero di chipset, file system, dischi fissi ecc... e per ciò si caricano tutti questi moduli. Serve anche nel caso si debba usare un bootsplash. Poiché vi sia la Ram disk è necessario che l' opzione 'RAM disk support' nella sezione 'Block Device' del kernel, sia abilitata.
L'opzione kernel_image compila tutti i moduli del kernel scelti nella configurazione e crea un pacchetto .deb.
L'opzione kernel_headers crea un pacchetto .deb con una serie di file e script che consentono di compilare sorgenti esterni.
L'opzione modules_image compila i sorgenti dei moduli esterni presenti in /usr/src (come i driver video). Se non ce ne fossero, non aggiungere questo parametro.
Installare
Entrare nella cartella superiore:
cd ..
E installare i pacchetti appena creati. Da terminale digitare:
sudo dpkg -i kernel-image-[VERSIONE_DEL_KERNEL].deb sudo dpkg -i linux-headers-[VERSIONE_DEL_KERNEL].deb
Il boot loader [:Grub] verrà aggiornato automaticamente.
Riavviare il computer e quindi scegliere il nuovo kernel installato.
Se ci sono problemi, riavviare la macchina e utilizzare il vecchio kernel.
Ulteriori risorse
[http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] di Greg Kroah-Hartman, disponibile nei termini della licenza Creative Commons Attribution-Share Alike 2.5
[http://massimo.solira.org/pcikl/index.html Progetto Configurazione italiana del Kernel Linux]