Sei sulla pagina 1di 26

Cenni sulla compilazione di

un kernel 2.6.X
Versione 0.9.0

Copyright (c) 2006 Lucio Zara.


è garantito il permesso di copiare, distribuire e/o modificare questo
documento seguendo i termini della Licenza per Documentazione Libera GNU,
Versione 1.1 o ogni versione successiva pubblicata dalla Free Software
Foundation; senza Sezioni Non Modificabili, con il Testo di Copertina “Cenni
sulla compilazione di un kernel 2.6.X”, e Senza Testo di Retro Copertina. Una
copia della licenza è acclusa nella sezione intitolata "Licenza per
Documentazione Libera GNU".
Indice
1.Introduzione

2.Cosa è il kernel ?

3.Cosa occorre per la compilazione ?

4.Passi da seguire

5.Descrizione delle varie sezioni di configurazione

6.Programmi utili

7.Particolari opzioni

8.Patch

9.Kernel e distribuzioni
9.1.Debian, Ubuntu e figlie
9.2.Slackware

10.Conclusioni

11.Ringraziamenti

12.ChangeLog

13.Licenza per Documentazione Libera GNU


1.Introduzione
In questa guida si cerca di mettere a disposizione del lettore l'esperienza pratica del redattore e
dei sui collaboratori nella compilazione del kernel Gnu/Lnux, in particolare si fa riferimento al
ramo 2.6.X.
Molti credono che la compilazione del kernel sia una cosa molto complicata da realizzare ma, in
realtà non è così: è chiaro che non sia la cosa più semplice di questo mondo, ma dopo qualche
tentativo non si avranno più molti problemi a farlo.

2.Cosa è il kernel?
Il kernel è il nocciolo del sistema operativo (da qui in poi SO): esso si occupa di gestire
l'hardware presente nel pc in maniera trasparente, quindi senza che l'utente si debba
preoccupare di come questo effettivamente funzioni.
Lato utente il kernel viene utilizzato tramite una SHELL, che è un interprete di comandi. Un
esempio di shell è la bash (Bourne-Again Shell), che di norma è la scelta di default per i sistemi
Gnu/Linux, ma ne esistono altre per usi specifici (sh, ash, zsh ecc).
Il kernel Linux è nato nel 1990 da un'idea di Linus Torvalds che voleva creare un clone di Minix
per architetture 386 e 486. Dopo un duro lavoro l'annuncio della prima versione di Linux fu dato
il 5-10-1991.
Torvalds adottò per il suo sistema la licenza GNU ed in poco tempo il suo progetto raccolse
attorno a sé tantissimi sviluppatori tra cui anche alcuni che stavano lavorando ad un SO della
GNU. Lo sviluppo di Linux divenne così molto veloce: basti pensare che uno dei primi kernel
aveva un peso di circa 0.2MB (versione 0.10) con 10.000 righe di codice, mentre adesso si sono
superati i 200 MB (versione 2.6.13) con più di 5.000.000 di righe di codice.
Vediamo come vengono gestite le versioni del kernel, prendendo in considerazione ad esempio
linux-2.4.29. Il primo numero (2) indica la versione maggiore (major version), il secondo numero
(4) indica la versione minore (minor version), il terzo numero indica la versione di correzione
degli errori (bugfix).
La major version indica la versione principale del kernel. Da diverso tempo è ferma a 2 ma
questo non implica che ci siano stati pochi cambiamenti (qualche anno fa si discusse sul fatto che
l'attuale ramo 2.6 dovesse rappresentare l'inizio del ramo 3.0, ma il Sig. Torvalds disse che le
modifiche apportate non erano tali da giustificare il cambio di numerazione).
La minor version viene modificata quando vengono introdotte delle nuove funzionalità al kernel,
pur mantenendo una certa compatibilità con le versioni precedenti: un 2.6.X infatti può
coesistere tranquillamente con un 2.4.X. Questo numero se pari indica una versione stabile,
mentre se dispari indica una versione di sviluppo o ritenuta poco stabile, ad esempio il ramo 2.6
deriva del ramo di sviluppo 2.5.
La bugfix invece indica la correzione o l'aggiunta di piccoli particolari al kernel. Nel ramo attuale
2.6.X si è scelta la versione a 4 cifre: in pratica il numero di bugfix viene allargato da 1 a 2 cifre,
così da avere kernel del tipo 2.6.13.4. Questa modifica è stata inserita per rendere più veloci i
rilasci di versioni stabili.

3.Cosa occorre per la compilazione?


Come ogni volta che si compila del codice sorgente, servono i software di sviluppo quali i
compilatori e gli autotools (gcc e make); per i kernel 2.6.X è necessario anche il pacchetto
module-init-tools che occorre per la gestione dei moduli (di norma compreso tra i pacchetti
ufficiali di ogni distribuzione); chiaramente non possono mancare i sorgenti del kernel.
Il kernel vanilla (cioè privo di patch) è reperibile direttamente da kernel.org. Si consiglia però di
utilizzare i sorgenti del kernel rilasciati dalla propria distribuzione Gnu/Linux: ogni distribuzione
inserisce delle patch nei propri kernel, pertanto se si usa un vanilla si corre il rischio che
qualcosa non funzioni come dovrebbe. Al momento la Slackware e derivate sono le uniche ad
usare un kernel vanilla, eccezion fatta per Gentoo che contempla questa opzione in fase di
installazione.
4.I passi da seguire
Dopo aver reperito i sorgenti del kernel, che si trovano in formatto compresso .tar.gz o .tar.bz2 (il
secondo ha dimensioni minori), si devono decomprimere in /usr/src. Si Copino i sorgenti
compressi in /usr/src e si entri nella directory

cp linux-2.6.X.tar.bz2 /usr/src/
cd /usr/src

A questo punto si estrae l' archivio:

tar xjvf linux-2.6.X.tar.bz2 (oppure tar xzvf linux-2.6.X.tar.gz)

In questo modo è stata creata la directory /usr/src/linux-2.6.X, nella quale bisogna entrare. Si
consiglia di leggere il file README che spiega cosa è il Linux, su che architetture può essere
utilizzato, come applicare le patch ecc. E' buona norma leggere il README quando presente
all'interno dei sorgenti.
Se vengono utilizzati i sorgenti delle distribuzioni molto probabilmente non si ha la necessità di
decomprimerli, una volta installato il pacchetto si dovrebbe già trovare la directory in /usr/src.
I comandi principali da usare per la compilazione di un kernel 2.6.X sono :

make mrproper
make xconfig (o gconfig o menuconfig)
make
make modules_install

Il make mrproper va a ripulire il ramo dei sorgenti e prepara l'ambiente per la compilazione.
Quelle che si vedono con make xconfig o gconfig o menuconfig sono le varie interfacce che il kernel
mette a disposizione per la sua configurazione; xconfig e gconfig sono basati sul sistema X
windows, vanno lanciati all'interno di una sezione X attiva ed usano rispettivamente le librerie QT
e GTK (quindi se si ha intenzione di utilizzare uno di questi metodi di configurazione è necessario
installare le relative librerie). menuconfig è invece una interfaccia pseudo-grafica che si basa
sull'uso delle librerie NCURSES, non ha bisogno di un server X attivo. Esiste anche l'opzione
make oldconfig che si basa sulla configurazione del kernel in esecuzione: questo comando pone le
domande inerenti le nuove peculiarità introdotte nel kernel che si sta configurando. Appena si
avvia uno dei tools di configurazione si nota che alcune opzioni vengono caricate di default,
cercando prima nel file .config, e in mancanza di questo leggendo il contenuto del file
arch/i386/defconfig.
L'intera configurazione viene salvata di default all'interno del file .config, ma si può salvarne una
copia di backup in altra locazione in modo da averla a disposizione nel caso si vogliano apportare
piccole modifiche: i programmi di configurazione danno la possibilità di caricare un file di
configurazione alternativo, tramite l'opzione Load an Alternate Configuration File di menuconfig, e
l'opzione Load del menù File di xconfig e gconfig.
Il make è l'opzione che compila realmente il kernel. A questo comando si può passare l'opzione -j2
o -j3 che indica il numero di processi da lanciare in parallelo durante la compilazione; con questa
opzione non si fa altro che velocizzare l'operazione di compilazione: una singola compilazione
non occupa la cpu al 100%, mentre due o più processi contemporanei permettono di sfruttare
meglio la macchina e diminuire il tempo totale di compilazione (si noti che non ha senso usare un
numero di processi maggiore di 2 o 3 su sistemi che utilizzano una singola CPU in quanto poi
interviene il collo di bottiglia dato dal disco e dal coordinamento di troppi processi
contemporanei).
make modules_install è il comando che installa i moduli nel sistema e precisamente li posiziona in
/lib/modules/2.6.X.
Adesso bisogna installare il kernel. Si preferisce “farlo a mano” copiando l'immagine del kernel
presente in arch/i386/boot/bzImage in /boot/vmlinuz-2.6.X e il file System.map in
/boot/System.map-2.6.X, ma esiste il comando make install che, oltre a copiare i precedenti file,
dovrebbe aggiornare anche lilo:
cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.X
cp System.map /boot/System.map-2.6.X

Per mantenere una certa compatibilità è opportuno creare un link simbolico alla directory dei
sorgenti del nuovo kernel che punta a /usr/src/linux

rm -rf /usr/src/linux (eliminiamo il vecchio link)


ln -s /usr/src/linux-2.6.X /usr/src/linux

Questo è utile per quei programmi che non usano il comando ”uname -r“ per determinare il kernel
in esecuzione ma lo vanno a cercare direttamente in /usr/src/linux. Prima di cancellare il vecchio
link è opportuno verificare che sia effettivamente un link passando l'opzione -l a ls.
Una volta copiati i file di interesse in /boot non resta che inserire il kernel appena compilato
all'interno del file di configurazione del bootloader. Attualmente i 2 principali bootloader sono
lilo e grub.
Se si usa lilo è necessario andare a modificare il suo file di configurazione che si trova in
/etc/lilo.conf ed aggiungere il nuovo kernel, inserendo delle righe simili a queste:

image = /boot/vmlinuz-2.6.X
root = /dev/hda5
label = 2.6.X
read-only

la direttiva image indica l'immagine del kernel da caricare, la direttiva root indica quale è il
dispositivo in cui è situata la root directory del sistema, label invece indica il nome che apparirà
sul prompt di lilo.
Adesso non resta che aggiornare lilo. Si è supposto che esso debba essere installato nell'mbr
(MASTER BOOT RECORD) del disco che viene riconosciuto come /dev/hda. Situazioni differenti
possono essere tranquillamente gestite leggendo il manuale in linea di lilo (man lilo). Prima di
andare a sovrascrivere l'mbr si consiglia di eseguire prima un test

lilo -t (effettua il test di installazione)


lilo -v (aggiorna il lilo)

Se invece si usa grub bisogna modificare il file /boot/grub/menu.lst un esempio di ciò che si può
inserire è questo:

title 2.6.X
root (hd0,4)
kernel /boot/vmlinuz-2.6.X root=/dev/hda5 ro

La direttiva title indica il nome che verrà visualizzato sul prompt di grub, root (hd0,4) indica la
partizione del disco in cui si trovano i file di configurazione di grub, in questo caso hda5, kernel
indica l'immagine del kernel da caricare, root indica come in lilo quale è il device della root
directory e ro è equivalente al read-only di lilo.
Con grub non è necessario andare ad aggiornare il boot loader, le configurazioni vengono prese
in automatico.
Questi sono i passi da seguire per la compilazione del kernel.

Nota: make install aggiorna i link simbolici /boot/vmlinuz, /boot/System.map e /boot/config in modo
che puntino sempre alla versione appena compilata; impostando quindi nel file di configurazione
del bootloader la voce dell'immagine a /boot/vmlinuz è possibile aggiornare il kernel con questo
comando.

5.Descrizione delle varie sezioni di configurazione


La problematica più grande si ha nella configurazione (cioè quando si digita il comando make
xconfig o simili) perché qui si vanno a scegliere quelle che saranno poi le parti che costituiranno
il kernel.
Il kernel linux supporta l'inserzione di moduli (piccole parti di codice compilato) quando questo è
già avviato (si legga il manuale del comando modprobe); il vantaggio di ciò è la possibilità di avere
un kernel molto leggero che al suo interno contiene in maniera statica solo lo stretto
indispensabile (come ad esempio il supporto per i dischi fissi o i bus della scheda madre o ancora
il file system della partizione di root). Questa peculiarità è anche efficace in caso di blocco di
qualche modulo non necessario (ad esempio il supporto per la scheda video, quella audio
eccetera) che non causeranno il blocco del sistema.
Per quanto detto sopra bisogna fare distinzione tra inserzione come modulo o built-in. Se si usa
xconfig o gconfig quando si và a “cliccare” su una voce essa verrà inserita come built-in se
compare un segno di spunta (V), invece se appare un puntino (∙) essa sarà inclusa come modulo.
Se invece si preferisce menuconfig le opzioni inserite come moduli sono contraddistinte dalla
lettera M, mentre le built-in da un asterisco (*).
Di seguito una “breve” descrizione delle varie sezioni.

Code maturity level options:


Prompt for development and/or incomplete code/drivers: se la si vuole introdurre occorre
inserirla come built-in, questa opzione mette a disposizione le funzionalità di alcuni
driver che sono ancora in fase di test e la possibilità di scegliere alcuni driver
considerati ormai obsoleti.

General setup: si impostano funzionalità come il supporto per dischi di swap e il modo in cui
devono essere gestiti i processi.

Support for paging of anonymous memory (swap): questa opzione abilita il supporto per i dischi
di swap. Da abilitare come built-in insieme a Support for prefetching swapped memory.

System V IPC: Inter Process Communication, questa funzione permette ai processi di


comunicare tra loro e avere un certo sincronismo. Da abilitare come built-in.

BSD Process Accounting: permette al kernel di rilasciare informazioni sui processi come ad
esempio il momento della creazione, l'utente proprietario, il nome del comando,
l'occupazione di memoria ecc.. Da inserire come built-in. Si consiglia in oltre di abilitare la
sotto opzione BSD Process Accounting version 3 file format.

Sysctl support: fornisce l' opportunità di cambiare dinamicamente certi parametri e variabili del
kernel senza la necessità di ricompilare il kernel o riavviare il sistema. Da abilitare come
built-in.

Auditing support: abilita l' infrastruttura di auditing che può essere usata con un altro
sottosistema kernel come SELinux. Da abilitare come built-in insieme alla sotto opzione
Enable system-call auditing support.

Kernel .config support: fornisce informazioni sulle opzioni di compilazione del kernel. Queste
informazioni possono essere estratte dal file immagine del kernel con lo script
scripts/extract-ikconfig e usate per ricompilare il kernel attuale o per compilare un altro
kernel. Possono essere inoltre estratte da un kernel in esecuzione leggendo
/proc/config.gz se abilitato. Si consiglia di abilitare questa opzione e la sua sotto opzione
Enable access to .config through /proc/config.gz.

Optimize for size: Abilitando questa opzione viene passato a gcc il parametro "-Os" al posto di
"-O2", col risultato di ottenere un kernel di dimensioni minori. Da selezionare se si compila
il kernel per una macchina dove risparmiare spazio è particolarmente importante, si può
tralasciare su quasi tutti i sistemi “normali”.

Enable 16-bit UID system calls: questo abilita i vecchi wrapper per le chiamate di sistema con
UID a 16-bit. Se lo si vuole abilitare inserirlo come built-in.

Enable VM86 support: e' richiesta da programmi come DOSEMU per eseguire vecchio codice a
16-bit su processori X86. Può essere necessaria anche per software come XFree86 o Xorg
per l'inizializzazione di alcune schede video tramite BIOS.

Configure standard kernel features: questa opzione fa in modo che alcune opzioni di base del
kernel vengano disabilitate o modificate. Normalmente è un' opzione che viene usata per
ambienti specializzati (EMBEDDED) che possono tollerare un kernel "non-standard". Di norma
non si ha bisogno di abilitarla.
Load all symbols for debugging/kksymoops: abilitarla come built-in per fare in modo che il kernel
stampi informazioni sui crash simbolici e backtrace sullo stack simbolico. La sotto opzione
Do an extra kallsyms pass non dovrebbe essere abilitata a meno che non si trovi un bug in
kallsyms.

Loadable module support: ci sono le opzioni che permettono di usare i moduli del kernel,
se non si abilitano le voci in questo menù non sarà possibile usarli.

Enable loadable module support: Abilita il supporto per i moduli. Da abilitare insieme alle sue
sotto sezioni come built-in. Si possono anche non inserire le opzioni Forced module
unloading (permette di forzare la rimozione di un modulo anche quando il kernel crede
che non sia sicuro: il kernel rimuoverà il modulo senza aspettare che qualcuno smetta di
usarlo) e Source checksum for all modules.

Block layer:
Support for Large Block Devices: Da abilitare solo se si possiedono dischi più grandi 2TB.

IO Schedulers: Le opzioni di questo menù si possono abilitare tranquillamente come built-in. Si


consiglia di scegliere nella sezione Default I/O scheduler l'opzione CFQ se si sta
compilando il kernel per un sistema desktop

Processor type and features: qui si scegliere il tipo di architettura e il processore, il


supporto per il multi processore e per ram superiori ad 1 Gb.

Subarchitecture Type: se non si dispone di macchine particolari si può tranquillamente scegliere


l' opzione PC-compatible.

Processor family: da questo menù si scelga il tipo di processore presente nel proprio pc.

Generic x86 support: questa può non essere abilitata se il kernel deve funzionare solo sulla
macchina sul quale è stato compilato. Se viene abilitata introdurrà delle ottimizzazioni più
generiche rispetto a quelle scelte nel menù precedente.

HPET Timer Support: abilita l' uso dell'HPET per i timer interni del kernel. Da abilitare come
built-in.

Symmetric multi-processing support: questa opzione va abilitata solo su sistemi dotati di più di
un processore o di processori a più core.

Preemption Model: da qui si consiglia di abilitare Preemptible Kernel per un kernel a bassa
latenza per uso Desktop, mentre abilitare No Forced Preemption se si prepara il kernel
per un server.

Preempt The Big Kernel Lock: abilitare questa opzione come built-in se si dispone di un desktop.

Local APIC support on uniprocessors: un APIC locale e' un controller di interrupt integrato nella
CPU. Si può tranquillamente abilitare questa voce anche se non si dispone di una CPU con
tale controllo: il kernel funzionerà altrettanto bene. Per lo stesso motivo può essere abilita
anche la sotto-funzione IO-APIC support on uniprocessors.

Machine Check Exception: permette al processore di notificare al kernel che ha rilevato un


problema. Si consiglia quindi di abilitare questa opzione. Si abiliti anche la sotto opzione
Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4 e se si dispone di un P4
anche la voce check for P4 thermal throttling interrupt.
Toshiba Laptop support e Dell laptop support: aggiungono dei supporti specifici per computer
portatili delle due case costruttrici.

Enable X86 board specific fixups for reboot: abilitare come built-in, questa permette il riavvio
sicuro del sistema per alcune combinazioni hardware-bios.

/dev/cpu/microcode - Intel IA32 CPU microcode support: da la possibilita' di aggiornare il


microcode sui processori Intel della famiglia IA32, come Pentium Pro, Pentium II, Pentium
III, Pentium 4, Xeon. Si deve però abilitare anche il file system /dev/ ritenuto ormai
obsoleto.

High Memory Support: dato che Gnu/Linux può gestire sistemi con 4 GB di memoria fisica per
processore è necessario abilitare tale supporto solo si ha una quantità di RAM superiore a
960 MB.

Memory split: qui di norma va lasciata l'opzione di default 3G/1G user/kernel split.

Memory model: consente di cambiare alcuni modi interni di gestione della memoria di Linux.
Molti utenti qui potranno selezionare solo l' opzione Flat Memory; altri invece potranno
scegliere anche Sparse Memory e Discontiguous Memory: in questo caso scegliete il
secondo.

Allow for memory hot-add: consente l'inserzione di memoria quando il sistema è acceso. Nella
maggior parte dei casi questa opzione può essere omessa (a meno che non vogliate
cambiare i banchi di ram a computer acceso).

Math emulation: questa opzione abilita l'emulazione del coprocessore matematico. Se si attiva
avendo un coprocessore matematico questo è quello che verrà utilizzato.

Use register arguments: non abilitarla.

Enable seccomp to safely compute untrusted bytecode: questa opzione è bene abilitarla, essa
viene sconsigliata solo su sistemi embedded.

Timer frequency: permette la configurazione della frequenza del timer, va impostata a 1000 Hz
se si desidera usare un sistema che dia risposte veloci ad eventi interattivi (uso desktop).
Su sistemi che non richiedono queste peculiarità può essere impostato a 100Hz.

kexec system call: questa dà la possibilità di arrestare il kernel in esecuzione e di avviarne un


altro.

Firmware Drivers: da questo menù si consiglia di attivare solo BIOS Enhanced Disk Drive calls
determine boot disk; se si dispone di un sistema DELL attivare anche le successive opzioni
che si ritengono opportune.

Power management options (ACPI, APM): si scelgono qui le opzioni per il controllo
energetico. Se si vuole abilitarlo è consigliato inserirlo come built-in. Attualmente ci sono 2
supporti per la gestione dell' energia il più vecchio APM e il nuovo ACPI: se si ha un nuovo pc si
abiliti solo il secondo.
Power Management support: questa voce va abilita se si intente usare le successive opzioni sul
risparmio energetico. Si consiglia di abilitarla soprattutto per i portatili. Si consiglia di
abilitare anche l' opzione Legacy Power Management API.

Software Suspend: abilità la possibilità di “sospendere” il pc. Se la si vuole abilitare inserirla


come built-in.

ACPI (Advanced Configuration and Power Interface) Support da questo sotto menù abilita
la possibilità di attivare l' ACPI. Se si dispone di un pc portatile occorrerà abilitare la
maggior parte delle opzioni che consentono tra l'altro il controllo della batteria (Battery),
del trasformatore di tensione (AC Adapter) della zona termica (Thermal Zone) ecc.

APM (Advanced Power Management) BIOS Support da qui si abilita il supporto per il
vecchio APM. Se si è abilitato l' ACPI meglio non abilitarlo.

CPU Frequency scaling: da questo menù si abilita il supporto per la modifica della velocità di
clock della cpu. Qui si hanno varie possibilità di scelta che dipendono in sostanza delle
necessità dell' utente. Se non si ha un particolare problema di energia si può scegliere di
impostare il Default CPUFreq governor a performance che fissa il clock alla più alta
frequenza disponibile. Occorre poi scegliere un governatore della cpu che dipende dal tipo
di processore utilizzato. Se non si possiede un processore con la capacità di variare la
frequenza di clock è inutile attivare questa opzione.

Bus options (PCI, PCMCIA, EISA, MCA, ISA): sono presenti le opzioni per i bus di
sistema e per le schede PCMCIA: inserirle come built-in. Se non si è a conoscenza dei bus
montati sulla scheda madre (MB) si legga questa guida hardware o wikipedia.

PCI support: questo abilita il supporto per il bus PCI, bus contenuto nella maggior parte delle
MB. Si consiglia di settare il PCI access mode ad Any che permette a linux di
scegliere il modo migliore di interfacciarsi con il bus PCI. Abilitare anche il PCI Express
support. Le opzioni Message Signaled Interrupts (MSI and MSI-X) e Legacy /proc/pci
interface possono anche non essere abilitate, si tenga presente che l' interfaccia /proc/pci
è stata abbandonata a favore dei nuovi tools pci-utils contenuti nel pacchetto omonimo.

ISA support: da qui si abilita il supporto per il vecchio bus ISA. Abilitare questa opzione se la
MB contiene ancora dei bus di questo tipo. Se non si conosce quali siano questi bus
si guardi wikipedia.

MCA support: questo abilita il bus MCA (MicroChannel Architecture) sviluppato da IBM, di solito
non si ha necessità di abilitarlo a meno che la vostra MB non sia dotata di questo bus.

NatSemi SCx200 support: fornisce il supporto di base per il processore National Semiconductor
Scx200.

PCCARD (PCMCIA/CardBus) support: serve per abilitare il supporto per le schede PCMCIA,
delle schede elettroniche simili a delle carte di credito. Normalmente tutti i portatili sono
dotati della possibilità di usare questo tipo di supporti. Di queste ne esistono a 16 e 32 bit,
si consiglia in caso si abbia la necessità di usare dei supporti PCMCA di abilitarli
entrambi.

PCI Hotplug Support: alcune MB danno all' utente la possibilità di rimuovere ed inserire
schede PCI a macchina accesa. Abilitare questa voce e il relativo driver se la MB
dispone di questa possibilità. Se non si sa cosa fare è opportuno non abilitare questa voce.

Executable file formats: qui si settano i formati dei file eseguibili, abilitate le varie opzioni
anche se in realtà l'opzione Kernel support for a.out and ECOFF binaries può essere omessa dalla
maggior parte degli utenti.
Networking: abilita il supporto per la rete. È bene abilitare questa voce in quanto molti
programmi richiedono tale supporto anche se il PC non è realmente collegato in rete. Si può
tranquillamente abilitare come moduli la maggior parte delle opzioni che occorrono, ed essendo
tantissime non verranno trattate tutte.

Networking options: da questo sotto menù vengono abilitate la maggior parte delle opzioni e
supporti che il kernel deve gestire.

Packet socket: è bene abilitare questa voce in quanto il protocollo packet viene usato da molti
programmi per interfacciarsi con le interfacce di rete

Unix domain sockets: abilita i socket di dominio Unix. Abilitare questa voce perché questi tipi di
socket sono usati anche dal sistema X Window (i principali sono Xorg e XFree86) o syslog.

IPsec user configuration interface: abilitarla.

TCP/IP networking: abilita i protocolli TCP/IP. Inutile dire che se si ha una rete locale o si ha
intenzione di collegarsi ad internet questa voce deve essere abilitata. Alcune delle sotto
opzioni abilitano funzionalità particolari che non sempre servono come IP: advanced
router che permette alla linux-box di diventare un router.

Network packet filtering (replaces ipchains): da qui si abilita il supporto per NETFILTER
(Network packet filtering), disabilitarlo implica l' impossibilità di utilizzare iptables.

IrDA (infrared) subsystem support: abilita il supporto per le periferiche ad infrarossi.

Bluetooth subsystem support: abilita il supporto per le periferiche bluetooth. Senza questa
opzione non si potranno usare queste periferiche.

Device Drivers: in questa sezione si settano i supporti per i vari dispositivi quali ad esempio
le porte parallele, i cd-rom, i dvd, il floppy, la tastiera, il mouse, il supporto firewire, usb ecc.
Essendo tante opzioni non verranno trattate tutte.

Generic Driver Options: abilitare tranquillamente le voci di questo menù.

Plug and Play support: da qui si dà la possibilità al kernel di configurare automaticamente le


periferiche di tipo plug and play. Si consiglia vivamente di abilitare le voci di questo menù
come built-in.

Block devices: abilitare il supporto per il floppy se se ne possiede uno ( Normal floppy disk
support o quello che fa per voi). Tra gli altri supporti si consiglia di abilitare i dispositivi di
loop (Loopback device support), anche come modulo, utili per vedere cosa c'è dentro ad
una immagine iso senza dover per forza masterizzare il cd/dvd e il supporto per i RAM
disk (RAM disk support) indispensabile se si vogliono usare i file intrd utili tra l'altro per il
boot-splash, abilitarlo built-in.

ATA/ATAPI/MFM/RLL support: questo serve per far in modo che il kernel sia in grado di
gestire periferiche come i dischi IDE e i cd-rom ATAPI. Non si dovrebbe abilitarlo solo se
si usano sistemi puramente SCSI. Da questo menù si abilita il supporto per il DMA che va
abilitato come built-in (Generic PCI bus-master DMA support). Ricordarsi di abilitare come
built-in anche il supporto per il controller della propria MB.

SCSI device support: si abilita il supporto per le periferiche di tipo scasi. Se si possiedono
dischi in modalità RAID è da qui che va abilitato il supporto (RAID Transport Class)
Multi-device support (RAID and LVM): questo attiva il supporto per parti fisiche multiple su
un singolo dispositivo.
IEEE 1394 (FireWire) support: abilita il supporto per hardware FireWire.

Network device support: abilita i driver per le interfacce di rete. Sono compresi vari dispositivi
di rete e il supporto per le reti wireless (Wireless LAN (non-hamradio))

Input device support: abilita il supporto per le periferiche di input come tastiere, mouse,
joystick ecc . Abilitare come built-in almeno il supporto per la tastira.

Character devices: qui ci sono varie voci da abilitare, tra tutte si porga attenzione al
/dev/agpgart (AGP Support) e al Direct Rendering Manager (XFree86 4.1.0 and higher
DRI support) che abilitano rispettivamente il supporto per l' AGP e per il DRM (senza
questa voce non funzionerà il 3d delle scheda grafica). Si possono abilitare entrambi come
moduli.

Hardware Monitoring support: abilita il supporto per i dispositivi di monitoraggio hardware


come i sensori di temperatura, di tensione la velocità della ventola del processore ecc.
Abilitarla come built-in.

Graphics support: da qui abilitare il supporto per il frame buffer ( Support for frame buffer
devices) come built-in altrimenti si rischia che al riavvio non si veda nulla. Come driver
si consiglia di abilitare solo il VGA e il VESA su VGA (VGA 16-color graphics support e
VESA VGA graphics support), mentre si sconsiglia di abilitare il supporto per la propria
scheda grafica se si voglio usare i driver forniti dal costruttore in quanto potrebbero
andare in conflitto. Per questo punto è comunque meglio seguire le indicazioni fornite dal
costruttore stesso.
Dal sotto menù Console display driver support abilitare come built-in Framebuffer
Console support e i vari font: non facendolo si rischia che all' avvio non si veda nulla
anche se il kernel funziona e viene visualizzata l'interfaccia del server X.

Sound: qui si abilita il supporto per le schede audio. Abilitare come modulo ALSA ( Advanced
Linux Sound Architecture), mentre è trascurabile l' inserimento di OSS ( Open Sound
System), ormai obsoleto.

USB support: il nome dice tutto. Si possono abilitare tranquillamente le varie opzioni come
moduli.

File systems: in questa sezione vengono scelti i vari file system (FS) per i quali si desidera il
supporto: includere come built-in perlomeno il supporto per il FS della partizione di root. Non
facendolo si incorre in un problema a spirale:

Pseudo filesystems si consiglia di abilitare il supporto per il FS proc (/proc file system support)
e per il tmpfs (Virtual memory file system support (former shm fs)).

Profiling support: in questa sezione si abilita il supporto per la creazione dei profili tipo
OPROFILE.

Kernel hacking: qui si abilita il supporto per debug del kernel, se non si hanno esigenze
particolari non serve abilitarlo.

Security options: qui si abilitano le opzioni di sicurezza, è bene abilitarle.

Cryptographic options: sezione dedicata alle funzioni crittografiche.

Library routines: questa non so a cosa serve.


6.Programmi utili
Vediamo ora come reperire informazioni sull'hardware presente nel pc in modo da avere un'idea
dei moduli da andare a scegliere per il kernel.
Il primo luogo dove reperire le informazioni è senza ombra di dubbio il manuale che i rivenditori
consegnano assieme al pc. Molto spesso capita che le informazioni che si possono reperire da
questi manuali non siano sufficienti, ma per ovviare a questo problema esistono alcuni software
che ci vengono in aiuto.
I primi tools sul quale fare riferimento sono le pciutils che vanno a sostituire l'oramai obsoleta
interfaccia /proc/pci. All'interno del pacchetto pciutils si trova il comando lspci che fornisce
informazioni sul bus pci e sulle periferiche ad esso collegate. Un esempio di utilizzo è il seguente:

lspci -v

si può anche eseguirlo reindirizzando l'output al comando less per poter visualizzare il risultato
più comodamente (lspci -v | less). Qui sotto è mostrata una parte dell'output del comando in modo
da capire come reperire le informazioni sui moduli necessari:

00:0b.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller (rev 80) (prog-if 10 [OHCI])
Subsystem: Mitac: Unknown device 8375
Flags: bus master, stepping, medium devsel, latency 32, IRQ 5
Memory at fedff800 (32-bit, non-prefetchable) [size=2K]
I/O ports at ff00 [size=128]
Capabilities: [50] Power Management version 2

00:10.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80) (prog-if 00 [UHCI])
Subsystem: Mitac: Unknown device 8375
Flags: bus master, medium devsel, latency 32, IRQ 10
I/O ports at 1200 [size=32]
Capabilities: [80] Power Management version 2

00:10.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80) (prog-if 00 [UHCI])
Subsystem: Mitac: Unknown device 8375
Flags: bus master, medium devsel, latency 32, IRQ 11
I/O ports at 1300 [size=32]
Capabilities: [80] Power Management version 2

00:10.3 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 82) (prog-if 20 [EHCI])
Subsystem: Mitac: Unknown device 8375
Flags: bus master, medium devsel, latency 32, IRQ 11
Memory at f0000000 (32-bit, non-prefetchable) [size=256]
Capabilities: [80] Power Management version 2

Queste sono le parti che riguardano la porta firewire e le porte usb, da cui si constata che la
scheda madre è basata su chipset VIA.
Osservando la prima riga di ogni device si nota che tra parentesi quadre è riportata una sigla, nel
caso della porta 1394 (FireWire) si può leggere [OHCI]: questo è proprio il driver che occorre per
far funzionare questa porta.
Qualche volta questa indicazione non è presente: in questo caso basta controllare il nome del
chipset e verificare poi negli help del kernel da quale modulo è supportato.
Un altro pacchetto da tenere in considerazione è usbutils, che mette a disposizione il comando
lsusb, in grado di fornire un elenco delle periferiche collegate alle porte usb. L'utilizzo di lsusb è
simile a quello di lspci, basta lanciarlo in una shell:

lsusb -v

I pacchetti pciutils e lsusb sono di norma forniti con le varie distribuzioni Gnu/Linux.
Un altro software molto utile che crea un elenco di tutto l'hardware presente nel pc è lshw.
L'utilizzo di lshw è anche più semplice degli altri due, basta digitare in una shell il nome del
programma stesso:

lshw

Le informazioni fornite da lshw sono tante, tra cui l'indicazione del modulo da utilizzare, ecco una
parte del suo output:

*-firewire
description: FireWire (IEEE 1394)
product: IEEE 1394 Host Controller
vendor: VIA Technologies, Inc.
physical id: b
bus info: pci@00:0b.0
version: 80
width: 32 bits
clock: 33MHz
capabilities: ohci bus_master cap_list
configuration: driver=ohci1394
resources: iomemory:fedff800-fedfffff ioport:ff00-ff7f irq:5

lshw è dotato anche di una comoda interfaccia grafica, basata sulle librerie GTK, che può essere
richiamata tramite il comando gtk-lshw.

7.Particolari opzioni
Se si vuole ricompilate il kernel solo seguendo i passi elencati sopra si corre il rischio che in caso
di errore la macchina non funzioni. Questo è dovuto al fatto che quando si esegue il comando
make modules_install si sovrascrive la directory dove erano inseriti precedentemente i moduli.
Per evitare questo si hanno 2 strade a disposizione: copiare la directory dei sorgenti
aggiungendoci un suffisso oppure andare a modificare il Makefile presente nella directory
principale dei sorgenti del kernel. Si preferisce il primo metodo perché permette di non perdere i
risultati della compilazione precedente anche quando la loro perdita non è importante.
Nel primo caso, si supponga di avere già compilato un kernel 2.6.13 e di volerlo ricompilare. La
prima operazione da eseguire è la copia della directory dei sorgenti :

cp linux-2.6.13 linux.2.6.13-pk

in questo caso quando si lancia il make modules_install i moduli verranno installati in


/lib/modules/2.6.13-pk, senza andare a toccare i vecchi moduli. Si utilizzi

make mrproper

per ripulire la nuova directory dei sorgenti prima di andare a configurare e compilare.
Nel caso in cui si preferisca editare il Makefile bisogna modificare il valore della variabile
$EXTRAVERSION (in realtà si possono modificare anche le altre variabili), questo produrrà
esattamente lo stesso effetto che si ha nel caso di copia dei sorgenti, ad esempio ecco le prime
righe del MakeFile del 2.6.13:

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 13
EXTRAVERSION =

Se si modifica la riga “EXTRAVERSION =” in

EXTRAVERSION = -pk
si otterrà la copia dei moduli in /lib/modules/2.6.13-pk.
Se dopo aver compilato il kernel ci si rende conto di essersi scordati qualche modulo, o si ha
bisogno di un driver che prima non serviva, sarà sufficiente rientrare nella directory dei sorgenti
e da qui riutilizzare uno dei tools per la configurazione per aggiungerlo. Una volta completata la
fase di configurazione sarà necessario ricompilare (comando make), reinstallare i moduli
(comando make modules_install) e copiare i file bzImage e System.map in /boot. In questo caso non
è necessario usare il comando make mrproper.
Per chi possiede più di un pc sul quale sperimentare può essere utile creare una directory di
appoggio dove andare a posizionare il kernel e i suoi moduli in modo da compilare una sola volta
(sulla macchina di test), per poi passare il tutto sulla macchina di produzione. Ad esempio, dopo
aver testato il nuovo kernel, per trasportarlo sarà sufficiente creare ad esempio la directory
/home/[nome_utente]/mio_kernel/ e andare a copiarci dentro i file vmlinuz e System.map, mentre
per i moduli si può usare questo comando

make modules_install INSTALL_MOD_PATH=/home/[nome_utente]/mio_kernel/

in questo modo si trovano i moduli installati in


/home/[nome_utente]/mio_kernel/lib/modules/2.6.13, basterà poi copiare il contenuto di
/home/[nome_utente]/mio_kernel sul secondo pc. Si tenga presente che le due macchine devono
essere praticamente uguali o il kernel deve essere compilato nella maniera più generica
possibile.

8.Patch
Ogni volta che viene rilasciata una nuova versione del kernel i maintainer mettono a disposizione
di tutti gli utenti delle patch. Queste servono a rendere il kernel della versione precedente uguale
a quello della versione successiva.
Ad esempio si è in possesso del kernel 2.6.13 e viene rilasciata la versione 2.6.13.1; per non
dover scaricare completamente il codice sorgente aggiornato (circa 37 MB) si può applicare
semplicemente la patch, chiamata appunto patch-2.6.13.1.bz2 (circa 4,8 KB), ai sorgenti del
2.6.13. L' inserimento di una patch viene effettuato con il comando patch. Prima di applicare la
patch si faccia una copia dell'attuale directory, la si rinomini in linux-2.6.13.1 e si prepari
l'ambiente per la compilazione

cp -rf /usr/src/linux-2.6.13 /usr/src/linux-2.6.13.1


cd /usr/src/linux-2.6.13.1
make mrproper

Ora si copia la patch all'interno di linux-2.6.13.1 e poi la si applica:

cp /path/file/patch-2.6.13.1.bz2 /usr/src/linux-2.6.13.1
bzip2 -dc ../patch-2.6.13.1.bz2 | patch -p1 ( vi trovate in linux-2.6.13.1)

Sul video verranno visualizzate una serie di scritte: sono le indicazioni sui file che si stanno
patchando. Ulteriori informazioni sull'installazione della partch si possono reperire nel file
README presente nella directory principale dei sorgenti del kernel. Si segnala anche l'esistenza
di uno script che automatizza il processo: si trova in /scripts/patch-kernel.
Per chi usa un kernel vanilla e fa un uso desktop della sua distribuzione si consiglia l'inserimento
delle patch di Con Kolivas che diminuiscono la latenza rendendo di conseguenza più veloce il
sistema. Con Kolivas ha pensato anche al lato server, infatti le sue patch sono disponibili anche
per utilizzo server. Queste patch sono reperibili sul sito
http://members.optusnet.com.au/ckolivas/kernel/ .
Sempre in ambito desktop, se si vuole un boot con immagine e barra di avanzamento si deve
applicare la patch per il boot splash reperibile da http://www.bootsplash.de/ .
Lato server per quanto riguarda la sicurezza segnalo il progetto grsecurity
http://www.grsecurity.org/ .
Per chi ha invece problemi con l'inglese si segnala il progetto PCIKL . Questa patch traduce
l'interfaccia di configurazione in italiano e può essere utilizzata solo sui kernel vanilla. Si tenga
presente che se si applica questa patch e si vuole successivamente applicare la patch dei
maintainer del kernel questa va tolta e poi in caso riapplicata. L'eliminazione di una patch viene
effettuata con questo comando

patch -p1 -R -E < file_patch

Dallo stesso sito si apprende che è stato implementato a partire dai kernel 2.6.12 un supporto
nativo per la lingua. Questo però non viene istallato di default quindi occorre farlo a mano. Sul
sito nella sezione download trovate tutte le istruzioni.
L' inserimento delle patch è spiegata sui relativi siti.

9.Kernel e distribuzioni
Ogni distribuzione Gnu/Linux ha un proprio approccio alla gestione del kernel. Questo capitolo si
prefigge il compito di descrivere le operazioni generali da seguire per ogni distribuzione.

9.1.Debian, Ubuntu e figlie


La compilazione del kernel su sistemi debian-based differisce da quella standard per il fatto che
mira a creare un pacchetto .deb, in grado di aggiornare i link e la configurazione di grub al
momento dell'installazione.
Prima di tutto occorre munirsi di alcuni pacchetti essenziali: a tal scopo si utilizzino i comandi

sudo apt-get install build-essential bin86 kernel-package


sudo apt-get install libqt3-headers libqt3-mt-dev (solo se si vuole usare make xconfig).

Dopo aver reperito tutto il necessario si devono acquisire i privilegi di root tramite il comando

sudo -s -H

Si decomprimano i sorgenti del kernel all'interno della cartella /usr/src e si applichino le


eventuali patch.
Per partire da una configurazione già funzionante si può recuperare quella che caratterizza il
kernel fornito dalla distro utilizzando

cp /boot/config-`uname -r` /usr/src/linux-VER-KERNEL/.config

quindi si passa alla configurazione.


Il prossimo passo è importante nell'ottica secondo cui far funzionare perfettamente il primo
kernel compilato è difficile; è possibile modificare il nome del kernel in modo che sia più facile
gestirne l'installazione e la sua eventuale rimozione.
Per modificare il nome del kernel si veda il capito 7 ( Particolari opzioni) dove si parla della
modifica della variabile EXTRAVERSION.
In debian e ubuntu il valore di EXTRAVERSION è visibile anche sulla schermata di grub; sarà
così possibile capire, per esempio, che il kernel 2.6.17-03 è successivo al kernel 2.6.17-02.
Salvato il Makefile si procede con la pulizia della directory:

make-kpkg clean (eseguito all'interno della directory dei sorgenti del kernel)

Per procedere con la compilazione l' istruzione fondamentale è

make-kpkg --initrd kernel_image

Migliorata la gestione del kernel modificando il Makefile, si può fare altrettanto per il sistema di
gestione dei pacchetti, apt: basta specificare la versione del pacchetto contenente il kernel
aggiungendo l'opzione --revision=[versione] a make-kpkg scrivendo ciò che si preferisce; buona logica
è quella di usare la stessa stringa usata per EXTRAVERSION.
Includere il campo revision permette di avere, sempre a titolo esemplificativo, due pacchetti dal
nome kernel-image-2.6.17-01-2.6.17-01_i386.deb e kernel-image-2.6.17-02-2.6.17-02_i386.deb; la
prima sequenza di numeri è ad uso del sistema che può identificare le immagini del kernel, la
seconda è ad uso di apt che può identificare le versioni dei pacchetti.
Si noti che, cercando di installare un pacchetto con versione inferiore ad un altro già installato,
apt segnala un warning; è quindi buona norma tenere un ordine sufficientemente rigoroso.
Completata la compilazione, all'interno della directory /usr/src si trova il file .deb (coerentemente
con gli esempi precedentemente proposti il pacchetto si chiamerà kernel-image-2.6.17-01-2.6.17-
01_i386.deb), installabile con semplice il comando

dpkg -i kernel-image-2.6.17-01-2.6.17-01_i386.deb

Ora si può riavviare e provare il nuovo kernel.

Nota 1: Il suffisso _i386 non significa che il pacchetto è ottimizzato per 386 anziché per 686 o
altro: è solo un sistema di apt per distinguere i pacchetti deb per x86 da quelli per amd64, ppc,
eccetera. L'ottimizzazione del kernel è scelta durante la configurazione, dentro il menu
“Processor type and features”.

Nota 2: i sistemi ubuntu prevedono l'utilizzo dell'Enterprise Volume Management System


(EVMS), ignorare ciò porta durante l'avvio un errore non fatale; le strade per evitarlo sono due:
1- Scaricare il pacchetto evms da evms.sourceforge.net e applicare le due patch presenti
all'interno delle sottocartelle kernel/2.6;
2- Installare bum o sysv-rc-conf e disabilitare l'avvio di evms per poter utilizzare un qualsiasi
kernel vanilla senza che il sistema dia errori.

Nota 3: oltre a kernel_image si possono specificare altri parametri opzionali: per esempio il
parametro kernel_headers crea un pacchetto con gli headers del kernel, mentre modules_image crea
un pacchetto con i cosiddetti “restricted modules”: per chi, in possesso di una scheda grafica
nvidia, volesse installare i driver forniti dai repository insieme al kernel può usare il comando

sudo apt-get install nvidia-kernel-source

e aggiungere al comando make-kpkg l'opzione modules_image: all'interno di /usr/src si troverà un


ulteriore pacchetto dal nome simile a nvidia-kernel-2.6.17-01_1.0.8178-0ubuntu3-2.6.17-
01_i386.deb

Comunque: compilare installare gli headers è utile principalmente quando si ha bisogno di


compilare a mano software “di sistema”: a meno di situazioni molto particolari è perfettamente
sicuro usare i pacchetti forniti nei repository rendendo pressoché inutili gli headers del kernel.

Il capitolo appena descritto si può trovare nella versione originale su Kernel_Compilation_Dapper


in lingua inglese.

9.2.Slackware
Il team di sviluppo di Slackware non applica alcuna patch al kernel che distribuisce, quindi si può
usare il semplice kernel vanilla; di questo kernel sono disponibili delle versioni già precompilate.
Quando si vanno ad utilizzare i kernel precompilati è necessario installare sul proprio sistema
almeno 3 pacchetti (da qui in avanti pkg): kernel-generic-Vkernel, kernel-modules-Vkernel,
mkinitrd. Il primo pkg contiene l'immagine del kernel, il secondo i moduli e il terzo il programma
mkintrd utile alla creazione di un RAMDISK iniziale (initrd).
I pkg possono essere cercati e scaricati tramite swaret o utilizzando il package search messo a
disposizione da slackware.it. Dalle ricerche effettuate con questi strumenti si trovano anche i pkg
kernel-source-Vkernel e kernel-headers-Vkernel: il primo occorre nel caso in cui si voglia
ricompilare il kernel, il secondo contiene invece gli header utili se si vogliono compilare
programmi partendo dal codice sorgente.
Una volta scaricati i pkg vanno installati tramite il comando installpkg lanciato da root:

installpkg kernel-generic-Vkernel-i486-build.tgz
installpkg kernel-modules-Vkernel-i486-build.tgz
installpkg mkinitrd-versione-i486-build.tgz

Nella dir /boot si trovano ora i file vmlinuz-generic-Vkernel (l'immagine del kernel), System.map-
generic-Vkernel e config-generic-Vkernel (il file di configurazione che è stato utilizzato per la
compilazione del kernel). Nella dir /lib/modules/Vkernel invece si trovano i moduli necessari al
funzionamento del nuovo kernel.
I kernel di slackware sono compilati in modo da avere inseriti come moduli i filesystem (FS) EXT3
e REISERFS quindi se si usa uno di questi FS per la partizione di root è necessario creare un file
di initrd. Per far questo occorre eseguire come root i comandi

cd /boot/
mkinitrd -c -k Vkernel -m jbd:ext3 -f ext3 -r /dev/partizione_root (se si usa ext3)
mkinitrd -c -k Vkernel -m reiserfs (se si usa reiserfs)

Per maggiori informazioni sull'uso di mkinitrd vedere il file /boot/README.initrd e il man di


mkinitrd (man mkinitrd).
Il precedente comando crea il file initrd.gz che è proprio il ramdisk.
Il prossimo passo da seguire è quello di andare a modificare il file di configurazione del boot
loader come spiegato nel capitolo 4 (I passi da seguire).
Se si ha la necessità di utilizzare il ramdisk è necessario inserire all'interno del file di
configurazione la direttiva initrd: in riferimento all'esempio riportato nel capitolo 4 bisogna
inserire qualcosa del tipo

image = /boot/vmlinuz-2.6.X
root = /dev/hda5
label = 2.6.X
initrd = /boot/initrd.gz
read-only

se si usa lilo, mentre se si usa grub qualcosa di simile a

title 2.6.X
root (hd0,4)
kernel /boot/vmlinuz-2.6.X root=/dev/hda5 ro
initrd (hd0,4)/boot/initrd.gz

Ora non resta che riavviare e godersi il nuovo kernel.


Nel caso si voglia procedere alla ricompilazione è necessario installare il pkg kernel-source-
Vkernel e seguire i passi spiegati nei precedenti capitoli ed in particolare nel capitolo 7
(Particolari opzioni).

10.Conclusioni
Come si può notare la compilazione del kernel non è molto complicata, si spera che con la lettura
di questa piccola guida le idee confuse al riguardo siano diventate più chiare, chiaramente non ci
si deve abbattere se dopo la prima compilazione il nuovo kernel non funziona! Si riprovi anche
diverse volte e si vedrà che alla fine i risultati arriveranno.
Il capito 9 (Kernel e distribuzioni) è in continua espansione e a tale scopo si ricercano
collaboratori che vogliano scrivere il modo di gestire il kernel della propria distribuzione in modo
da renderlo il più completo possibile.
Per informazioni potete contattarmi al mio indirizzo email o postare sul forum di
spaghettilinux.org.
11.Ringraziamenti
Per la stesura di questa guida mi sono basato oltre che sulle esperienze personali anche su
alcune guide e riferimenti trovati sparsi per la rete in particolare slacky.it, NuvoLunix, sulla
mailing list di spaghettilinux.org e sul forum di LinuxPro.
Un ringraziamento particolare va a Stefano Giacometti (aka Nello email) e a Tommaso Pasini
(aka tommi email) che con i loro suggerimenti e le loro correzioni hanno reso la guida più
leggibile.
La stesura del capito 9.1 (Debian, Ubuntu e figlie) è stata effettuata da Tommaso Pasini che
ringrazio ancora una volta per la sua collaborazione.
12.ChangeLog
16-10-05 Prima stesura con sezioni
1.Introduzione
2.Cosa è il kernel ?
3.Cosa occorre per la compilazione ?
4.Passi da seguire
5.Descrizione delle varie sezioni di configurazione (versione 0.1)
6.Conclusioni
18-10-05 Aggiunta licenza FDL e relativa sezione
7.Licenza per Documentazione Libera GNU (versione 0.5)
20-10-05 Aggiunta nella sezione “Cosa è il kernel?” una breve storia sulla nascita di Linux e
una piccola spiegazione sul numero di versioni. (versione 0.6)
21-10-05 Aggiunte le sezioni
8.Particolari opzioni
9.Patch
Correzione di alcuni errori e imprecisioni.
Aggiunto Indice. (versione 0.7) 1° pubblicazione
27-10-05 Aggiunto creazione link kernel nella sezione “Passi da seguire”
Aggiunti comandi cp kernel e System.map.
Ampliata sezione “Patch” con le patch dei maintainer del kernel. (versione 0.7.5)
31-10-05 Rivista la sezione “Cosa è il kernel?” nella parte riguardante la storia
Aggiunta sezione “Programmi utili” (versione 0.7.9)
01-10-05 Effettuata qualche aggiunta in “I passi da seguire”
Effettuata qualche aggiunta in “Programmi utili”
Revisione della grammatica e dell'ortografia (versione 0.8.0)
02-10-05 Effettuata modifica sezione “Programmi utili”
Corretti alcuni errori orografici (versione 0.8.1)
05-10-05 Inserita sezione “Ringraziamenti”
Corretta forma sintattica
Qualche aggiunta nella sezione “Particolari opzioni”(versione 0.8.2)
14-05-06 Inserita qualche info sul supporto alle lingue nativo (versione 0.8.3a)
21-05-06 Cominciata modifica sezione 5(moduli).
Descrizione Code maturity level options,
General setup
Loadable module support
Block layer
Processor type and features
Power management options (ACPI, APM)
28-05-06 Descrizione sezioni
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
Executable file formats
Networking
30-05-06 Finita descrizione
Device Drivers
e modifica
File systems (versione 0.8.3)
27-07-06 Rivisita generale
Aggiunta di qualche informazione(molto poche per la verità)(versione 0.8.4a)
17-09-06 Rivisita generale e correzione di errori ortografici e di forma
Inseriti alcuni hyperlink
Modificate sezioni Introduzione, Conclusioni e Ringraziamenti
Creato capito dedicato alla gestione del kernel sulle varie distribuzioni
Inserita gestione del kernel su Debian-based e Ubuntu
Inserita gestione su Slackware (versione 0.9.0a)
18-09-06 Ulteriore revisione
Modifiche e “limature” in tutto il testo (versione 0.9.0b [TOMMI])
19-09-06 Rilettura e ultime correzioni, almeno per il momento (versione 0.9.0c)
20-09-06 Pubblicazione della nuova versione (versione 0.9.0)
13.Licenza per Documentazione Libera GNU
Versione 1.1, Marzo 2000
Copyright (C) 2000 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Chiunque può copiare e distribuire copie letterali di questo documento
di licenza, ma non ne è permessa la modifica.

0.PREAMBOLO

Lo scopo di questa licenza è di rendere un manuale, un testo o altri documenti scritti "liberi" nel
senso di assicurare a tutti la libertà effettiva di copiarli e redistribuirli, con o senza modifiche, a
fini di lucro o no. In secondo luogo questa licenza prevede per autori ed editori il modo per
ottenere il giusto riconoscimento del proprio lavoro, preservandoli dall'essere considerati
responsabili per modifiche apportate da altri.
Questa licenza è un "copyleft": ciò vuol dire che i lavori che derivano dal documento originale
devono essere ugualmente liberi. è il complemento alla Licenza Pubblica Generale GNU, che è
una licenza di tipo "copyleft" pensata per il software libero.
Abbiamo progettato questa licenza al fine di applicarla alla documentazione del software libero,
perché il software libero ha bisogno di documentazione libera: un programma libero dovrebbe
accompagnarsi a manuali che forniscano la stessa libertà del software. Ma questa licenza non è
limitata alla documentazione del software; può essere utilizzata per ogni testo che tratti un
qualsiasi argomento e al di là dell'avvenuta pubblicazione cartacea. Raccomandiamo
principalmente questa licenza per opere che abbiano fini didattici o per manuali di consultazione.

1.APPLICABILITÀ E DEFINIZIONI

Questa licenza si applica a qualsiasi manuale o altra opera che contenga una nota messa dal
detentore del copyright che dica che si può distribuire nei termini di questa licenza. Con
"Documento", in seguito ci si riferisce a qualsiasi manuale o opera. Ogni fruitore è un
destinatario della licenza e viene indicato con "voi".
Una "versione modificata" di un documento è ogni opera contenente il documento stesso o parte
di esso, sia riprodotto alla lettera che con modifiche, oppure traduzioni in un'altra lingua.
Una "sezione secondaria" è un'appendice cui si fa riferimento o una premessa del documento e
riguarda esclusivamente il rapporto dell'editore o dell'autore del documento con l'argomento
generale del documento stesso (o argomenti affini) e non contiene nulla che possa essere
compreso nell'argomento principale. (Per esempio, se il documento è in parte un manuale di
matematica, una sezione secondaria non può contenere spiegazioni di matematica). Il rapporto
con l'argomento può essere un tema collegato storicamente con il soggetto principale o con
soggetti affini, o essere costituito da argomentazioni legali, commerciali, filosofiche, etiche o
politiche pertinenti.
Le "sezioni non modificabili" sono alcune sezioni secondarie i cui titoli sono esplicitamente
dichiarati essere sezioni non modificabili, nella nota che indica che il documento è realizzato
sotto questa licenza.
I "testi copertina" sono dei brevi brani di testo che sono elencati nella nota che indica che il
documento è realizzato sotto questa licenza.
Una copia "trasparente" del documento indica una copia leggibile da un calcolatore, codificata in
un formato le cui specifiche sono disponibili pubblicamente, i cui contenuti possono essere visti e
modificati direttamente, ora e in futuro, con generici editor di testi o (per immagini composte da
pixel) con generici editor di immagini o (per i disegni) con qualche editor di disegni ampiamente
diffuso, e la copia deve essere adatta al trattamento per la formattazione o per la conversione in
una varietà di formati atti alla successiva formattazione. Una copia fatta in un altro formato di
file trasparente il cui markup è stato progettato per intralciare o scoraggiare modifiche future da
parte dei lettori non è trasparente. Una copia che non è trasparente è "opaca".
Esempi di formati adatti per copie trasparenti sono l'ASCII puro senza markup, il formato di input
per Texinfo, il formato di input per LaTex, SGML o XML accoppiati ad una DTD pubblica e
disponibile, e semplice HTML conforme agli standard e progettato per essere modificato
manualmente. Formati opachi sono PostScript, PDF, formati proprietari che possono essere letti
e modificati solo con word processor proprietari, SGML o XML per cui non è in genere
disponibile la DTD o gli strumenti per il trattamento, e HTML generato automaticamente da
qualche word processor per il solo output.
La "pagina del titolo" di un libro stampato indica la pagina del titolo stessa, più qualche pagina
seguente per quanto necessario a contenere in modo leggibile, il materiale che la licenza prevede
che compaia nella pagina del titolo. Per opere in formati in cui non sia contemplata
esplicitamente la pagina del titolo, con "pagina del titolo" si intende il testo prossimo al titolo
dell'opera, precedente l'inizio del corpo del testo.

2.COPIE LETTERALI

Si può copiare e distribuire il documento con l'ausilio di qualsiasi mezzo, per fini di lucro e non,
fornendo per tutte le copie questa licenza, le note sul copyright e l'avviso che questa licenza si
applica al documento, e che non si aggiungono altre condizioni al di fuori di quelle della licenza
stessa. Non si possono usare misure tecniche per impedire o controllare la lettura o la
produzione di copie successive alle copie che si producono o distribuiscono. Però si possono
ricavare compensi per le copie fornite. Se si distribuiscono un numero sufficiente di copie si
devono seguire anche le condizioni della sezione 3.
Si possono anche prestare copie e con le stesse condizioni sopra menzionate possono essere
utilizzate in pubblico.

3.COPIARE IN NOTEVOLI QUANTITÀ

Se si pubblicano a mezzo stampa più di 100 copie del documento, e la nota della licenza indica
che esistono uno o più testi copertina, si devono includere nelle copie, in modo chiaro e leggibile,
tutti i testi copertina indicati: il testo della prima di copertina in prima di copertina e il testo di
quarta di copertina in quarta di copertina. Ambedue devono identificare l'editore che pubblica il
documento. La prima di copertina deve presentare il titolo completo con tutte le parole che lo
compongono egualmente visibili ed evidenti. Si può aggiungere altro materiale alle copertine. Il
copiare con modifiche limitate alle sole copertine, purché si preservino il titolo e le altre
condizioni viste in precedenza, è considerato alla stregua di copiare alla lettera.
Se il testo richiesto per le copertine è troppo voluminoso per essere riprodotto in modo leggibile,
se ne può mettere una prima parte per quanto ragionevolmente può stare in copertina, e
continuare nelle pagine immediatamente seguenti.
Se si pubblicano o distribuiscono copie opache del documento in numero superiore a 100, si deve
anche includere una copia trasparente leggibile da un calcolatore per ogni copia o menzionare
per ogni copia opaca un indirizzo di una rete di calcolatori pubblicamente accessibile in cui vi sia
una copia trasparente completa del documento, spogliato di materiale aggiuntivo, e a cui si possa
accedere anonimamente e gratuitamente per scaricare il documento usando i protocolli standard
e pubblici generalmente usati. Se si adotta l'ultima opzione, si deve prestare la giusta attenzione,
nel momento in cui si inizia la distribuzione in quantità elevata di copie opache, ad assicurarsi
che la copia trasparente rimanga accessibile all'indirizzo stabilito fino ad almeno un anno di
distanza dall'ultima distribuzione (direttamente o attraverso rivenditori) di quell'edizione al
pubblico.
è caldamente consigliato, benché non obbligatorio, contattare l'autore del documento prima di
distribuirne un numero considerevole di copie, per metterlo in grado di fornire una versione
aggiornata del documento.

4.MODIFICHE

Si possono copiare e distribuire versioni modificate del documento rispettando le condizioni delle
precedenti sezioni 2 e 3, purché la versione modificata sia realizzata seguendo scrupolosamente
questa stessa licenza, con la versione modificata che svolga il ruolo del "documento", così da
estendere la licenza sulla distribuzione e la modifica a chiunque ne possieda una copia. Inoltre
nelle versioni modificate si deve:
A. Usare nella pagina del titolo (e nelle copertine se ce ne sono) un titolo diverso da quello del
documento, e da quelli di versioni precedenti (che devono essere elencati nella sezione storia del
documento ove presenti). Si può usare lo stesso titolo di una versione precedente se l'editore di
quella versione originale ne ha dato il permesso.
B. Elencare nella pagina del titolo, come autori, una o più persone o gruppi responsabili in
qualità di autori delle modifiche nella versione modificata, insieme ad almeno cinque fra i
principali autori del documento (tutti gli autori principali se sono meno di cinque).
C. Dichiarare nella pagina del titolo il nome dell'editore della versione modificata in qualità di
editore.
D. Conservare tutte le note sul copyright del documento originale.
E. Aggiungere un'appropriata licenza per le modifiche di seguito alle altre licenze sui copyright.
F. Includere immediatamente dopo la nota di copyright, un avviso di licenza che dia
pubblicamente il permesso di usare la versione modificata nei termini di questa licenza, nella
forma mostrata nell'addendum alla fine di questo testo.
G. Preservare in questo avviso di licenza l'intera lista di sezioni non modificabili e testi copertina
richieste come previsto dalla licenza del documento.
H. Includere una copia non modificata di questa licenza.
I. Conservare la sezione intitolata "Storia", e il suo titolo, e aggiungere a questa un elemento che
riporti al minimo il titolo, l'anno, i nuovi autori, e gli editori della versione modificata come
figurano nella pagina del titolo. Se non ci sono sezioni intitolate "Storia" nel documento, createne
una che riporti il titolo, gli autori, gli editori del documento come figurano nella pagina del titolo,
quindi aggiungete un elemento che descriva la versione modificata come detto in precedenza.
J. Conservare l'indirizzo in rete riportato nel documento, se c'è, al fine del pubblico accesso ad
una copia trasparente, e possibilmente l'indirizzo in rete per le precedenti versioni su cui ci si è
basati. Questi possono essere collocati nella sezione "Storia". Si può omettere un indirizzo di rete
per un'opera pubblicata almeno quattro anni prima del documento stesso, o se l'originario
editore della versione cui ci si riferisce ne dà il permesso.
K. In ogni sezione di "Ringraziamenti" o "Dediche", si conservino il titolo, il senso, il tono della
sezione stessa.
L. Si conservino inalterate le sezioni non modificabili del documento, nei propri testi e nei propri
titoli. I numeri della sezione o equivalenti non sono considerati parte del titolo della sezione.
M. Si cancelli ogni sezione intitolata "Riconoscimenti". Solo questa sezione può non essere
inclusa nella versione modificata.
N. Non si modifichi il titolo di sezioni esistenti come "miglioria" o per creare confusione con i
titoli di sezioni non modificabili.
Se la versione modificata comprende nuove sezioni di primaria importanza o appendici che
ricadono in "sezioni secondarie", e non contengono materiale copiato dal documento, si ha facoltà
di rendere non modificabili quante sezioni si voglia. Per fare ciò si aggiunga il loro titolo alla lista
delle sezioni immutabili nella nota di copyright della versione modificata. Questi titoli devono
essere diversi dai titoli di ogni altra sezione.
Si può aggiungere una sezione intitolata "Riconoscimenti", a patto che non contenga altro che le
approvazioni alla versione modificata prodotte da vari soggetti--per esempio, affermazioni di
revisione o che il testo è stato approvato da una organizzazione come la definizione normativa di
uno standard.
Si può aggiungere un brano fino a cinque parole come Testo Copertina, e un brano fino a 25
parole come Testo di Retro Copertina, alla fine dell'elenco dei Testi Copertina nella versione
modificata. Solamente un brano del Testo Copertina e uno del Testo di Retro Copertina possono
essere aggiunti (anche con adattamenti) da ciascuna persona o organizzazione. Se il documento
include già un testo copertina per la stessa copertina, precedentemente aggiunto o adattato da
voi o dalla stessa organizzazione nel nome della quale si agisce, non se ne può aggiungere un
altro, ma si può rimpiazzare il vecchio ottenendo l'esplicita autorizzazione dall'editore precedente
che aveva aggiunto il testo copertina.
L'autore/i e l'editore/i del "documento" non ottengono da questa licenza il permesso di usare i
propri nomi per pubblicizzare la versione modificata o rivendicare l'approvazione di ogni versione
modificata.

5.UNIONE DI DOCUMENTI
Si può unire il documento con altri realizzati sotto questa licenza, seguendo i termini definiti
nella precedente sezione 4 per le versioni modificate, a patto che si includa l'insieme di tutte le
Sezioni Invarianti di tutti i documenti originali, senza modifiche, e si elenchino tutte come Sezioni
Invarianti della sintesi di documenti nella licenza della stessa.
Nella sintesi è necessaria una sola copia di questa licenza, e multiple sezioni invarianti possono
essere rimpiazzate da una singola copia se identiche. Se ci sono multiple Sezioni Invarianti con lo
stesso nome ma contenuti differenti, si renda unico il titolo di ciascuna sezione aggiungendovi
alla fine e fra parentesi, il nome dell'autore o editore della sezione, se noti, o altrimenti un
numero distintivo. Si facciano gli stessi aggiustamenti ai titoli delle sezioni nell'elenco delle
Sezioni Invarianti nella nota di copiright della sintesi.
Nella sintesi si devono unire le varie sezioni intitolate "storia" nei vari documenti originali di
partenza per formare una unica sezione intitolata "storia"; allo stesso modo si unisca ogni sezione
intitolata "Ringraziamenti", e ogni sezione intitolata "Dediche". Si devono eliminare tutte le
sezioni intitolate "Riconoscimenti".

6.RACCOLTE DI DOCUMENTI

Si può produrre una raccolta che consista del documento e di altri realizzati sotto questa licenza;
e rimpiazzare le singole copie di questa licenza nei vari documenti con una sola inclusa nella
raccolta, solamente se si seguono le regole fissate da questa licenza per le copie alla lettera come
se si applicassero a ciascun documento.
Si può estrarre un singolo documento da una raccolta e distribuirlo individualmente sotto questa
licenza, solo se si inserisce una copia di questa licenza nel documento estratto e se si seguono
tutte le altre regole fissate da questa licenza per le copie alla lettera del documento.

7.RACCOGLIERE INSIEME A LAVORI INDIPENDENTI

Una raccolta del documento o sue derivazioni con altri documenti o lavori separati o
indipendenti, all'interno di o a formare un archivio o un supporto per la distribuzione, non è una
"versione modificata" del documento nella sua interezza, se non ci sono copiright per l'intera
raccolta. Ciascuna raccolta si chiama allora "aggregato" e questa licenza non si applica agli altri
lavori contenuti in essa che ne sono parte, per il solo fatto di essere raccolti insieme, qualora non
siano però loro stessi lavori derivati dal documento.
Se le esigenze del Testo Copertina della sezione 3 sono applicabili a queste copie del documento
allora, se il documento è inferiore ad un quarto dell'intero aggregato i Testi Copertina del
documento possono essere piazzati in copertine che delimitano solo il documento all'interno
dell'aggregato. Altrimenti devono apparire nella copertina dell'intero aggregato.

8.TRADUZIONI

La traduzione è considerata un tipo di modifica, e di conseguenza si possono distribuire


traduzioni del documento seguendo i termini della sezione 4. Rimpiazzare sezioni non
modificabili con traduzioni richiede un particolare permesso da parte dei detentori del diritto
d'autore, ma si possono includere traduzioni di una o più sezioni non modificabili in aggiunta alle
versioni originali di queste sezioni immutabili. Si può fornire una traduzione della presente
licenza a patto che si includa anche l'originale versione inglese di questa licenza. In caso di
discordanza fra la traduzione e l'originale inglese di questa licenza la versione originale inglese
prevale sempre.

9.TERMINI

Non si può applicare un'altra licenza al documento, copiarlo, modificarlo, o distribuirlo al di fuori
dei termini espressamente previsti da questa licenza. Ogni altro tentativo di applicare un'altra
licenza al documento, copiarlo, modificarlo, o distribuirlo è deprecato e pone fine
automaticamente ai diritti previsti da questa licenza. Comunque, per quanti abbiano ricevuto
copie o abbiano diritti coperti da questa licenza, essi non ne cessano se si rimane perfettamente
coerenti con quanto previsto dalla stessa.
10.REVISIONI FUTURE DI QUESTA LICENZA

La Free Software Foundation può pubblicare nuove, rivedute versioni della Licenza per
Documentazione Libera GNU volta per volta. Qualche nuova versione potrebbe essere simile
nello spirito alla versione attuale ma differire in dettagli per affrontare nuovi problemi e concetti.
Si veda http://www.gnu.org/copyleft.
Ad ogni versione della licenza viene dato un numero che distingue la versione stessa. Se il
documento specifica che si riferisce ad una versione particolare della licenza contraddistinta dal
numero o "ogni versione successiva", si ha la possibilità di seguire termini e condizioni sia della
versione specificata che di ogni versione successiva pubblicata (non come bozza) dalla Free
Software Foundation. Se il documento non specifica un numero di versione particolare di questa
licenza, si può scegliere ogni versione pubblicata (non come bozza) dalla Free Software
Foundation.

Come usare questa licenza per i vostri documenti

Per applicare questa licenza ad un documento che si è scritto, si includa una copia della licenza
nel documento e si inserisca il seguente avviso subito dopo la pagina del titolo:
Copyright (c) ANNO VOSTRO NOME.
è garantito il permesso di copiare, distribuire e/o modificare
questo documento seguendo i termini della Licenza per
Documentazione Libera GNU, Versione 1.1 o ogni versione
successiva pubblicata dalla Free Software Foundation; con le
Sezioni Non Modificabili ELENCARNE I TITOLI, con i Testi
Copertina ELENCO, e con i Testi di Retro Copertina ELENCO. Una
copia della licenza è acclusa nella sezione intitolata "Licenza
per Documentazione Libera GNU".

Se non ci sono Sezioni non Modificabili, si scriva "senza Sezioni non Modificabili" invece di dire
quali sono non modificabili. Se non c'è Testo Copertina, si scriva "nessun Testo Copertina" invece
di "il testo Copertina è ELENCO"; e allo stesso modo si operi per il Testo di Retro Copertina.
Se il vostro documento contiene esempi non banali di programma in codice sorgente si
raccomanda di realizzare gli esempi contemporaneamente applicandovi anche una licenza di
software libero di vostra scelta, come ad esempio la Licenza Pubblica Generale GNU, al fine di
permetterne l'uso come software libero.