LKN: Ricette per Configurare il Kernel: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
(nuova categoria)
 
(27 versioni intermedie di 7 utenti non mostrate)
Riga 1: Riga 1:
{{Debianized}}
{{Template:LKN}}
__TOC__


==Introduzione==
Il [[LKN:_Personalizzare_un_Kernel|capitolo precedente]] ci ha insegnato i meccanismi per la riconfigurazione del kernel; in questo capitolo arriva la parte interessante, in cui si possono trovare tutte le modifiche più comuni che gli utenti hanno bisogno di apportare ai loro kernel, con le istruzioni specifiche per effettuarle.
In Debian il kernel pu� essere ricompilato con il metodo standard (valido con tutte le distribuzioni) oppure nel cosiddetto ''Debian-way'' (traduzione: ''metodo Debian'' o ''alla Debian'').


Questa guida illustrer� il metodo Debian di compilare il kernel. Questo metodo consiste nel creare un pacchetto Debian del kernel compilato per una sua facile installazione/disinstallazione.
== '''Dischi''' ==


==Installazione Pacchetti==
Il kernel Linux supporta una grande varietà di differenti tipi di disco. Questa sezione mostra come configurare il kernel in modo tale che supporti la maggior parte dei modelli più comuni di controller di disco.


Avremo innanzitutto bisogno di alcuni pacchetti di base per compilare e pacchettizzare un kernel:
===Dispositivi USB===
 
Per utilizzare un dispositivo di archiviazione USB (come quelli chiamati comunemente memorie "flash" USB, oppure dischi esterni USB) il supporto USB deve prima funzionare correttamente. Fare riferimento alla ricetta nella sezione chiamata [[USB]] per sapere come fare.
 
Un dispositivo di archiviazione USB può essere identificato utilizzando il programma ''lsusb''. Se la sequenza di comandi che segue produce i risultati mostrati, nel sistema è presente un dispositivo di archiviazione USB:
 
<pre>
$/usr/sbin/lsusb -v | grep Storage
      bInterfaceClass        8 Mass Storage
</pre>
 
Abilitarla nel modo seguente:
 
1. Un dispositivo di archiviazione USB è in realtà undispositivo USB SCSI che comunica su un collegamento USB. Per questo motivo, deve essere abilitato il sottosistema SCSI:
 
<pre>
Device Drivers
    SCSI Device Support
        [*] SCSI Device Support
</pre>
 
2. Anche nel sistema SCSI, si deve abilitare il "SCSI disk support" affinchè il dispositivo venga montato correttamente:
 
<pre>
Device Drivers
    SCSI Device Support
        [*] SCSI disk support
</pre>
 
3. Abilitare il supporto di archiviazione USB:
 
<pre>
Device Drivers
  USB Support
  [M] USB Mass Storage support
</pre>
 
Nelle pagine che seguono verranno illustrate specifici dispostivi di archiviazione USB per i quali si rende necessaria una configurazione differente, in quanto non seguono gli standard USB e richiedono un codice speciale. Se si possiede uno di questi dispositivi, è necessario abilitare il supporto per essi.
 
===Dischi IDE===
 
I dischi IDE sono i più comuni dischi per PC. Il dispositivo che abilita tali dischi affinchè essi lavorino correttamente è un controller di disco IDE. Per determinare se si abbia un controller di disco IDE sul proprio sistema, usare il comando ''lspci'' nel seguente modo:
 
<pre>
$/usr/sbin/lspci | grep IDE
00:1f.1 IDE interface: Intel Corporation 82801EB/ER (ICH5/ICH5R) IDE
Controller (rev 02)
00:1f.2IDEinterface:IntelCorporation82801EB(ICH5)SATAController(rev
02)
</pre>
 
Tenete presente che il risultato del comando ''lspci'' probabilmente non sarà identico a quello mostrato sopra. Ciò che importa invece è che il comando mostri un qualunque controller IDE (il primo dispositivo nel precedente esempio). Se si riscontrano solo controller SATA, vedere la sezione successiva 'Serial ATA (SATA)'.
 
Ora seguiamo i seguenti passi:
 
1. Abilitare il supporto PCI per il kernel:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
</pre>
 
2. Abilitare il sottosistema IDE e il supporto IDE:
 
<pre>
Device Drivers
    [*] ATA/ATAPI/MFM/RLL support
    [*]  Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
</pre>
 
3. Nel sistema ATA, occorre abilitare lo specifico tipo di controller IDE che si possiede, al fine di farlo funzionare correttamente. Per avere un buon backup nel caso si selezioni il tipo errato, selezionare la voce controller IDE 'generico':
 
<pre>
Device Drivers
    ATA/ATAPI/MFM/RLL support
        [*]    generic/default IDE chipset support
</pre>
 
4. Abilitare i differenti controller PCI IDE:
 
<pre>
Device Drivers
    ATA/ATAPI/MFM/RLL support
        [*]    PCI IDE chipset support
</pre>
 
Ciò porta all'apertura di un lungo sottomenu di differenti tipi di controller IDE. Selezionare il proprio in base al nome del dispositivo mostrato col comando ''lspci''
 
===Serial ATA (SATA)===
 
SATA è un tipo di controller di disco che rappresenta il successore del controller di disco IDE. Per determinare se si possiede sul sistema un controller di disco SATA, lanciare il seguente comando:
 
<pre>
$/usr/sbin/lspci | grep SATA
00:1f.2IDEinterface:IntelCorporation82801EB(ICH5)SATAController(rev
02)
</pre>
 
Tenere presente che il risultato del comando probabilmente non sarà identico. Ciò che importa è che il comando mostri un qualunque dispositivo SATA. I dischi SATA usano una libreria kernel chiamata ''libata'' che si occupa della maggior parte delle funzionalità di SATA. ''That library uses the SCSI layer to talk to the block layer, so several different kernel options need to be enabled in order for SATA disks to work properly.''
 
1. Abilitare il supporto PCI per il kernel:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
</pre>
 
2. Abilitare il sottosistema SCSI:
 
<pre>
Device Drivers
    SCSI Device Support
        [*] SCSI Device Support
</pre>
 
3.  Anche nel sistema SCSI, deve essere abilitata la voce "SCSI disk support" affinchè il dispositivo funzioni correttamente:
 
<pre>
Device Drivers
    SCSI Device Support
        [*] SCSI disk support
</pre>
 
4. Le opzioni SATA sono sotto la sezione "SCSI low-level drivers":
 
<pre>
Device Drivers
    SCSI Device Support
        SCSI low-level drivers
            [*] Serial ATA (SATA) support
</pre>
 
5. In questa sezione, abilitare il particolare controller SATA che si possiede. Vedere l'output del comando ''lspci'' precedentemente menzionato per avere una lista dei tipi di controller SATA presenti sul proprio sistema. Per esempio, la maggior parte delle schede madri INTEL richiedono il driver PIIX/ICH SATA (come mostrato nel precedente esempio):
 
<pre>
Device Drivers
    SCSI Device Support
        SCSI low-level drivers
            [*] Serial ATA (SATA) support
            [*]  Intel PIIX/ICH SATA support
</pre>
 
== '''Masterizzare un CD-ROM''' ==
 
Masterizzare un CD-ROM è davvero semplice in Linux. Se il kernel che si possiede permette la lettura di un CD-ROM, allora ne permetterà anche la masterizzazione.
Ci sono due metodi per abilitare il supporto CD-ROM in Linux, uno per i lettori IDE ed uno per i lettori SCSI e SATA
 
===Lettori CD-ROM IDE===
 
I lettori CD-ROM IDE sono gestiti dallo stesso controller IDE del disco principale. Assicurarsi che il controller IDE sia correttamente supportato come descritto nella sezione ''Dischi IDE''. Se lo è, allora occorre selezionare solo un'altra voce nella procedura di configurazione:
 
<pre>
Device Drivers
    [*] ATA/ATAPI/MFM/RLL support
    [*]  Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
    [M]    Include IDE/ATAPI CDROM support
</pre>
 
===Lettori CD-ROM SCSI e SATA===
 
I lettori CD-ROM SCSI e SATA sono gestiti dallo stesso controller del disco principale. Assicurarsi che il controller SCSI o SATA sia correttamente supportato. Per i dischi SATA, vedere la precedente sezione ''Serial ATA (SATA).'' 
Per supportare lettori CD-ROM SCSI o SATA, il driver CD-ROM SCSI deve essere abilitato:
 
<pre>
Device Drivers
    SCSI Device Support
        [*] SCSI CDROM support
</pre>
 
Una volta che è stato abilitato, il lettore CD-ROM SCSI o SATA dovrebbe funzionare correttamente.
 
== '''Dispositivi''' ==
 
Linux supporta un grande numero di differenti tipi di dispositivi (più di qualunque altro sistema operativo). Questa sezione descrive come abilitare i dispositivi più comuni.
 
===USB===
 
Linux supporta molti tipi di dispositivi USB. Per abilitare il supporto USB, bisogna innanzitutto abilitare il supporto per il controller USB, che gestisce il collegamento USB sulla macchina. Per determinare se la propria macchina possiede un controller USB, e di quale tipo è, lanciare il seguente comando:
 
<pre>
$/usr/sbin/lspci | grep USB
00:1d.0 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI
Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI
Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI
Controller #3 (rev 02)
00:1d.3 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI
Controller #4 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB2 EHCI
Controller (rev 02)
</pre>
 
Notare che probabilmente l'output del comando non sarà identico a quello mostrato sopra. Ciò che importa è che il comando mostri un qualche controller USB.
 
1. Abilitare il supporto PCI per il kernel:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
</pre>
 
2. Abilitare il supporto USB per il kernel: 
 
<pre>
Device Drivers
    USB Support
        [M] Support for Host-side USB
</pre>
 
3. Abilitare lo specifico controller host USB per la propria macchina (per maggior sicurezza abilitarli tutti se non si conosce con certezza quale si possiede):
 
<pre>
Device Drivers
    USB Support
    ---  USB Host Controller Drivers
    [M]  EHCI HCD (USB 2.0) support
    [M]  OHCI HCD support
    [M]  UHCI HCD (most Intel and VIA) support
</pre>
 
4. Bisogna abilitare i driver anche per gli specifici dispositivi individuali USB. Gran parte di essi si trovano nella sezione driver USB principale:
 
<pre>
Device Drivers
    USB Support
</pre>
 
Ma alcuni dispositivi, come Video USB, DVB e Audio, sono elencati nella sezione che gestisce tutti questi tipi di dispositivi. Per esempio, il driver audio USB può essere trovato nel menu audio:
 
<pre>
Device drivers
    Sound
        [*] Sound card support
            [*] Advanced Linux Sound Architecture
                USB Devices
                    [M] USB Audio/MIDI driver
</pre>
 
Per inserire dispositivi di archiviazione USB (USB flash), vedere la sezione chiamata "Archiviazione USB", all'inizio di questo capitolo.
 
===IEEE 1394 (FireWire)===
 
IEEE 1394 è comunemente conosciuta col nome FireWire, il nome con il quale fu pubblicizzata dalla Apple Computer. IEEE 1394 è un bus ad alta velocità che connette dispositivi esterni, come i dispositivi USB.
 
Per determinare se sulla propria macchina sia presente un controller FireWire e di quale tipo sia, lanciare il seguente comando:
 
<pre>
$/usr/sbin/lspci | grep FireWire
06:0c.0 FireWire (IEEE 1394): Texas Instruments TSB43AB22/A IEEE-1394a-2000
Controller (PHY/Link)
06:0d.2 FireWire (IEEE 1394): Creative Labs SB Audigy FireWire Port (rev 04)
</pre>
 
Notare che probabilmente l'output non sarà identico; ciò che importa è che il comando mostri un qualche controller FireWire.
 
1. Abilitare il supporto PCI per il kernel:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
</pre>
 
2. Abilitare il supporto IEEE 1394 per il kernel:
 
<pre>
Device Drivers
    IEEE 1394 (FireWire) support
        [*] IEEE 1394 (FireWire) support
</pre>
 
3. Abilitare il particolare tipo di host controller FireWire che si possiede:
 
<pre>
Device Drivers
    IEEE 1394 (FireWire) support
        [*] IEEE 1394 (FireWire) support
        ---  Device Drivers
        [M]  Texas Instruments PCILynx support
        [M]  OHCI-1394 support
</pre>
 
4. Per finire, abilitare i particolari tipi di dispositivi FireWire che si possiedono:
 
<pre>
Device Drivers
    IEEE 1394 (FireWire) support
        [*] IEEE 1394 (FireWire) support
        ---  Protocol Drivers
        [M]  OHCI-1394 Video support
        [M]  SBP-2 support (Harddisks etc.)
        [ ]    Enable Phys DMA support for SBP2 (Debug)
        [M]  Ethernet over 1394
        [M]  OHCI-DV I/O support
        [M]  Raw IEEE1394 I/O support
</pre>
 
===PCI Hotplug===
 
I sistemi PCI hotplug stanno diventando sempre più popolari grazie all'uso di Express Card e laptop docking stations.
 
Per determinare se la propria macchina possieda un controller Express Card, controllare l'hardware per verificare se si può inserire una Express Card.
 
1. Abilitare il supporto PCI per il kernel:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
</pre>
 
2. Abilitare il supporto PCI hotplug per il kernel:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
    PCI Hotplug Support
        [M] Support for PCI Hotplug (EXPERIMENTAL)
</pre>
 
3. C'è un vasta scelta di differenti tipi di controller PCI hotplug. Per il supporto di gran parte dei portatili e Express Card, abilitare il controller ACPI:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
    PCI Hotplug Support
        [M] Support for PCI Hotplug (EXPERIMENTAL)
        [M]  ACPI PCI Hotplug driver
</pre>
 
4. Abilitare ance il controller PCI Express:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
    [*] PCI Express Support
    [M]  PCI Express Hotplug driver
</pre>
 
===PCMCIA/CardBus===
 
Il supporto per dispositivi PCMCIA e CardBus è fabbricato su quasi ogni portatile. In ogni caso, i portatili più recenti si stanno orientando verso il formato ExpressCard (vedere la ricetta PCI Hotplug nella sezione precedente, ''PCI Hotplug'').
 
Per determinare se sulla propria macchina si possieda un controller PCMCIA, controllare l'hardware per verificare se una card PCMCIA può essere inserita.
 
1. Abilitare il supporto PCI per il kernel:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
</pre>
 
2. Abilitare il supporto PCCARD per il kernel:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    PCCARD (PCMCIA/CardBus) support
        [M] PCCard (PCMCIA/CardBus) support
</pre>
 
3. Abilitare il supporto PCMCIA e il supporto CardBus per coprire il maggior numero di dispositivi:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    PCCARD (PCMCIA/CardBus) support
        [M] PCCard (PCMCIA/CardBus) support
        [M]  16-bit PCMCIA support
        [*]  32-bit CardBus support
</pre>
 
Abilitare il tipo di card bridge per il proprio portatile. Il più comune è il controller "yenta-like":


<pre>
<pre>
# apt-get install debhelper modutils kernel-package libncurses5-dev fakeroot
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    PCCARD (PCMCIA/CardBus) support
        [M] PCCard (PCMCIA/CardBus) support
        [M]  CardBus yenta-compatible bridge support
        [ ]  Cirrus PD6729 compatible bridge support
        [ ]  i82092 compatible bridge support
        [ ]  i82365 compatible bridge support
        [ ]  Databook TCIC host bridge support
</pre>
</pre>


Adesso installiamo i sorgenti veri e propri del kernel. Useremo i sorgenti debian che hanno tutte le patch specifiche di debian. Nel seguito prenderemo come esempio la versione 2.6.8 del kernel, sostituitela con qualsiasi altra versione vogliate usare.
===Audio (ALSA)===
 
Advanced Linux Sound Architecture (ALSA) è l'attuale sound system per il kernel Linux. Un sound system meno recente (OSS) è stato abbandonato, e quasi tutti i vecchi driver sono stati rimossi dall'albero dei sorgenti del kernel.
 
Per determinare quale tipo di sound controller sia presente sulla propria macchina, lanciare il seguente comando:


<pre>
<pre>
# apt-get install kernel-source-2.6.8
$/usr/sbin/lspci | grep -i audio
00:1f.5 Multimedia audio controller: Intel Corporation 82801EB/ER (ICH5/
ICH5R) AC'97 Audio Controller (rev 02)
06:0d.0 Multimedia audio controller: Creative Labs SB Audigy (rev 04)
</pre>
</pre>


{{Box|Nota|Dalla versione 2.6.12 in poi del kernel di linux, i pacchetti sorgenti e binari si chiamano rispettivamente <tt>linux-source-x.x.x</tt> e <tt>linux-image-x.x.x</tt> (invece di <tt>kernel-source-x.x.x</tt> e
Notare che l'output probabilmente non sarà identico; ciò che importa è che il comando mostri un qualche controllers audio.
<tt>kernel-image.x.x.x</tt>). Questo perch� in Debian sono presenti anche altri kernel diversi da linux, come hurd o freebsd. }}


Per ricompilare il kernel non � necessario essere root, anzi � sconsigliato. In debian, per policy, tutti i sorgenti contenuti in <tt>/usr/src</tt> (almeno quelli installati dai pacchetti debian) hanno come proprietario <tt>root</tt> e come gruppo proprietario <tt>src</tt>. Gli utenti del gruppo <tt>src</tt> hanno inoltre diritto di scrittura in <tt>/usr/src/*</tt>. Baster� dunque aggiungere al gruppo <tt>'''src'''</tt> l'utente che si vuole usare per la compilazione, con i seguenti comandi:
1. Abilitare il supporto base audio:


<pre>
<pre>
# adduser nome_vostro_utente src
Device Drivers
    Sound
        [M] Sound Card Support
</pre>
</pre>


{{Box|Nota|Ricordate di non usare l'utente root per ricompilare il kernel (e neanche per scompattarlo) altrimenti tutti i file che verranno creati apparterranno a <tt>root:root</tt>. Se a questo punto si cercher� di compilare dall'utente normale si avranno problemi di permessi e per risolverli dovrete dare un:
2. Abilitare ALSA:
# chown -R root:src /usr/src/
Se, inoltre, il gruppo <tt>src</tt> non ha pi� i diritti di scrittura dovranno anch'essi essere ripristinati con:
# chmod -R g+w /usr/src/*
}}


== Configurazione del kernel ==
<pre>
Device Drivers
    Sound
        [M] Sound Card Support
            [M] Advanced Linux Sound Architecture
</pre>


=== Passi preliminari ===
3. C'è un certo numero di differenti opzioni base ALSA, come per esempio il supporto per il superato protocollo audio OSS. In presenza di applicazioni meno recenti, si dovrebbero abilitare le relative opzioni:
Entriamo ora nella directory dei sorgenti del kernel:


<pre>
<pre>
$ cd /usr/src
Device Drivers
    Sound
        [M] Sound Card Support
            [M] Advanced Linux Sound Architecture
            [M]  OSS Mixer API
            [M]  OSS PCM (digital audio) API
            [ ]    OSS PCM (digital audio) API - Include plugin system
</pre>
</pre>


Troveremo in questa directory (avendoli installati precedentemente) i sorgenti del kernel in un archivio tar.bz2:
4. Abilitare il particolare tipo di dispositivo audio che si possiede. Le voci relative a PCI card audio sono nel sottomenu PCI:


<pre>
<pre>
$ ls
Device Drivers
...
    Sound
kernel-source-2.6.8.tar.bz2
        [M] Sound Card Support
...
            [M] Advanced Linux Sound Architecture
                PCI Devices
</pre>
</pre>


Decomprimiamo il kernel:
=='''CPU'''==
 
Se si desidera avere un kernel che lavori il più velocemente possibile per il proprio hardware e processore, sono poche le opzioni sulle quali bisogna agire per migliorare le performance. Questa sezione mostrerà alcune delle opzioni che si possono configurare in base ai processori.
 
===Tipi di processori===
 
Nel kernel linux possiamo modificare un gran numero di opzioni per i diversi processori. La prima informazione da ricavare è l'esatto tipo di processore che si sta usando. Per scoprire ciò, lanciare il seguente comando:


<pre>
<pre>
$ tar xvjf kernel-source-2.6.8.tar.bz2
$cat /proc/cpuinfo  | grep "model name"
model name      : Intel(R) Xeon(TM) CPU 3.20GHz
</pre>
</pre>


A fine decompressione avremo una directory kernel-source-2.6.8, creiamo un link simbolico linux che punta ai sorgenti del kernel:
Notare che l'output probabilmente non sarà identico; ciò che importa è che il comando mostri il nome del modello del processore presente nel sistema.
 
1. Selezionare il tipo di sottoarchitettura del processore:


<pre>
<pre>
$ ln -s /usr/src/kernel-source-2.6.8 linux
Processor type and features
    Subarchitecture Type
        (X) PC-compatible
        ( ) AMD Elan
        ( ) Voyager (NCR)
        ( ) NUMAQ (IBM/Sequent)
        ( ) Summit/EXA (IBM x440)
        ( ) Support for other sub-arch SMP systems with more than 8 CPUs
        ( ) SGI 320/540 (Visual Workstation)
        ( ) Generic architecture (Summit, bigsmp, ES7000, default)
        ( ) Support for Unisys ES7000 IA32 series
</pre>
</pre>


Non � necessario creare questo link, ma � una usuale convenzione farlo anche perch� risulta comodo per entrare nella directory dei sorgenti del kernel.
A meno che la propria macchina non appartenga ad uno dei tipi specifici elencati sopra, selezionare la voce PC-compatibile. Comunque, se si desidera creare un singolo kernel che possa girare su tutti i tipi di macchine mostrate, selezionare la voce Generic architecture option. Alcune delle opzioni potrebbero non essere presenti se non si è selezionato l'opzione Symmetric multiprocessing support.


Ora spostiamoci della directory e puliamo i sorgenti del kernel:
2. Selezionare il tipo di famiglia di processore. L'opzione PC-compatible deve essere selezionata dalle precedenti opzioni affinchè venga mostrato questo sottomenu:


<pre>
<pre>
$ cd linux
Processor type and features
$ make-kpkg clean
    Processor family
        ( ) 386
        ( ) 486
        ( ) 586/K5/5x86/6x86/6x86MX
        ( ) Pentium-Classic
        ( ) Pentium-MMX
        ( ) Pentium-Pro
        ( ) Pentium-II/Celeron(pre-Coppermine)
        ( ) Pentium-III/Celeron(Coppermine)/Pentium-III Xeon
        ( ) Pentium M
        (X) Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon
        ( ) K6/K6-II/K6-III
        ( ) Athlon/Duron/K7
        ( ) Opteron/Athlon64/Hammer/K8
        ( ) Crusoe
        ( ) Efficeon
        ( ) Winchip-C6
        ( ) Winchip-2
        ( ) Winchip-2A/Winchip-3
        ( ) GeodeGX1
        ( ) Geode GX/LX
        ( ) CyrixIII/VIA-C3
        ( ) VIA C3-2 (Nehemiah)
        ( ) Generic x86 support
</pre>
</pre>


Questo passaggio � inutile se � la prima volta che compilate il kernel, ma dalla seconda volta in poi diviene necessario per eliminare i file generati dalle precedenti compilazioni che potrebbero creare conflitti.
Per maggiori dettagli su questa fase della configurazione, si veda la voce M386 al Capitolo 11 per una completa descrizione di come scegliere la corretta voce di processore in base a quello che si possiede, e per il numero di macchine sul quale si voglia far girare il kernel.


Ora, se avete installato un kernel precompilato che abbia la stessa versione del kernel che volete ricompilare potreste usare il suo file di configurazione come base di partenza per configurare il vostro kernel. A tal scopo basta copiare il file di configurazione che st� in <tt>/boot</tt> (i file di configurazione dei kernel installati hanno come nome <code>config</code> seguito dalla versione del kernel) nella directory dei sorgenti:
===SMP===
 
Se il proprio sistema ha più di una CPU, o una CPU Dual Core o Hyperthreaded, si dovrebbe selezionare l'opzione multiprocessore per il kernel linux in modo da portare vantaggi ai processori addizionali. Se non lo si farà, si sprecheranno risorse per gli altri processori senza tuttavia usarli del tutto.
 
Abilitare il multiprocessing:


<pre>
<pre>
$ cp /boot/config-2.6.8 .config
Processor type and features
    [*] Symmetric multi-processing support
</pre>
</pre>


C'� chi arriva anche a installare un kernel precompilato per usare semplicemente il suo file di configurazione. Se avete banda da sprecare � possibile farlo. Tuttavia si pu� benissimo partire da zero senza copiare nessun file di configurazione.
===Preemption===


=== Configurazione: <code>make menuconfig</code> ===
Sistemi che fungono da server devono soddisfare a diversi requisiti fra i quali quelli di essere usati come desktop per applicazioni audio e video. Il kernel permette diversi modi di "preemption" in modo da affrontare diversi carichi di lavoro. "Preemption" è la capacità del kernel di interrompere se stesso mentre sta facendo qualcos'altro, in modo da lavorare per qualcosa che abbia una priorità più alta, ad esempio come aggiornare un programma audio o video.


A questo punto, per configurare il nostro kernel, non ci resta che lanciare il comando:
Per cambiare a un diverso modello di preemption, usare questo menu:


<pre>
<pre>
$ make menuconfig
Processor type and features
    Preemption Model
        (X) No Forced Preemption (Server)
    ( ) Voluntary Kernel Preemption (Desktop)
    ( ) Preemptible Kernel (Low-Latency Desktop)
</pre>
</pre>


Vi apparir un'interfaccia testuale dalla quale sar possibile configurare le opzioni del kernel. ''Questo il passaggio pi delicato, nonch il pi lungo e difficile''.


Se dovete configurare un kernel per la prima volta prendetevi almeno un'ora di tempo ed iniziate con calma, leggendo tutte le pagine dell'help in linea. Uno dei vantaggi di un kernel ricompilato � la possibilit� di ottenere un kernel estremamente piccolo e leggero proprio perch� viene compilato il supporto per le sole periferiche e i soli filesystem effettivamente usati. In questo modo si ha un kernel piccolo e pochi moduli. Un kernel di questo tipo impiega anche molto meno tempo ad essere compilato. Per fare un esempio potrebbe impiegare sui 10 min. su in athlon 1000, quando un kernel debian ufficiale impiegherebbe sicuramente pi� di un'ora sulla stessa macchina. In definitiva, compilando un kernel snello, sar� possibile anche fare pi� prove ed ottimizzarlo quindi al meglio.
Se si desidera rendere il proprio kernel ancora più reattivo verso priorità più elevate di quanto non lo possa essere normalmente con preemption, si possono anche autorizzare interruzioni a una delle protezioni principali interne al kernel:


Per trovare quali moduli sono richiesti dal vostro hardware potete usare il comando '''lspci''' o meglio '''lspci -v'''. Inoltre risulta utilissimo consultare il database dei driver di Linux a [http://kmuto.jp/debian/hcl/ questo indirizzo]: inserendo semplicemente l'output di <code>lspci -n</code>, otterrete l'elenco dei moduli da compilare
<pre>
Processor type and features
    [*] Preempt The Big Kernel Lock
</pre>


Per approfondire la configurazione del kernel:
Questa opzione può essere selezionata solo se in precedenza si sono selezionate le voci "Preemptible Kernel" o "Symmetric multi-processin support".


* [[Esempio configurazione kernel]] nel nostro wiki, per un semplice esempio.
===Suspend===
* [http://a2.pluto.it/a266.htm#almltitle484 Elementi della configurazione] per una descrizione pi� dettagliata delle varie voci. Questo � un capitolo della monumentale opera [http://a2.pluto.it/appunti_di_informatica_libera.htm Appunti di Informatica Libera], per la quale tutti noi siamo grati all'autore '''Daniele Giacomini'''.
* [http://kernel.xc.net/ Linux Kernel Configuration Archive]: potrete cercare le varie opzioni di configurazione di ogni versione del kernel.


In bocca al lupo con la configurazione ;-).
Il kernel Linux ha la capacità di autospendersi a disco, permettendo di togliere l'alimentazione e poi, successivamente, di rialimentare e tornare esattamente nel punto in cui la macchina era stata sospesa. Questa funzionalità è molto utile sui laptop nei quali gira Linux


Una volta finita la configurazione, uscite e salvate i cambiamenti. A questo punto il file <tt>/usr/src/linux/.config</tt> conterr� la nostra configurazione del kernel.
Abilitare questa funzione selezionando:


{{Box|Nota|Se avete gi� ricompilato il vostro kernel e volete passare ad una versione pi� aggiornata, ma non troppo diversa (ad esempio: 2.6.8 --> 2.6.10), non conviene rifare tutta la configurazione da capo. D'altro canto non � neanche possibile usare il vecchio file di configurazione dato che nel nuovo kernel ci saranno voci in pi� e o in meno e sarebbe improponibile cercarle ad una ad una.
<pre>
Power management options (ACPI, APM)
    [*] Software Suspend
</pre>


Basta allora copiare il vecchio file di configurazione nella directory dei sorgenti del nuovo kernel e lanciare il comando:
Il kernel ha bisogno di sapere dove salvare l'immagine del kernel sospesa e poi successivamente da dove riesumarla. Questa locazione è di solito una partizione di swap del kernel sul disco. Per specificare quale partizione dovrebbe essere configurato questo:


$ make oldconfig
<pre>
Power management options (ACPI, APM)
    (/dev/hda3) Default resume partition
</pre>


in questo modo verranno fatte delle domande su come configurare ''le sole nuove voci'' presenti nel kernel. Se i due kernel sono troppo diversi questo metodo non conviene pi� dato che bisogna rispondere ad uno ad uno a tutte le domande sulle voci diverse. Sicuramente non conviene usarlo per il passaggio 2.4 --> 2.6.<br>
Assicurarsi di specificare la partizione giusta per la sospensione della macchina e non usare una partizione in uso dal sistema per dei dati. Il nome della partizione corretta può essere ricavato lanciando il seguente comando:
Un file config del vostro attuale kernel pu� essere trovato in <tt>/boot</tt> sotto il nome di <tt>config-2.x.x</tt>.}}


=== Alternative a <code>make menuconfig</code> ===
<pre>
$/sbin/swapon -s | grep dev | cut -f 1 -d ' '
/dev/hda3
</pre>


Per completezza segnalo le altre interfacce grafiche che � possibile usare per configurare il kernel al posto di <code>make menuconfig</code>.
Usare l'output del comando precedente in questa opzione di configurazione del kernel e nella riga di boot del kernel dove viene specificato da dove il kernel dovrebbe essere riesumato. Dopo che la macchina è stata sospesa, per farla ripartire correttamente, passare l'argomento ''resume=/dev/swappartition alla riga di comando del kernel affinchè usi l'immagine corretta. Se non si vuole arichiviare l'immagine sospesa, usare l'argomento "noresum" da riga di comando del kernel.


;<code>make xconfig</code>: per usare una interfaccia grafica '''qt''' per la configurazione.
===CPU Frequency Scaling===
;<code>make gconfig</code>: per usare una interfaccia grafica '''gtk''' per la configurazione.


Questi frontend non aggiungono niente di nuovo e sono pertanto funzionalmente equivalenti tra di loro. Per usarli sono per� necessarie le librerie di sviluppo, rispettivamente, di ''qt'' e ''gtk''.
La maggior parte dei moderni processori possono rallentare il clock interno del processore in modo da preservare alimentazione e durata della batteria. Linux supporta questa capacità e offre una varietà di ''regolatori'' di alimentazione. Differenti regolatori implementano differenti ''heuristics'' in modo da determinare come variare la velocità del processore in funzione della velocità del sistema e delle altre variabili.


== Compilazione del kernel ==
1. Abilitare la funzionalità della frequenza di scaling di base:
Ora � venuto il momento di cominciare la compilazione, a tal scopo useremo make-kpkg. Vediamo come utilizzare velocemente questo tool per compilare il nostro kernel personalizzato:


<pre>
<pre>
$ fakeroot make-kpkg --append-to-version -nomepersonalizzato --revision=1 kernel_image
Power management options (ACPI, APM)
    [*] CPU Frequency scaling
</pre>
</pre>


Questo comando compiler� il nostro kernel e lo inserir� in un pacchetto debian in <tt>/usr/src</tt>. Il comando '''<tt>fakeroot</tt>''' viene usato semplicemente per simulare un ambiente di root per l'utente normale.
2. Selezionare i differenti regolatori di frequenza che si desidera utilizzare:


Diamo uno sguardo alle opzioni usate:
<pre>
Power management options (ACPI, APM)
    [*] CPU Frequency scaling
    [*]  'performance' governor
    [*]  'powersave' governor
    [*]  'userspace' governor for userspace frequency scaling
    [*]  'ondemand' cpufreq policy governor
    [*]  'conservative' cpufreq governor
</pre>


; <tt>--append-to-version</tt> : serve ad aggiungere un nome personalizzato al pacchetto che verr� aggiunto dopo il numero di versione, che in questo caso diventer� ''2.6.8-nomepersonalizzato''.
Per maggiori informazioni su ciò che fanno i diversi regolatori, vedere la voce CPU_FREQ al Capitolo 11.


; <tt>--revision</tt> : permette di impostare il numero di revisione del pacchetto, normalmente viene indicato con un numero intero.
3. Selezionare il regolator di default che si desidera lanciare al boot della macchina:


; <tt>kernel_image</tt> : dice a make-kpkg di compilare l'immagine del kernel creare il pacchetto debian.
<pre>
Power management options (ACPI, APM)
    [*] CPU Frequency scaling
          Default CPUFreq governor (performance)
</pre>


Se ad esempio compileremo per la seconda volta lo stesso kernel, per fare solo delle modifiche minori, pu� essere utile usare lo stesso nome per --append-to-version ed usare un numero di revisione maggiore. In questo modo quando installerete il pacchetto del kernel ricompilato questo sostituir� il pacchetto precedente. Al contrario se ricompilate un secondo kernel cambiando la stringa da appendere alla versione, il pacchetto del nuovo kernel conviver� tranquillamente col precedente.
4. Selezionare il particolare tipo di processore della macchina. Per dettagli su come determinare il tipo di processore della macchina, vedere la sezione precedente chiamata "Tipi di processori"


In realt� il comando '''make-kpkg''' accetta molti ulteriori parametri (elencher� solo i pi� importanti per gli altri leggete l'amichevole pagina di manuale aka read the friendly manual):
<pre>
Power management options (ACPI, APM)
    [*] CPU Frequency scaling
    ---  CPUFreq processor drivers
    [ ]  ACPI Processor P-States driver
    [ ]  AMD Mobile K6-2/K6-3 PowerNow!
    [ ]  AMD Mobile Athlon/Duron PowerNow!
    [ ]  AMD Opteron/Athlon64 PowerNow!
    [ ]  Cyrix MediaGX/NatSemi Geode Suspend Modulation
    [*]  Intel Enhanced SpeedStep
    [*]    Use ACPI tables to decode valid frequency/voltage pairs
    [*]    Built-in tables for Banias CPUs
    [ ]  Intel Speedstep on ICH-M chipsets (ioport interface)
    [ ]  Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)
    [ ]  Intel Pentium 4 clock modulation
    [ ]  nVidia nForce2 FSB changing
    [ ]  Transmeta LongRun
</pre>
 
===Differenti Modelli di Memoria===


; <tt>--initrd</tt> : da usare se state compilando un kernel che utilizza le immagini initrd.img (''vedi [[Debian_Kernel_Howto#Bisogna_usare_l.27initrd_oppure_no.3F|FAQ: Bisogna usare l'initrd_oppure no?]]'').
Linux su hardware Intel 32 bit può accedere a 64 Gb di memoria, ma l'indirizzo fisico di un processore a 32 bit è di soli 4 Gb. Per lavorare con questa limitazione, Linux può mappare la memoria addizionale in un'altra area e poi selezionarla quando altri programmi ne hanno bisogno. Ma se la propria macchina ha una quantità di memoria più piccola, è più facile per Linux non avere problemi nell'occupare aree più grandi, così risulta benefico dire al kernel quanta memoria si vuole per supportarlo. Per una descrizione più dettagliata di questa opzione, si veda la voce HIGHMEM al Capitolo 11.
; <tt>--added-modules foo</tt> : compila dei sorgenti esterni (presenti in <tt>/usr/src/modules</tt>) insieme al kernel, potete mettere pi� nomi separati da virgole.
; <tt>--added-patches foo</tt> : aggiunge delle patch al kernel, le patch possono essere molteplici separate da virgole.
; <tt>--config</tt> : sceglie quale frontend usare per configurare il kernel (config, menuconfig, xconfig, gconfig).
; <tt>--zimage</tt> : crea una zImage per il kernel.
; <tt>--bzImage</tt> : crea una bzImage per il kernel.
; <tt>--mkimage</tt> : qui potete passare dei parametri a <code>mkinitrd</code>, ad esempio se volete creare una immagine rom: <code>genromfs -d %s -f %s</code>.
; <tt>--rootcmd foo</tt> : per passare un comando a make-kpkg ad esempio fakeroot o sudo
; <tt>CONCURRENCY_LEVEL</tt> : questa variabile e' l'omonimo di -j per make, per usarla vi basta mettere il numero intero che desiderate usare (''$ CONCURRENCY_LEVEL=4 make-kpkg --blabla ecc.ecc...'' )


Come ultimo parametro dovremo mettere un'azione da compiere, vediamo le principali:
Linux suppporta tre differenti modelli di memoria per processori Intel  32 bit, in funzione della memoria disponibile:


; <tt>clean</tt> : pulisce i sorgenti.
- Inferiore a 1 Gb di memoria fisica<br />
; <tt>kernel_headers</tt> : questo genera un pacchetto con gli headers del kernel.
- Tra 1 Gb e 4 Gb di memoria fisica<br />
; <tt>binary</tt> : questo genera un nuovo pacchetto deb con i sorgenti, uno con gli header, uno con la documentazione e uno con l' immagine del kernel.
- Oltre 4 Gb di memoria fisica<br />
; <tt>buildpackage</tt> : pulisce i sorgenti e avvia "binary" (vedere sopra).
; <tt>build</tt> : compila solo l'immagine del kernel.
; <tt>modules</tt> :compila tutti moduli esterni sotto <tt>/usr/src/modules</tt> e genera un file .diff e un pacchetto sorgente.
; <tt>modules_config</tt> : permette di configurare i moduli esterni residenti in <tt>/usr/src/modules</tt> prima di compilarli.
; <tt>modules_image</tt> : crea i pacchetti deb dei moduli esterni residenti in <tt>/usr/src/modules</tt> senza il file .diff e senza creare un'altro pacchetto sorgente.
; <tt>modules_clean</tt> : pulisce i sorgenti dei moduli esterni presenti in <tt>/usr/src/modules</tt>.
; <tt>debian</tt> : questo crea la directory <tt>./debian</tt> utile per compilare i kernel vanilla e patcharli alla maniera debian.


==Installazione nuovo kernel==
Per selezionare la quantità di memoria:
Una volta finito torneremo alla riga di comando e ci sposteremo nella directory precedente (/usr/src/) dove troveremo il pacchetto .deb del kernel appena compilato:


<pre>
<pre>
$ cd ..
Processor type and features
$ ls
    High Memory Support
...
        (X) off
kernel-image-2.6.8-nomepersonalizzato-386_1.Custom_i386.deb
        ( ) 4GB
...
        ( ) 64GB
</pre>
</pre>


Adesso possiamo installare il pacchetto con il nostro nuovo kernel ricompilato. Diventiamo quindi root con '''su''', e digitiamo:
===ACPI===
 
Sulla maggior parte dei sistemi moderni basati Intel, ACPI è richiesto dalla macchina per poter funzionare correttamente. ACPI è uno standard che permette al BIOS del computer di lavorare con il sistema operativo, dando accesso all'hardware in modo indiretto, così avendo la possibilità di gestire un ampio raggio di interfaccie con un codice relativamente ristretto e specifico per ogni sistema operativo. ACPI fornisce inoltre una facilità nell'aiutare il ''suspend'' e ''resume'' della macchina e il controllo della velocità del processore e le ventole. Se si ha un laptop è consigliabile abilitare questa opzione.<br />
Per abilitare ACPI:
 
<pre>
<pre>
# dpkg -i kernel-image-2.6.8-nomepersonalizzato-386_1.Custom_i386.deb
Power management options (ACPI, APM)
    ACPI (Advanced Configuration and Power Interface) Support
        [*] ACPI Support
</pre>
</pre>


Se abbiamo lilo dovremo configurare lilo.conf aggiungendo le righe relative al kernel. Ricordatevi che, con lilo, per rendere effettive le modifiche bisogna aggiornare il [[MBR]] (Master Boot Record) con il comando:  
Ci sono una gran varietà di differenti ACPI "drivers" che controllano differenti tipi di interfaccie ACPI. Si dovrebbe abilitare quello specifico che si ha sulla propria macchina:


<pre>
<pre>
# lilo -v
Power management options (ACPI, APM)
    ACPI (Advanced Configuration and Power Interface) Support
        [*] ACPI Support
        [*]  AC Adapter
        [*]  Battery
        [*]  Button
        [*]  Video
        [*]  Generic Hotkey (EXPERIMENTAL)
        [*]  Fan
        [*]  Processor
        [*]    Thermal Zone
        [ ]  ASUS/Medion Laptop Extras
        [ ]  IBM ThinkPad Laptop Extras
        [ ]  Toshiba Laptop Extras
</pre>
</pre>


Se abbiamo grub, invece, non ci resta altro che riavviare :D. Tuttavia per approfondire le personalizzazioni che � possibile fare su grub, potete leggere l'apposita sezione della [[Guida a Grub]]:
=='''Collegamento in rete'''==


* [[Guida_a_Grub#Usare_update-grub|Guida a Grub: Usare update-grub]]
Il collegamento in rete è richiesto per quasi tutte le macchine moderne e Linux supporta pressochè qualsiasi opzione di rete disponibile. Qui vi mostrerò solo una parte di una moltitudine di possibilità.


==Installare e gestire i moduli==
Per tutte le opzioni di rete, comprendenti diversi drivers, l'opzione della configurazione di rete principale deve essere abilitata:


Per compilare e creare automaticamente pacchetti .deb per moduli non presenti nei sorgenti del kernel, Debian fornisce un comodo strumento: [[Pagina di manuale di module-assistant|module-assistant]]. Per un uso interattivo baster� lanciarlo da root per installare i pacchetti, scaricare i sorgenti del modulo che interessa, compilarlo e creare un pacchetto debian.
<pre>
Networking
    [*] Networking support
</pre>


Per scegliere invece quali moduli fare partire all'avvio ci sono diverse strade.
L'opzione TCP/IP dovrebbe anch'essa essere selezionata, in modo da permettere alla macchina di comunicare con altre macchine in internet:


# Se si usa l'hotplug, questi dovrebbe caricare automaticamente al boot tutti i moduli necessari. Per evitare il caricamento di certi moduli che possono creare conflitti basta inserili in '''/etc/hotplug/blacklist'''.
<pre>
# Se non si usa l'hotplug bisogna specificare manualmente quali moduli caricare all'avvio. Per far ci� baster� inserire i nomi dei moduli da caricare in '''/etc/modules''', uno per riga. Se non vi va di editare un file di testo (o non ricordate esattamente i nomi dei moduli) potrete usare '''modconf''' che permette di scegliere interattivamente quali moduli caricare all'avvio.
Networking
    [*] Networking support
          Networking options
              [*] TCP/IP networking
</pre>


==FAQ==
===Netfilter===
===Per aggiungere un modulo devo ricompilare tutto il kernel?===
Dipende.


Se il modulo fa parte del kernel debian (cio� il suo sorgente � contenuto nel pacchetto <tt>kernel-source</tt> del kernel) allora bisogna ricompilare il kernel. Tenete presente, tuttavia, che i kernel binari debian includono gi� la maggior parte dei moduli presenti nei sorgenti del kernel. Per caricarli basta usare:
La parte Netfilter del Linux Kernel è una struttura per il filtraggio e la manipolazione di tutti i pacchetti della rete che passano attraverso la macchina. È comunemente utilizzato nel caso si volesse abilitare un firewall sulla macchina per proteggersi da diversi sistemi in internet, oppure per utilizzare la macchina come proxy per altre macchine in rete. Per ulteriori dettagli in merito a Netfilter, per favore si legga NETFILTER.


  # modprobe ''nomemodulo''
Per abilitare l'opzione principale Netfilter:


Se il sorgente del modulo � invece pacchettizzato singolarmente (il nome di questi pacchetti comincia per <tt>module-source</tt>) '''non � necessario''' ricompilare il kernel.
<pre>Networking
Debian ci fornisce la comoda utility '''module-assistant''' che permette di scaricare, compilare e pacchettizzare un modulo del kernel. Basta lanciare il comando
    [*] Networking support
          Networking options
              [*] Network packet filtering (replaces ipchains)
</pre>


  # m-a
È raccomandato abilitare Netfilter netlink interface e Xtables support quando si utilizza netlink:


e una interfaccia ''dialog'' ci guider� passo passo.
<pre>
Networking
    [*] Networking support
          Networking options
              [*] Network packet filtering (replaces ipchains)
                    Core Netfilter Configuration
                        [*] Netfilter netlink interface
                        [*] Netfilter Xtables support (required for ip_tables)
</pre>


Si pu� usare il comando <tt>module-assistant list-avaible</tt> (o il diminutivo <tt>m-a la</tt>) per ottenere la lista completa dei moduli installabili con module-assistant. Per le altre innumerevoli opzioni potete leggere la pagina di manuale tradotta in italiano:
I differenti protocolli che si vogliono filtrare dovrebbero anch'essi essere selezionati:


* [[Pagina di manuale di module-assistant]]
<pre>
Networking
    [*] Networking support
          Networking options
              [*] Network packet filtering (replaces ipchains)
                    IP: Netfilter Configuration
                        [M] Connection tracking (required for masq/NAT)
                        [ ]  Connection tracking flow accounting
                        [ ]  Connection mark tracking support
                        [ ]  Connection tracking events (EXPERIMENTAL)
                        [ ]  SCTP protocol connection tracking support (EXPERIMENTAL)
                        [M]  FTP protocol support
                        [ ]  IRC protocol support
                        [ ]  NetBIOS name service protocol support (EXPERIMENTAL)
                        [M]  TFTP protocol support
                        [ ]  Amanda backup protocol support
                        [ ]  PPTP protocol support
                        [ ]   H.323 protocol support (EXPERIMENTAL)
</pre>


===Bisogna usare l'initrd oppure no?===
===Drivers di rete===
La risposta breve �: no non usatelo.


Di seguito la risposta lunga:
Linux supporta un vasto assortimento di dispositivi di rete. Il più utilizzato è un dispositivo di rete PCI, nel quale è possibile collegare un cavo ethernet. Per determinare se si ha un dispositivo di rete PCI e di che tipo si tratta, digitare il seguente comando:


L'immagine initrd (ramdisk iniziale) serve per caricare dei moduli nel kernel prima che questo abbia l'accesso alla partizione di root. Quindi basta compilare questi moduli staticamente e non avremo mai bisogno di un ramdisk. Ma quali sono questi moduli che servono nelle prime fasi di avvio? Semplicemente i moduli che permettono di leggere la partizione di root, ovvero:
<pre>
$ /usr/sbin/lspci | grep Ethernet


* il modulo del controller del proprio harddisk
03:0c.0 Ethernet controller: D-Link System Inc RTL8139 Ethernet (rev 10)
* il modulo del filesystem della partizione di root
03:0e.0 Ethernet controller: Intel Corporation 82545GM Gigabit Ethernet Controller (rev 04)
</pre>


Per un kernel ricompilato, l'initrd � generalmente inutile e rende l'avvio leggermente pi� lento. &Egrave; anche facile sbagliare se non attivate le giuste opzioni nel kernel (vedi [[#Ma se io devo usare l'initrd assolutamente?|FAQ successiva]]), in tal caso otterreste un kernel panic all'avvio. L'initrd serve soprattutto per i kernel ufficiali delle distribuzioni che devono supportare tutti i controller esistenti e una gran variet� di filesystem. Sarebbe assurdo compilare tutti questi supporti staticamente e quindi vengono inseriti come moduli nel ram disk. L'initrd � necessario anche se si vuole usare un bootsplash, ma questa � un'altra storia:
Nota che la vostra risposta non sarà probabilmente identica; importante è che il comando mostra almeno un dispositivo PCI ethernet.


* [[Compilazione Kernel 2.6.11 con Bootsplash]]
1. Abilitare il supporto PCI per il kernel:
* [[Kernel2.6.10 - Framebuffer - Gensplash Patch]]


La risposta lunga � quindi no, non usate il'initrd quando questo non sia strettamente necessario.
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
</pre>


===Ma se io devo usare l'initrd assolutamente?===
2. Abilitare il supporto base per i dispositivi di rete:
Per usare l'intrd '''si deve''' compilare staticamente il supporto per l'initrd impostando le seguenti voci:


<pre>
<pre>
Device Drivers --->
Device Drivers
  Block devices  --->
     Network device support
     <*> RAM disk support
        [*] Network device support
    (16)  Default number of RAM disks
    (8192) Default RAM disk size (kbytes)
    [*]   Initial RAM disk (initrd) support  
</pre>
</pre>


Inoltre bisogna anche aggiungere il supporto per il filesystem usato nell'immagine del ram disk. In debian si usa di default il '''cramfs''', attivabile alla voce:
3. Poi arriva il divertente compito di trovare il driver del dispositivo specifico per il vostro hardware. Il posto più comune per trovare dispotivi ethernet per hardware moderno è nella sezione gigabit della selezione dei drivers:


<pre>
<pre>
File systems  --->
Device Drivers
     Miscellaneous filesystems  --->
     Network device support
         <*> Compressed ROM file system support
         [*] Network device support
            Ethernet (1000 Mbit)
</pre>
</pre>


Se si vuole usare un'altro filesystem basta impostarlo in '''/etc/mkinitrd/mkinitrd.conf'''.
Alcuni dispositivi ethernet più datati si possono trovare nella sezione 10- e 100-Mbit:
<pre>
Device Drivers
    Network device support
        [*] Network device support
            Ethernet (10 or 100Mbit)
</pre>


Con tali configurazioni � possibile compilare il kernel con initrd aggiungendo semplicemente l'opzione <code>--initrd</code> al comando <code>make-kpkg</code>. Il pacchetto risultante conterr� degli script che creeranno l'immagine initrd in fase di installazione del pacchetto.
Guardate in queste sezioni per trovare i drivers adatti per i vostri dispositivi specifici.


Attualmente ci sono tre tool in debian che permettono di creare l'immagine initrd:
===IrDA===


* '''<code>mkinitrd</code> ''' (fornito dal pacchetto <code>initrd-tools</code>): questo � il vecchio metodo usato fino al kernel 2.6.12.
IrDA è un protocollo a infrarossi usato da certi laptops e PDAs per trasmettere su distanze molto brevi. È prevalentemente su hardware datato; su hardware più moderno per trasmettere si utilizza il Bluetooth. Si guardi la prossima sezione, "Bluetooth", per configurare il Bluetooth.
* '''<code>update-initramfs</code> ''' (fornito dal pacchetto <code>initramfs-tools</code>): utilizzabile con kernel 2.6.13 o pi� recenti. Aggiunge tutti i controller del disco e i supporti che potrebbero servire per il boot che sono stati complati come moduli.
* '''<code>mkinitrd.yaird</code> ''' (fornito dal pacchetto <code>yaird</code>): utilizzabile con kernel 2.6.13 o pi� recenti. Analizza il sistema e aggiunge all'immagine initrd '''solo''' i moduli necessari al boot della macchina su cui si installa il kernel. Permette di ottenere una immagine molto pi� piccola del caso precedente.


Per ulteriori informazioni sui kernel debian e le immagini initrd:
1. IrDA è un protocollo di rete, dunque lo si trova nel menu principale dei collegamenti di rete:


* [http://kernel-handbook.alioth.debian.org/ch-initramfs.html Debian Linux Kernel Handbook: Managing the initial ramfs (initramfs) archive]
<pre>
Networking
    [*] Networking support
    [*]  IrDA (infrared) subsystem support
</pre>
 
2. Un numero di differenti protocolli IrDA può essere selezionato, a dipendenza del tipo di dispositivo con il quale si vuole comunicare e a seconda del programma utilizzato per la comunicazione:
 
<pre>
Networking
    [*] Networking support
        --- IrDA (infrared) subsystem support
        ---  IrDA protocols
        [*]  IrLAN protocol (NEW)
        [*]  IrCOMM protocol (NEW)
        [*]  Ultra (connectionless) protocol (NEW)
</pre>
 
3. Esiste una vasta gamma di differenti tipi di dispositivi IrDA: alcuni seriali, alcuni PCI e altri basati su USB. Per selezionare il proprio dispositivo specifico IrDA, sceglietelo dal sottomenu di IrDA:
 
<pre>
Networking
    [*] Networking support
        --- IrDA (infrared) subsystem support
              Infrared-port device drivers
              --- SIR device drivers
              [ ] IrTTY (uses Linux serial driver)
              --- Dongle support
              --- Old SIR device drivers
              --- Old Serial dongle support
              --- FIR device drivers
              [ ] IrDA USB dongles
              [ ] SigmaTel STIr4200 bridge (EXPERIMENTAL)
              [ ] NSC PC87108/PC87338
              [ ] Winbond W83977AF (IR)
              [ ] Toshiba Type-O IR Port
              [ ] SMSC IrCC (EXPERIMENTAL)
              [ ] ALi M5123 FIR (EXPERIMENTAL)
              [ ] VLSI 82C147 SIR/MIR/FIR (EXPERIMENTAL)
              [ ] VIA VT8231/VT1211 SIR/MIR/FIR
</pre>
 
===Bluetooth===
 
Bluetooth è una tecnologia wireless che è stata creata per rimpiazzare IrDA per comunicare fra dispositivi su distanze molto brevi. È una tecnologia wireless a corto raggio che è stata progettata per rimpiazzare i cavi, con un'operabilità su un raggio di 10 metri e comunemente utilizzata nei cellulari.
 
1. Bluetooth è un protocollo di rete, dunque lo si trova nel menu principale dei collegamenti di rete:
 
<pre>
Networking
    [*] Networking support
    [*]  Bluetooth subsystem support
</pre>
 
2. Ci sono due protocolli principali per la selezione del Bluetooth. Entrambi devono essere abilitati per la piena funzionalità di tutti i tipi di dispositivi Bluetooth:
 
<pre>
Networking
    [*] Networking support
        --- Bluetooth subsystem support
        [*]  L2CAP protocol support
        [*]  SCO links support
</pre>
 
3. Ci sono relativamente molti drivers disponibili per i singoli dispositivi Bluetooth; questo perchè la maggior parte dei dispositivi segue le specifiche del Bluetooth su come il dispositivo deve funzionare. I drivers marcati nella seguente lista devono essere selezionati per permettere al Bluetooth di funzionare con un dispositivo:
 
<pre>
Networking
    [*] Networking support
        --- Bluetooth subsystem support
            Bluetooth device drivers
                [M] HCI USB driver
                [*]  SCO (voice) support
                [ ] HCI UART driver
                [M] HCI BCM203x USB driver
                [M] HCI BPA10x USB driver
                [ ] HCI BlueFRITZ! USB driver
                [ ] HCI DTL1 (PC Card) driver
                [ ] HCI BT3C (PC Card) driver
                [ ] HCI BlueCard (PC Card) driver
                [ ] HCI UART (PC Card) device driver
                [ ] HCI VHCI (Virtual HCI device) driver
</pre>


=== Ma il kernel non fa il boot senza initrd! ===
===Wireless===
Vedi FAQ precedente. L'initrd non � necessario per fare il boot. Se il sistema non parte ci� dipende da una incorretta configurazione del kernel.


'''lordnisse''' ha riportato sul forum che per avviare il suo sistema � stato necessario compilare anche il supporto per partizioni MS-DOS:
Il collegamento di rete wireless è molto conosciuto; quasi tutti i laptops moderni hanno un dispositivo di rete wireless integrato. Linux supporta una vasta gamma di drivers wireless e altri ancora vengono aggiunti ogni settimana. Per determinare se avete un dispositivo wireless PCI e di che tipo si tratta, digitate il seguente comando:


<pre>
<pre>
File systems  --->
$ /usr/sbin/lspci | grep -i wireless
    Partition Types  --->
 
        [*] Advanced partition selection
06:05.0 Network controller: Intel Corporation PRO/Wireless 2915ABG MiniPCI Adapter (rev 05)
        [*]  PC BIOS (MSDOS partition tables) support (NEW)
</pre>
</pre>


=== Posso usare make-kpkg con un kernel vanilla ===
Nota che la vostra risposta non sarà probabilmente identica; importante è che il comando mostra almeno un dispositivo PCI wireless.
Certamente, <tt>make-kpkg</tt> pu� essere usato indifferentemente sia con i sorgenti Debian del kernel di linux che con i sorgenti del [[kernel vanilla]].  


I sorgenti Debian sono contenuti nei pacchetti <tt>kernel-source-*</tt> (o <tt>linux-source-*</tt> per i kernel dal 2.6.12 in poi) e sono installabili come usuali pacchetti con [[APT]].
1. Per abilitare il supporto wireless in Linux, l'opzione di configurazione di rete IEEE 802.11 deve essere abilitata. (802.11 è il numero della specifica wireless che tutti i dispositivi seguono).


I sorgenti vanilla devono essere scaricati manualmente da [http://www.kernel.org www.kernel.org]. Devono essere scompattati in <code>/usr/src</code>, e per il resto la procedura di compilazione � assolutamente identica al caso di sorgenti Debian.
<pre>
Networking
    [*] Networking support
    [*]   Generic IEEE 802.11 Networking Stack
</pre>


Nel caso di sorgenti vanilla, pu� essere interessante vedere l'opzione <tt>debian</tt> nella sezione [[Debian_Kernel_Howto#Compilazione_del_kernel|Compilazione del kernel]], tuttavia l'uso di tale parametro � del tutto opzionale.
2. Inoltre abilitate anche le differenti opzioni del protocollo 802.11 e l'opzione ''Software MAC'' per godere del supporto completo di tutti i differenti tipi di dispositivi wireless su Linux:


===Errore con l'opzione <tt>--revision</tt> ===
Pu' capitare che, ricompilando il kernel variando il valore dell'opzione <tt>--revision</tt> venga rilevato un errore simile al seguente:
<pre>
<pre>
I note that you are using the --revision flag with the value
Networking
  2.
    [*] Networking support
However, the ./debian/changelog file exists, and has a different value
    [*]  Generic IEEE 802.11 Networking Stack
  1.
    [*]    IEEE 802.11 WEP encryption (802.1x)
I am confused by this discrepancy, and am halting.</pre>
    [M]    IEEE 802.11i CCMP support
    [M]    IEEE 802.11i TKIP encryption
    [M]    Software MAC add-on to the IEEE 802.11 networking stack
</pre>


Questo problema e' semplicemente dovuto al fatto che non si � pulito il tree dei sorgenti dopo la prima compilazione. Per ovviare basta dunque:
3. Supporto per i differenti tipi di dispositivi di rete wireless PCI lo troverete nella sezione drivers dei collegamenti di rete della configurazione:


<pre>$ make-kpkg clean</pre>  
<pre>
Device Drivers
    Network device support
        Wireless LAN (non-hamradio)
            [*] Wireless LAN drivers (non-hamradio) & Wireless Extensions
            [*]  Wireless Extension API over RtNetlink
</pre>


e rilanciare la compilazione.
C'è una vasta gamma di differenti drivers PCI in questa sezione. Selezionate quella adatta al dispositivo che avete.
 
I drivers dei dispositivi di collegamento alla rete wireless USB sono in una sezione differente della configurazione:


===You are attempting to install a kernel image (version ''version-revision'') However, the directory /lib/modules/''version-revision'' still exists.===
Se si aggiorna il kernel ad una [[revisione]] successiva, durante l'installazione del pacchetto verr fatta la seguente domanda:
<pre>
<pre>
You are attempting to install a kernel image (version 2.6.15.4-swsusp) However, the directory /lib/modules/2.6.15.4-swsusp still exists.  If this directory
Device Drivers
belongs to a previous linux-image-2.6.15.4-swsusp package, and if you have deselected some modules, or installed standalone modules packages, this could be
    USB Support
bad. However, if this directory exists because you are also installing some stand alone modules right now, and they got unpacked before I did, then this is
        USB Network Adapters
pretty benign.  Unfortunately, I can not tell the difference.
</pre>


If /lib/modules/2.6.15.4-swsusp belongs to a old install of linux-image-2.6.15.4-swsusp, then this is your last chance to abort the installation of this
=='''Filesystems'''==
kernel image (nothing has been changed yet).


If this directory is because of stand alone modules being installed right now, or if it does belong to an older linux-image-2.6.15.4-swsusp package but you
Linux supporta una vasta gamma di tipi di filesystem tradizionali e un certo numero di differenti tipi di filesystem (''volume managers'', ''clustered filesystems'', ecc.). I tipi di filesystem tradizionali (normali o ''journaled'') possono essere selezionati dal menu principale di configurazione dei File systems:
know what you are doing, and if you feel that this image should be installed despite this anomaly, Please answer n to the question.


Otherwise, I suggest you move /lib/modules/2.6.15.4-swsusp out of the way, perhaps to /lib/modules/2.6.15.4-swsusp.old or something, and then try
<pre>
re-installing this image.
File systems
    [*] Second extended fs support
    [*] Ext3 journalling file system support
    [ ] Reiserfs support
    [ ] JFS filesystem support
    [ ] XFS filesystem support
</pre>
 
Questa sezione vuole mostrare alcuni tipi di filesystem non tradizionali che Linux supporta e come abilitarli.
 
===RAID===
 
RAID da la possibilità di combinare vari dischi assieme, in modo da comportarsi però come fossero un unico disco. Ciò può aiutare a dare modi di fornire ridondanza o velocità di diffusione dei dati fra i differenti dischi. Linux supporta entrambi hardware e software RAID. L'hardware RAID è gestito dal ''disk controller'', senza nessun aiuto necessario del kernel.
 
1. Il Software RAID è controllato dal kernel e può essere selezionato come opzione:


Stop install since the kernel-image is already installed?    
<pre>
Device Drivers
    Multi-device support (RAID and LVM)
        [*] Multiple devices driver support (RAID and LVM)
        [*]   RAID support
</pre>
</pre>


La risposta da dare � '''<tt>No</tt>'''! L'avvertimento ci ricorda che i moduli del vecchio kernel (quello con la stessa versione ma numero di revisione diverso) verranno cancellati e sostituiti dai moduli del nuovo kernel.  
2. Ci sono vari differenti tipi di configurazione del RAID. Almeno uno deve essere selezionato per permettere al RAID di funzionare correttamente:


Questo � il comportamento normale, infatti, nel caso non si voglia sostituire un vecchio kernel ma semplicemente installarne parallelamente uno nuovo (con la stessa identica versione) si sarebbe dovuta modificare la stringa dopo <code>--append-to-version</code> invece che quella dopo <code>--revision</code> (vedi sez. [[Debian_Kernel_Howto#Compilazione_del_kernel|Compilazione kernel]]).
<pre>
Device Drivers
    Multi-device support (RAID and LVM)
        [*] Multiple devices driver support (RAID and LVM)
        [*]  RAID support
        [*]    Linear (append) mode
        [*]    RAID-0 (striping) mode
        [*]    RAID-1 (mirroring) mode
        [*]    RAID-10 (mirrored striping) mode (EXPERIMENTAL)
        [*]    RAID-4/RAID-5 mode
        [*]    RAID-6 mode
</pre>


Se il kernel che si sta sostituendo � quello in esecuzione ''� necessario riavviare la macchina il prima possibile!''
===Logical Volume Manager e Device Mapper===


== Link ==
Molto simile al RAID, Logical Volume Manager (LVM) permette all'utente di combinare differenti blocchi di dispositivi per comportarsi come fossero un blocco unico. In ogni caso, non funziona a livello di dispositivo come il RAID, ma attraverso un blocco con un meccanismo di mappatura dei settori. Questo permette a differenti porzioni di differenti dischi di essere combinate assieme per formare un unico blocco di dispositivo. Per fare ciò, il kernel utilizza qualcosa chiamato ''Device Mapper'' (DM).


* [http://www.debian.org/doc/manuals/reference/ch-kernel.it.html Manuale di Riferimento Debian: Capitolo 7 - Il kernel Linux su Debian]
1. Abilitare il supporto DM nel kernel:
* [http://kernel-handbook.alioth.debian.org/index.html Debian Linux Kernel Handbook ]: ottimo documento sulla gestione dei kernel debian delle relative patch (''in inglese'').
* [http://a2.pluto.it/kernel_linux_1.htm Appunti di informatica Libera: Kernel Linux]: Il capitolo dedicato al kernel della monumentale opera di ''Daniele Giacomini'' contiene sia istruzioni generiche che istruzioni per Debian. Inoltre c'� una descrizione dettagliata della configurazione delle varie voci del kernel!
* [http://kernel.xc.net/ Linux Kernel Configuration Archive]: database che permette di ricercare tra le voci di configurazione (e le loro descrizioni) per varie versioni di kernel.


Buon divertimento con Debian GNU/Linux!
<pre>
Device Drivers
    Multi-device support (RAID and LVM)
        [*] Multiple devices driver support (RAID and LVM)
        [*]  Device mapper support
</pre>


2. Ci sono vari moduli d'aiuto che lavorano con il DM per fornire ulteriore funzionalità:
<pre>
Device Drivers
    Multi-device support (RAID and LVM)
        [*] Multiple devices driver support (RAID and LVM)
        [*]  Device mapper support
        [*]    Crypt target support
        [*]    Snapshot target (EXPERIMENTAL)
        [*]    Mirror target (EXPERIMENTAL)
        [*]    Zero target (EXPERIMENTAL)
        [*]    Multipath target (EXPERIMENTAL)
</pre>
===Condivisione file con Windows===
Samba è un programma che permette agli utenti Linux di accedere a macchine Windows nativamente attraverso la rete, fornendo un modo per condividere unità e dispositivi in maniera trasparente. Concede inoltre a Linux di fungere da server Windows, permettendo ai ''clients'' Windows di connettersi ad esso, facendogli credere di essere una vera macchina Windows.
Due differenti filesystems permettono a una macchina Linux di connettersi con una macchina Windows: il filesystem SMB e il filesystem CIFS. Per permettere la connessione per ''Workgroups'' a Windows o macchine con Windows 95 o 98, selezionare il filesystem SMB:
<pre>
File systems
    Network File Systems
        [*] SMB file system support (to mount Windows shares etc.)
</pre>
Per permettere la connessione a nuove macchine Windows è raccomandato invece il filesystem CIFS:
<pre>
File systems
    Network File Systems
        [*] CIFS support
</pre>
Per ulteriori dettagli a riguardo le differenze fra questi due filesystem e quando si dovrebbe utilizzarne uno piuttosto dell'altro, guardare per favore le voci SMB_FS e CIFS nel capitolo 11.
===OCFS2===
OCFS2 è un ''cluster'' filesystem della Oracle che funziona allo stesso tempo per una grande installazione di rete, così come un piccolo sistema locale. Questo filesystem è raccomandato per l'utilizzo di grandi database, come Oracle o DB2, perché può essere spostato nel corso del tempo a diversi dischi di sostegno attraverso la rete molto più facilmente rispetto all'ulteriore stoccaggio necessario.
Per abilitare questo filesystem:
<pre>
File systems
    [*] OCFS2 file system support
</pre>
=='''Sicurezza'''==
Il kernel Linux supporta differenti modelli di sicurezza fornendo agganci e lasciando la possibilità di creare il proprio modello. Al momento, solo pochi modelli appartengono al codice di default del kernel, ma sviluppatori di nuovi modelli stanno lavorando per ottenerne di più accettati.
===Capacità di default di Linux===
Il tipo di modello di sicurezza standard di Linux è il modello "capacità". Dovreste sempre selezionare quest'opzione, a meno che si volesse utilizzare un kernel insicuro per qualsiasi ragione.
Per abilitarlo:
<pre>
Security options
    [*] Enable different security models
    [*]  Default Linux Capabilities
</pre>
===SELinux===
Un modello di sicurezza molto conosciuto è chiamato SELinux. Questo modello è supportato da un discreto numero di differenti distribuzioni di Linux.
SELinux richiede che l'opzione di collegamento in rete sia abilitata. Si guardi la sezione precedente "Collegamento in rete" per abilitarla.
SELinux richiede inoltre che la revisione sia abilitata nella configurazione del kernel. Per fare ciò:
<pre>
General setup
    [*] Auditing support
</pre>
Ancora, l'opzione di sicurezza del collegamento in rete deve essere abilitata:
<pre>
Security options
    [*] Enable different security models
    [*]  Socket and Networking Security Hooks
</pre>
Adesso è possibile selezionare l'opzione SELinux:
<pre>
Security options
    [*] Enable different security models
    [*] NSA SELinux Support
</pre>
Ci sono inoltre un certo numero di opzioni individuali di SELinux che si consiglia di abilitare. Si guardi per favore l'aiuto dei singoli elementi per una descrizione più esaustiva su ciò che fanno:
<pre>
Security options
    [*] Enable different security models
    [*] NSA SELinux Support
    [ ]  NSA SELinux boot parameter
    [ ]  NSA SELinux runtime disable
    [*]  NSA SELinux Development Support
    [*]  NSA SELinux AVC Statistics
    (1)  NSA SELinux checkreqprot default value
</pre>
=='''Kernel Debugging'''==
Una vasta gamma di differenti opzioni del kernel può aiutare in ''debugging'' per capire cosa sta succedendo all'interno del kernel. La susseguente lista mostra le opzioni più comuni che possono essere utili per scoprire nuove cose su come funziona il kernel o aiutare a trovare potenziali problemi all'interno dell'attuale codice sorgente del kernel.
===Kernel Log Timestamps===
Il kernel da una vasta gamma di messaggi nei suoi ''logfile''. Questi messaggi possono essere letti guardando nel sistema ''logfile'' (normalmente situato in ''/var/log/messages'') o digitando il comando ''dmesg''.
Ogni tanto è opportuno vedere esattamente quando questi messaggi sono stati creati. ''dmesg'' non da però nessun "segnalibro di tempo" (''timestamp'') agli eventi che mostra e la risoluzione di ''/var/log/messages'' è solamente vicina al secondo. Si può configurare il kernel per assegnare ad ogni messaggio un "segnalibro di tempo" con l'accuratezza del valore di tempo più piccolo misurabile dal kernel (normalmente nel raggio di microsecondi).
Per abilitare l'opzione "segnalibro di tempo" nei messaggi del kernel:
<pre>
Kernel hacking
    [*] Show timing information on printks
</pre>
===Magic SysRq Keys===
I tasti ''SysRq'' sulla tastiera possono essere utilizzati per controllare il kernel in vari modi differenti mentre il kernel è in esecuzione o dopo un crash.
Per abilitare quest'opzione:
<pre>
Kernel hacking
    [*] Magic SysRq key
</pre>
Per una descrizione completa delle differenti azioni che possono essere attivate con quest'opzione, si guardi per favore il file ''Documentation/sysrq.txt'' all'interno del codice del kernel.
===Debug Filesystem===
Un filesystem basato sulla RAM può essere utilizzato per estrarre un mucchio di differenti informazioni di ''debugging''. Questo filesystem è chiamato ''debugfs'' e può essere abilitato:
<pre>
Kernel hacking
    [*] Debug filesystem
</pre>
Dopo aver abilitato questa opzione e aver riavviato il kernel recompilato, viene creata una directory ''/sys/kernel/debug'' come locazione per l'utente per montare il filesystem ''debugfs''. Per fare ciò manualmente:
<pre>
$ mount -t debugfs none /sys/kernel/debug
</pre>
Oppure montare il filesystem automaticamente all'avvio, aggiungendo la seguente linea al file ''/etc/fstab'':
<pre>
debugfs /sys/kernel/debug debugfs 0 0
</pre>
Dopo aver montato ''debugfs'', un grande numero di differenti directories e files saranno presenti nella directory ''/sys/kernel/debug/''. Queste sono tutte virtuali e generate dinamicamente dal kernel, come i files in ''procfs'' o ''sysfs''. I files possono essere utilizzati come aiuto per eliminare gli errori dai diveri sotto sistemi del kernel o semplicemente per vedere cosa succede al sistema quando è in esecuzione.
===General Kernel Debugging===
Qui troviamo una vasta gamma di altre buone opzioni di configurazione del kernel che sarebbe opportuno abilitare se si volesse aiutare gli sviluppatori del kernel a risolvere differenti problemi, o semplicemente per apprendere di più come lavora il kernel osservando i messagi che questa opzione rende disponibili. Si noti che se si abilita qualsiasi delle seguenti opzioni, il kernel rallenterà di un poco; se si dovesse osservare una diminuzione delle prestazioni sarebbe opportuno disabilitare le opzioni:
<pre>
Kernel hacking
    [*] Kernel debugging
    [*]  Detect Soft Lockups
    [ ]  Collect scheduler statistics
    [*]  Debug slab memory allocations
    [*]    Memory leak debugging
    [*]  Mutex debugging, deadlock detection
    [*]  Spinlock debugging
    [*]  Sleep-inside-spinlock checking
    [ ]  kobject debugging
    [ ]  Highmem debugging
    [ ]  Compile the kernel with debug info
</pre>
----
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].
----
----


Autore iniziale: Abortigeno
[http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch08.pdf ''Capitolo originale'']


Rivisto ed esteso: [[Utente:TheNoise|~ The Noise]]


[[Categoria:Kernel]]
[[Categoria:Documentazione tecnica]]
[[Categoria:Linux Kernel in a Nutshell]]

Versione attuale delle 13:13, 28 giu 2013

Linux Kernel in a Nutshell

Sommario

Parte I
Compilare il kernel
  1. Introduzione
  2. Requisiti
  3. Procurarsi i sorgenti
  4. Configurazione e compilazione
  5. Installazione e avvio
  6. Aggiornare il kernel
Parte II
Personalizzazioni principali
  1. Personalizzare un kernel
  2. Ricette per configurare un kernel
Parte III
Guide di riferimento per il kernel
  1. Guida di riferimento dei parametri di boot del kernel - parte1
  2. Guida di riferimento dei parametri di boot del kernel - parte2
  3. Guida di riferimento dei parametri di compilazione del kernel
  4. Guida di riferimento delle opzioni di configurazione del kernel - parte1
  5. Guida di riferimento delle opzioni di configurazione del kernel - parte2
Parte IV
Informazioni aggiuntive
  1. Programmi utili
  2. Bibliografia

Il capitolo precedente ci ha insegnato i meccanismi per la riconfigurazione del kernel; in questo capitolo arriva la parte interessante, in cui si possono trovare tutte le modifiche più comuni che gli utenti hanno bisogno di apportare ai loro kernel, con le istruzioni specifiche per effettuarle.

Dischi

Il kernel Linux supporta una grande varietà di differenti tipi di disco. Questa sezione mostra come configurare il kernel in modo tale che supporti la maggior parte dei modelli più comuni di controller di disco.

Dispositivi USB

Per utilizzare un dispositivo di archiviazione USB (come quelli chiamati comunemente memorie "flash" USB, oppure dischi esterni USB) il supporto USB deve prima funzionare correttamente. Fare riferimento alla ricetta nella sezione chiamata USB per sapere come fare.

Un dispositivo di archiviazione USB può essere identificato utilizzando il programma lsusb. Se la sequenza di comandi che segue produce i risultati mostrati, nel sistema è presente un dispositivo di archiviazione USB:

$/usr/sbin/lsusb -v | grep Storage 
      bInterfaceClass         8 Mass Storage 

Abilitarla nel modo seguente:

1. Un dispositivo di archiviazione USB è in realtà undispositivo USB SCSI che comunica su un collegamento USB. Per questo motivo, deve essere abilitato il sottosistema SCSI:

Device Drivers 
     SCSI Device Support 
         [*] SCSI Device Support 

2. Anche nel sistema SCSI, si deve abilitare il "SCSI disk support" affinchè il dispositivo venga montato correttamente:

Device Drivers 
    SCSI Device Support 
        [*] SCSI disk support 

3. Abilitare il supporto di archiviazione USB:

Device Drivers 
   USB Support 
   [M] USB Mass Storage support 

Nelle pagine che seguono verranno illustrate specifici dispostivi di archiviazione USB per i quali si rende necessaria una configurazione differente, in quanto non seguono gli standard USB e richiedono un codice speciale. Se si possiede uno di questi dispositivi, è necessario abilitare il supporto per essi.

Dischi IDE

I dischi IDE sono i più comuni dischi per PC. Il dispositivo che abilita tali dischi affinchè essi lavorino correttamente è un controller di disco IDE. Per determinare se si abbia un controller di disco IDE sul proprio sistema, usare il comando lspci nel seguente modo:

$/usr/sbin/lspci | grep IDE 
00:1f.1 IDE interface: Intel Corporation 82801EB/ER (ICH5/ICH5R) IDE 
Controller (rev 02) 
00:1f.2IDEinterface:IntelCorporation82801EB(ICH5)SATAController(rev 
02) 

Tenete presente che il risultato del comando lspci probabilmente non sarà identico a quello mostrato sopra. Ciò che importa invece è che il comando mostri un qualunque controller IDE (il primo dispositivo nel precedente esempio). Se si riscontrano solo controller SATA, vedere la sezione successiva 'Serial ATA (SATA)'.

Ora seguiamo i seguenti passi:

1. Abilitare il supporto PCI per il kernel:

Bus options (PCI, PCMCIA, EISA, MCA, ISA) 
    [*] PCI Support 

2. Abilitare il sottosistema IDE e il supporto IDE:

Device Drivers 
    [*] ATA/ATAPI/MFM/RLL support 
    [*]   Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support 

3. Nel sistema ATA, occorre abilitare lo specifico tipo di controller IDE che si possiede, al fine di farlo funzionare correttamente. Per avere un buon backup nel caso si selezioni il tipo errato, selezionare la voce controller IDE 'generico':

Device Drivers 
    ATA/ATAPI/MFM/RLL support 
        [*]     generic/default IDE chipset support 

4. Abilitare i differenti controller PCI IDE:

Device Drivers 
    ATA/ATAPI/MFM/RLL support 
        [*]     PCI IDE chipset support 

Ciò porta all'apertura di un lungo sottomenu di differenti tipi di controller IDE. Selezionare il proprio in base al nome del dispositivo mostrato col comando lspci

Serial ATA (SATA)

SATA è un tipo di controller di disco che rappresenta il successore del controller di disco IDE. Per determinare se si possiede sul sistema un controller di disco SATA, lanciare il seguente comando:

$/usr/sbin/lspci | grep SATA 
00:1f.2IDEinterface:IntelCorporation82801EB(ICH5)SATAController(rev 
02) 

Tenere presente che il risultato del comando probabilmente non sarà identico. Ciò che importa è che il comando mostri un qualunque dispositivo SATA. I dischi SATA usano una libreria kernel chiamata libata che si occupa della maggior parte delle funzionalità di SATA. That library uses the SCSI layer to talk to the block layer, so several different kernel options need to be enabled in order for SATA disks to work properly.

1. Abilitare il supporto PCI per il kernel:

Bus options (PCI, PCMCIA, EISA, MCA, ISA) 
    [*] PCI Support 

2. Abilitare il sottosistema SCSI:

Device Drivers 
    SCSI Device Support 
        [*] SCSI Device Support 

3. Anche nel sistema SCSI, deve essere abilitata la voce "SCSI disk support" affinchè il dispositivo funzioni correttamente:

Device Drivers 
    SCSI Device Support 
        [*] SCSI disk support 

4. Le opzioni SATA sono sotto la sezione "SCSI low-level drivers":

Device Drivers 
    SCSI Device Support 
        SCSI low-level drivers 
            [*] Serial ATA (SATA) support 

5. In questa sezione, abilitare il particolare controller SATA che si possiede. Vedere l'output del comando lspci precedentemente menzionato per avere una lista dei tipi di controller SATA presenti sul proprio sistema. Per esempio, la maggior parte delle schede madri INTEL richiedono il driver PIIX/ICH SATA (come mostrato nel precedente esempio):

Device Drivers 
    SCSI Device Support 
        SCSI low-level drivers 
            [*] Serial ATA (SATA) support 
            [*]   Intel PIIX/ICH SATA support 

Masterizzare un CD-ROM

Masterizzare un CD-ROM è davvero semplice in Linux. Se il kernel che si possiede permette la lettura di un CD-ROM, allora ne permetterà anche la masterizzazione. Ci sono due metodi per abilitare il supporto CD-ROM in Linux, uno per i lettori IDE ed uno per i lettori SCSI e SATA

Lettori CD-ROM IDE

I lettori CD-ROM IDE sono gestiti dallo stesso controller IDE del disco principale. Assicurarsi che il controller IDE sia correttamente supportato come descritto nella sezione Dischi IDE. Se lo è, allora occorre selezionare solo un'altra voce nella procedura di configurazione:

Device Drivers 
    [*] ATA/ATAPI/MFM/RLL support 
    [*]   Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support 
    [M]     Include IDE/ATAPI CDROM support 

Lettori CD-ROM SCSI e SATA

I lettori CD-ROM SCSI e SATA sono gestiti dallo stesso controller del disco principale. Assicurarsi che il controller SCSI o SATA sia correttamente supportato. Per i dischi SATA, vedere la precedente sezione Serial ATA (SATA). Per supportare lettori CD-ROM SCSI o SATA, il driver CD-ROM SCSI deve essere abilitato:

Device Drivers 
    SCSI Device Support 
        [*] SCSI CDROM support 

Una volta che è stato abilitato, il lettore CD-ROM SCSI o SATA dovrebbe funzionare correttamente.

Dispositivi

Linux supporta un grande numero di differenti tipi di dispositivi (più di qualunque altro sistema operativo). Questa sezione descrive come abilitare i dispositivi più comuni.

USB

Linux supporta molti tipi di dispositivi USB. Per abilitare il supporto USB, bisogna innanzitutto abilitare il supporto per il controller USB, che gestisce il collegamento USB sulla macchina. Per determinare se la propria macchina possiede un controller USB, e di quale tipo è, lanciare il seguente comando:

$/usr/sbin/lspci | grep USB 
00:1d.0 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI 
Controller #1 (rev 02) 
00:1d.1 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI 
Controller #2 (rev 02) 
00:1d.2 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI 
Controller #3 (rev 02) 
00:1d.3 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI 
Controller #4 (rev 02) 
00:1d.7 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB2 EHCI 
Controller (rev 02) 

Notare che probabilmente l'output del comando non sarà identico a quello mostrato sopra. Ciò che importa è che il comando mostri un qualche controller USB.

1. Abilitare il supporto PCI per il kernel:

Bus options (PCI, PCMCIA, EISA, MCA, ISA) 
    [*] PCI Support 

2. Abilitare il supporto USB per il kernel:

Device Drivers 
    USB Support 
        [M] Support for Host-side USB 

3. Abilitare lo specifico controller host USB per la propria macchina (per maggior sicurezza abilitarli tutti se non si conosce con certezza quale si possiede):

Device Drivers 
    USB Support 
    ---   USB Host Controller Drivers 
    [M]   EHCI HCD (USB 2.0) support 
    [M]   OHCI HCD support 
    [M]   UHCI HCD (most Intel and VIA) support 

4. Bisogna abilitare i driver anche per gli specifici dispositivi individuali USB. Gran parte di essi si trovano nella sezione driver USB principale:

Device Drivers 
    USB Support 

Ma alcuni dispositivi, come Video USB, DVB e Audio, sono elencati nella sezione che gestisce tutti questi tipi di dispositivi. Per esempio, il driver audio USB può essere trovato nel menu audio:

Device drivers 
    Sound 
        [*] Sound card support 
            [*] Advanced Linux Sound Architecture 
                USB Devices 
                    [M] USB Audio/MIDI driver 

Per inserire dispositivi di archiviazione USB (USB flash), vedere la sezione chiamata "Archiviazione USB", all'inizio di questo capitolo.

IEEE 1394 (FireWire)

IEEE 1394 è comunemente conosciuta col nome FireWire, il nome con il quale fu pubblicizzata dalla Apple Computer. IEEE 1394 è un bus ad alta velocità che connette dispositivi esterni, come i dispositivi USB.

Per determinare se sulla propria macchina sia presente un controller FireWire e di quale tipo sia, lanciare il seguente comando:

$/usr/sbin/lspci | grep FireWire 
06:0c.0 FireWire (IEEE 1394): Texas Instruments TSB43AB22/A IEEE-1394a-2000 
Controller (PHY/Link) 
06:0d.2 FireWire (IEEE 1394): Creative Labs SB Audigy FireWire Port (rev 04)

Notare che probabilmente l'output non sarà identico; ciò che importa è che il comando mostri un qualche controller FireWire.

1. Abilitare il supporto PCI per il kernel:

Bus options (PCI, PCMCIA, EISA, MCA, ISA) 
    [*] PCI Support 

2. Abilitare il supporto IEEE 1394 per il kernel:

Device Drivers 
    IEEE 1394 (FireWire) support 
        [*] IEEE 1394 (FireWire) support 

3. Abilitare il particolare tipo di host controller FireWire che si possiede:

Device Drivers 
    IEEE 1394 (FireWire) support 
        [*] IEEE 1394 (FireWire) support 
        ---   Device Drivers 
        [M]   Texas Instruments PCILynx support 
        [M]   OHCI-1394 support 

4. Per finire, abilitare i particolari tipi di dispositivi FireWire che si possiedono:

Device Drivers 
    IEEE 1394 (FireWire) support 
        [*] IEEE 1394 (FireWire) support 
        ---   Protocol Drivers 
        [M]   OHCI-1394 Video support 
        [M]   SBP-2 support (Harddisks etc.) 
        [ ]     Enable Phys DMA support for SBP2 (Debug) 
        [M]   Ethernet over 1394 
        [M]   OHCI-DV I/O support 
        [M]   Raw IEEE1394 I/O support 

PCI Hotplug

I sistemi PCI hotplug stanno diventando sempre più popolari grazie all'uso di Express Card e laptop docking stations.

Per determinare se la propria macchina possieda un controller Express Card, controllare l'hardware per verificare se si può inserire una Express Card.

1. Abilitare il supporto PCI per il kernel:

Bus options (PCI, PCMCIA, EISA, MCA, ISA) 
    [*] PCI Support 

2. Abilitare il supporto PCI hotplug per il kernel:

Bus options (PCI, PCMCIA, EISA, MCA, ISA) 
    [*] PCI Support 
    PCI Hotplug Support 
        [M] Support for PCI Hotplug (EXPERIMENTAL) 

3. C'è un vasta scelta di differenti tipi di controller PCI hotplug. Per il supporto di gran parte dei portatili e Express Card, abilitare il controller ACPI:

Bus options (PCI, PCMCIA, EISA, MCA, ISA) 
    [*] PCI Support 
    PCI Hotplug Support 
        [M] Support for PCI Hotplug (EXPERIMENTAL) 
        [M]   ACPI PCI Hotplug driver 

4. Abilitare ance il controller PCI Express:

Bus options (PCI, PCMCIA, EISA, MCA, ISA) 
    [*] PCI Support 
    [*] PCI Express Support 
    [M]   PCI Express Hotplug driver 

PCMCIA/CardBus

Il supporto per dispositivi PCMCIA e CardBus è fabbricato su quasi ogni portatile. In ogni caso, i portatili più recenti si stanno orientando verso il formato ExpressCard (vedere la ricetta PCI Hotplug nella sezione precedente, PCI Hotplug).

Per determinare se sulla propria macchina si possieda un controller PCMCIA, controllare l'hardware per verificare se una card PCMCIA può essere inserita.

1. Abilitare il supporto PCI per il kernel:

Bus options (PCI, PCMCIA, EISA, MCA, ISA) 
    [*] PCI Support 

2. Abilitare il supporto PCCARD per il kernel:

Bus options (PCI, PCMCIA, EISA, MCA, ISA) 
    PCCARD (PCMCIA/CardBus) support 
        [M] PCCard (PCMCIA/CardBus) support 

3. Abilitare il supporto PCMCIA e il supporto CardBus per coprire il maggior numero di dispositivi:

Bus options (PCI, PCMCIA, EISA, MCA, ISA) 
    PCCARD (PCMCIA/CardBus) support 
        [M] PCCard (PCMCIA/CardBus) support 
        [M]   16-bit PCMCIA support 
        [*]   32-bit CardBus support 

Abilitare il tipo di card bridge per il proprio portatile. Il più comune è il controller "yenta-like":

Bus options (PCI, PCMCIA, EISA, MCA, ISA) 
    PCCARD (PCMCIA/CardBus) support 
        [M] PCCard (PCMCIA/CardBus) support 
        [M]   CardBus yenta-compatible bridge support 
        [ ]   Cirrus PD6729 compatible bridge support 
        [ ]   i82092 compatible bridge support 
        [ ]   i82365 compatible bridge support 
        [ ]   Databook TCIC host bridge support 

Audio (ALSA)

Advanced Linux Sound Architecture (ALSA) è l'attuale sound system per il kernel Linux. Un sound system meno recente (OSS) è stato abbandonato, e quasi tutti i vecchi driver sono stati rimossi dall'albero dei sorgenti del kernel.

Per determinare quale tipo di sound controller sia presente sulla propria macchina, lanciare il seguente comando:

$/usr/sbin/lspci | grep -i audio 
00:1f.5 Multimedia audio controller: Intel Corporation 82801EB/ER (ICH5/ 
ICH5R) AC'97 Audio Controller (rev 02) 
06:0d.0 Multimedia audio controller: Creative Labs SB Audigy (rev 04) 

Notare che l'output probabilmente non sarà identico; ciò che importa è che il comando mostri un qualche controllers audio.

1. Abilitare il supporto base audio:

Device Drivers 
    Sound 
        [M] Sound Card Support 

2. Abilitare ALSA:

Device Drivers 
    Sound 
        [M] Sound Card Support 
            [M] Advanced Linux Sound Architecture 

3. C'è un certo numero di differenti opzioni base ALSA, come per esempio il supporto per il superato protocollo audio OSS. In presenza di applicazioni meno recenti, si dovrebbero abilitare le relative opzioni:

Device Drivers 
    Sound 
        [M] Sound Card Support 
            [M] Advanced Linux Sound Architecture 
            [M]   OSS Mixer API 
            [M]   OSS PCM (digital audio) API 
            [ ]     OSS PCM (digital audio) API - Include plugin system 

4. Abilitare il particolare tipo di dispositivo audio che si possiede. Le voci relative a PCI card audio sono nel sottomenu PCI:

Device Drivers 
    Sound 
        [M] Sound Card Support 
            [M] Advanced Linux Sound Architecture 
                PCI Devices 

CPU

Se si desidera avere un kernel che lavori il più velocemente possibile per il proprio hardware e processore, sono poche le opzioni sulle quali bisogna agire per migliorare le performance. Questa sezione mostrerà alcune delle opzioni che si possono configurare in base ai processori.

Tipi di processori

Nel kernel linux possiamo modificare un gran numero di opzioni per i diversi processori. La prima informazione da ricavare è l'esatto tipo di processore che si sta usando. Per scoprire ciò, lanciare il seguente comando:

$cat /proc/cpuinfo  | grep "model name" 
model name      : Intel(R) Xeon(TM) CPU 3.20GHz 

Notare che l'output probabilmente non sarà identico; ciò che importa è che il comando mostri il nome del modello del processore presente nel sistema.

1. Selezionare il tipo di sottoarchitettura del processore:

Processor type and features 
    Subarchitecture Type 
        (X) PC-compatible 
        ( ) AMD Elan 
        ( ) Voyager (NCR) 
        ( ) NUMAQ (IBM/Sequent) 
        ( ) Summit/EXA (IBM x440) 
        ( ) Support for other sub-arch SMP systems with more than 8 CPUs 
        ( ) SGI 320/540 (Visual Workstation) 
        ( ) Generic architecture (Summit, bigsmp, ES7000, default) 
        ( ) Support for Unisys ES7000 IA32 series 

A meno che la propria macchina non appartenga ad uno dei tipi specifici elencati sopra, selezionare la voce PC-compatibile. Comunque, se si desidera creare un singolo kernel che possa girare su tutti i tipi di macchine mostrate, selezionare la voce Generic architecture option. Alcune delle opzioni potrebbero non essere presenti se non si è selezionato l'opzione Symmetric multiprocessing support.

2. Selezionare il tipo di famiglia di processore. L'opzione PC-compatible deve essere selezionata dalle precedenti opzioni affinchè venga mostrato questo sottomenu:

Processor type and features 
    Processor family 
        ( ) 386 
        ( ) 486 
        ( ) 586/K5/5x86/6x86/6x86MX 
        ( ) Pentium-Classic 
        ( ) Pentium-MMX 
        ( ) Pentium-Pro 
        ( ) Pentium-II/Celeron(pre-Coppermine) 
        ( ) Pentium-III/Celeron(Coppermine)/Pentium-III Xeon 
        ( ) Pentium M 
        (X) Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon 
        ( ) K6/K6-II/K6-III 
        ( ) Athlon/Duron/K7 
        ( ) Opteron/Athlon64/Hammer/K8 
        ( ) Crusoe 
        ( ) Efficeon 
        ( ) Winchip-C6 
        ( ) Winchip-2 
        ( ) Winchip-2A/Winchip-3 
        ( ) GeodeGX1 
        ( ) Geode GX/LX 
        ( ) CyrixIII/VIA-C3 
        ( ) VIA C3-2 (Nehemiah) 
        ( ) Generic x86 support 

Per maggiori dettagli su questa fase della configurazione, si veda la voce M386 al Capitolo 11 per una completa descrizione di come scegliere la corretta voce di processore in base a quello che si possiede, e per il numero di macchine sul quale si voglia far girare il kernel.

SMP

Se il proprio sistema ha più di una CPU, o una CPU Dual Core o Hyperthreaded, si dovrebbe selezionare l'opzione multiprocessore per il kernel linux in modo da portare vantaggi ai processori addizionali. Se non lo si farà, si sprecheranno risorse per gli altri processori senza tuttavia usarli del tutto.

Abilitare il multiprocessing:

Processor type and features 
    [*] Symmetric multi-processing support 

Preemption

Sistemi che fungono da server devono soddisfare a diversi requisiti fra i quali quelli di essere usati come desktop per applicazioni audio e video. Il kernel permette diversi modi di "preemption" in modo da affrontare diversi carichi di lavoro. "Preemption" è la capacità del kernel di interrompere se stesso mentre sta facendo qualcos'altro, in modo da lavorare per qualcosa che abbia una priorità più alta, ad esempio come aggiornare un programma audio o video.

Per cambiare a un diverso modello di preemption, usare questo menu:

Processor type and features 
    Preemption Model 
        (X) No Forced Preemption (Server) 
    ( ) Voluntary Kernel Preemption (Desktop) 
    ( ) Preemptible Kernel (Low-Latency Desktop) 


Se si desidera rendere il proprio kernel ancora più reattivo verso priorità più elevate di quanto non lo possa essere normalmente con preemption, si possono anche autorizzare interruzioni a una delle protezioni principali interne al kernel:

Processor type and features 
    [*] Preempt The Big Kernel Lock 

Questa opzione può essere selezionata solo se in precedenza si sono selezionate le voci "Preemptible Kernel" o "Symmetric multi-processin support".

Suspend

Il kernel Linux ha la capacità di autospendersi a disco, permettendo di togliere l'alimentazione e poi, successivamente, di rialimentare e tornare esattamente nel punto in cui la macchina era stata sospesa. Questa funzionalità è molto utile sui laptop nei quali gira Linux

Abilitare questa funzione selezionando:

Power management options (ACPI, APM) 
    [*] Software Suspend 

Il kernel ha bisogno di sapere dove salvare l'immagine del kernel sospesa e poi successivamente da dove riesumarla. Questa locazione è di solito una partizione di swap del kernel sul disco. Per specificare quale partizione dovrebbe essere configurato questo:

Power management options (ACPI, APM) 
    (/dev/hda3) Default resume partition 

Assicurarsi di specificare la partizione giusta per la sospensione della macchina e non usare una partizione in uso dal sistema per dei dati. Il nome della partizione corretta può essere ricavato lanciando il seguente comando:

$/sbin/swapon -s | grep dev | cut -f 1 -d ' ' 
/dev/hda3 

Usare l'output del comando precedente in questa opzione di configurazione del kernel e nella riga di boot del kernel dove viene specificato da dove il kernel dovrebbe essere riesumato. Dopo che la macchina è stata sospesa, per farla ripartire correttamente, passare l'argomento resume=/dev/swappartition alla riga di comando del kernel affinchè usi l'immagine corretta. Se non si vuole arichiviare l'immagine sospesa, usare l'argomento "noresum" da riga di comando del kernel.

CPU Frequency Scaling

La maggior parte dei moderni processori possono rallentare il clock interno del processore in modo da preservare alimentazione e durata della batteria. Linux supporta questa capacità e offre una varietà di regolatori di alimentazione. Differenti regolatori implementano differenti heuristics in modo da determinare come variare la velocità del processore in funzione della velocità del sistema e delle altre variabili.

1. Abilitare la funzionalità della frequenza di scaling di base:

Power management options (ACPI, APM) 
    [*] CPU Frequency scaling 

2. Selezionare i differenti regolatori di frequenza che si desidera utilizzare:

Power management options (ACPI, APM) 
    [*] CPU Frequency scaling 
    [*]   'performance' governor 
    [*]   'powersave' governor 
    [*]   'userspace' governor for userspace frequency scaling 
    [*]   'ondemand' cpufreq policy governor 
    [*]   'conservative' cpufreq governor

Per maggiori informazioni su ciò che fanno i diversi regolatori, vedere la voce CPU_FREQ al Capitolo 11.

3. Selezionare il regolator di default che si desidera lanciare al boot della macchina:

Power management options (ACPI, APM) 
    [*] CPU Frequency scaling 
          Default CPUFreq governor (performance) 

4. Selezionare il particolare tipo di processore della macchina. Per dettagli su come determinare il tipo di processore della macchina, vedere la sezione precedente chiamata "Tipi di processori"

Power management options (ACPI, APM) 
    [*] CPU Frequency scaling 
    ---   CPUFreq processor drivers 
    [ ]   ACPI Processor P-States driver 
    [ ]   AMD Mobile K6-2/K6-3 PowerNow! 
    [ ]   AMD Mobile Athlon/Duron PowerNow! 
    [ ]   AMD Opteron/Athlon64 PowerNow! 
    [ ]   Cyrix MediaGX/NatSemi Geode Suspend Modulation 
    [*]   Intel Enhanced SpeedStep 
    [*]     Use ACPI tables to decode valid frequency/voltage pairs 
    [*]     Built-in tables for Banias CPUs 
    [ ]   Intel Speedstep on ICH-M chipsets (ioport interface) 
    [ ]   Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface) 
    [ ]   Intel Pentium 4 clock modulation 
    [ ]   nVidia nForce2 FSB changing 
    [ ]   Transmeta LongRun

Differenti Modelli di Memoria

Linux su hardware Intel 32 bit può accedere a 64 Gb di memoria, ma l'indirizzo fisico di un processore a 32 bit è di soli 4 Gb. Per lavorare con questa limitazione, Linux può mappare la memoria addizionale in un'altra area e poi selezionarla quando altri programmi ne hanno bisogno. Ma se la propria macchina ha una quantità di memoria più piccola, è più facile per Linux non avere problemi nell'occupare aree più grandi, così risulta benefico dire al kernel quanta memoria si vuole per supportarlo. Per una descrizione più dettagliata di questa opzione, si veda la voce HIGHMEM al Capitolo 11.

Linux suppporta tre differenti modelli di memoria per processori Intel 32 bit, in funzione della memoria disponibile:

- Inferiore a 1 Gb di memoria fisica
- Tra 1 Gb e 4 Gb di memoria fisica
- Oltre 4 Gb di memoria fisica

Per selezionare la quantità di memoria:

Processor type and features 
    High Memory Support 
        (X) off 
        ( ) 4GB 
        ( ) 64GB 

ACPI

Sulla maggior parte dei sistemi moderni basati Intel, ACPI è richiesto dalla macchina per poter funzionare correttamente. ACPI è uno standard che permette al BIOS del computer di lavorare con il sistema operativo, dando accesso all'hardware in modo indiretto, così avendo la possibilità di gestire un ampio raggio di interfaccie con un codice relativamente ristretto e specifico per ogni sistema operativo. ACPI fornisce inoltre una facilità nell'aiutare il suspend e resume della macchina e il controllo della velocità del processore e le ventole. Se si ha un laptop è consigliabile abilitare questa opzione.
Per abilitare ACPI:

Power management options (ACPI, APM)
    ACPI (Advanced Configuration and Power Interface) Support
        [*] ACPI Support

Ci sono una gran varietà di differenti ACPI "drivers" che controllano differenti tipi di interfaccie ACPI. Si dovrebbe abilitare quello specifico che si ha sulla propria macchina:

Power management options (ACPI, APM)
    ACPI (Advanced Configuration and Power Interface) Support
        [*] ACPI Support
        [*]   AC Adapter
        [*]   Battery
        [*]   Button
        [*]   Video
        [*]   Generic Hotkey (EXPERIMENTAL)
        [*]   Fan
        [*]   Processor
        [*]     Thermal Zone
        [ ]   ASUS/Medion Laptop Extras
        [ ]   IBM ThinkPad Laptop Extras
        [ ]   Toshiba Laptop Extras

Collegamento in rete

Il collegamento in rete è richiesto per quasi tutte le macchine moderne e Linux supporta pressochè qualsiasi opzione di rete disponibile. Qui vi mostrerò solo una parte di una moltitudine di possibilità.

Per tutte le opzioni di rete, comprendenti diversi drivers, l'opzione della configurazione di rete principale deve essere abilitata:

Networking
    [*] Networking support

L'opzione TCP/IP dovrebbe anch'essa essere selezionata, in modo da permettere alla macchina di comunicare con altre macchine in internet:

Networking
    [*] Networking support
          Networking options
              [*] TCP/IP networking

Netfilter

La parte Netfilter del Linux Kernel è una struttura per il filtraggio e la manipolazione di tutti i pacchetti della rete che passano attraverso la macchina. È comunemente utilizzato nel caso si volesse abilitare un firewall sulla macchina per proteggersi da diversi sistemi in internet, oppure per utilizzare la macchina come proxy per altre macchine in rete. Per ulteriori dettagli in merito a Netfilter, per favore si legga NETFILTER.

Per abilitare l'opzione principale Netfilter:

Networking
    [*] Networking support
          Networking options
              [*] Network packet filtering (replaces ipchains)

È raccomandato abilitare Netfilter netlink interface e Xtables support quando si utilizza netlink:

Networking
    [*] Networking support
          Networking options
              [*] Network packet filtering (replaces ipchains)
                    Core Netfilter Configuration
                        [*] Netfilter netlink interface
                        [*] Netfilter Xtables support (required for ip_tables)

I differenti protocolli che si vogliono filtrare dovrebbero anch'essi essere selezionati:

Networking
    [*] Networking support
          Networking options
              [*] Network packet filtering (replaces ipchains)
                    IP: Netfilter Configuration
                        [M] Connection tracking (required for masq/NAT)
                        [ ]   Connection tracking flow accounting
                        [ ]   Connection mark tracking support
                        [ ]   Connection tracking events (EXPERIMENTAL)
                        [ ]   SCTP protocol connection tracking support (EXPERIMENTAL)
                        [M]   FTP protocol support
                        [ ]   IRC protocol support
                        [ ]   NetBIOS name service protocol support (EXPERIMENTAL)
                        [M]   TFTP protocol support
                        [ ]   Amanda backup protocol support
                        [ ]   PPTP protocol support
                        [ ]   H.323 protocol support (EXPERIMENTAL)

Drivers di rete

Linux supporta un vasto assortimento di dispositivi di rete. Il più utilizzato è un dispositivo di rete PCI, nel quale è possibile collegare un cavo ethernet. Per determinare se si ha un dispositivo di rete PCI e di che tipo si tratta, digitare il seguente comando:

$ /usr/sbin/lspci | grep Ethernet

03:0c.0 Ethernet controller: D-Link System Inc RTL8139 Ethernet (rev 10)
03:0e.0 Ethernet controller: Intel Corporation 82545GM Gigabit Ethernet Controller (rev 04)

Nota che la vostra risposta non sarà probabilmente identica; importante è che il comando mostra almeno un dispositivo PCI ethernet.

1. Abilitare il supporto PCI per il kernel:

Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support

2. Abilitare il supporto base per i dispositivi di rete:

Device Drivers
    Network device support
        [*] Network device support

3. Poi arriva il divertente compito di trovare il driver del dispositivo specifico per il vostro hardware. Il posto più comune per trovare dispotivi ethernet per hardware moderno è nella sezione gigabit della selezione dei drivers:

Device Drivers
    Network device support
        [*] Network device support
            Ethernet (1000 Mbit)

Alcuni dispositivi ethernet più datati si possono trovare nella sezione 10- e 100-Mbit:

Device Drivers
    Network device support
        [*] Network device support
            Ethernet (10 or 100Mbit)

Guardate in queste sezioni per trovare i drivers adatti per i vostri dispositivi specifici.

IrDA

IrDA è un protocollo a infrarossi usato da certi laptops e PDAs per trasmettere su distanze molto brevi. È prevalentemente su hardware datato; su hardware più moderno per trasmettere si utilizza il Bluetooth. Si guardi la prossima sezione, "Bluetooth", per configurare il Bluetooth.

1. IrDA è un protocollo di rete, dunque lo si trova nel menu principale dei collegamenti di rete:

Networking
    [*] Networking support
    [*]   IrDA (infrared) subsystem support

2. Un numero di differenti protocolli IrDA può essere selezionato, a dipendenza del tipo di dispositivo con il quale si vuole comunicare e a seconda del programma utilizzato per la comunicazione:

Networking
    [*] Networking support
        --- IrDA (infrared) subsystem support
        ---   IrDA protocols
        [*]   IrLAN protocol (NEW)
        [*]   IrCOMM protocol (NEW)
        [*]   Ultra (connectionless) protocol (NEW)

3. Esiste una vasta gamma di differenti tipi di dispositivi IrDA: alcuni seriali, alcuni PCI e altri basati su USB. Per selezionare il proprio dispositivo specifico IrDA, sceglietelo dal sottomenu di IrDA:

Networking
    [*] Networking support
        --- IrDA (infrared) subsystem support
              Infrared-port device drivers
              --- SIR device drivers
              [ ] IrTTY (uses Linux serial driver)
              --- Dongle support
              --- Old SIR device drivers
              --- Old Serial dongle support
              --- FIR device drivers
              [ ] IrDA USB dongles
              [ ] SigmaTel STIr4200 bridge (EXPERIMENTAL)
              [ ] NSC PC87108/PC87338
              [ ] Winbond W83977AF (IR)
              [ ] Toshiba Type-O IR Port
              [ ] SMSC IrCC (EXPERIMENTAL)
              [ ] ALi M5123 FIR (EXPERIMENTAL)
              [ ] VLSI 82C147 SIR/MIR/FIR (EXPERIMENTAL)
              [ ] VIA VT8231/VT1211 SIR/MIR/FIR

Bluetooth

Bluetooth è una tecnologia wireless che è stata creata per rimpiazzare IrDA per comunicare fra dispositivi su distanze molto brevi. È una tecnologia wireless a corto raggio che è stata progettata per rimpiazzare i cavi, con un'operabilità su un raggio di 10 metri e comunemente utilizzata nei cellulari.

1. Bluetooth è un protocollo di rete, dunque lo si trova nel menu principale dei collegamenti di rete:

Networking
    [*] Networking support
    [*]   Bluetooth subsystem support

2. Ci sono due protocolli principali per la selezione del Bluetooth. Entrambi devono essere abilitati per la piena funzionalità di tutti i tipi di dispositivi Bluetooth:

Networking
    [*] Networking support
        --- Bluetooth subsystem support
        [*]   L2CAP protocol support
        [*]   SCO links support

3. Ci sono relativamente molti drivers disponibili per i singoli dispositivi Bluetooth; questo perchè la maggior parte dei dispositivi segue le specifiche del Bluetooth su come il dispositivo deve funzionare. I drivers marcati nella seguente lista devono essere selezionati per permettere al Bluetooth di funzionare con un dispositivo:

Networking
    [*] Networking support
        --- Bluetooth subsystem support
            Bluetooth device drivers
                [M] HCI USB driver
                [*]   SCO (voice) support
                [ ] HCI UART driver
                [M] HCI BCM203x USB driver
                [M] HCI BPA10x USB driver
                [ ] HCI BlueFRITZ! USB driver
                [ ] HCI DTL1 (PC Card) driver
                [ ] HCI BT3C (PC Card) driver
                [ ] HCI BlueCard (PC Card) driver
                [ ] HCI UART (PC Card) device driver
                [ ] HCI VHCI (Virtual HCI device) driver

Wireless

Il collegamento di rete wireless è molto conosciuto; quasi tutti i laptops moderni hanno un dispositivo di rete wireless integrato. Linux supporta una vasta gamma di drivers wireless e altri ancora vengono aggiunti ogni settimana. Per determinare se avete un dispositivo wireless PCI e di che tipo si tratta, digitate il seguente comando:

$ /usr/sbin/lspci | grep -i wireless

06:05.0 Network controller: Intel Corporation PRO/Wireless 2915ABG MiniPCI Adapter (rev 05)

Nota che la vostra risposta non sarà probabilmente identica; importante è che il comando mostra almeno un dispositivo PCI wireless.

1. Per abilitare il supporto wireless in Linux, l'opzione di configurazione di rete IEEE 802.11 deve essere abilitata. (802.11 è il numero della specifica wireless che tutti i dispositivi seguono).

Networking
    [*] Networking support
    [*]   Generic IEEE 802.11 Networking Stack

2. Inoltre abilitate anche le differenti opzioni del protocollo 802.11 e l'opzione Software MAC per godere del supporto completo di tutti i differenti tipi di dispositivi wireless su Linux:

Networking
    [*] Networking support
    [*]   Generic IEEE 802.11 Networking Stack
    [*]     IEEE 802.11 WEP encryption (802.1x)
    [M]     IEEE 802.11i CCMP support
    [M]     IEEE 802.11i TKIP encryption
    [M]     Software MAC add-on to the IEEE 802.11 networking stack

3. Supporto per i differenti tipi di dispositivi di rete wireless PCI lo troverete nella sezione drivers dei collegamenti di rete della configurazione:

Device Drivers
    Network device support
        Wireless LAN (non-hamradio)
            [*] Wireless LAN drivers (non-hamradio) & Wireless Extensions
            [*]   Wireless Extension API over RtNetlink

C'è una vasta gamma di differenti drivers PCI in questa sezione. Selezionate quella adatta al dispositivo che avete.

I drivers dei dispositivi di collegamento alla rete wireless USB sono in una sezione differente della configurazione:

Device Drivers
    USB Support
        USB Network Adapters

Filesystems

Linux supporta una vasta gamma di tipi di filesystem tradizionali e un certo numero di differenti tipi di filesystem (volume managers, clustered filesystems, ecc.). I tipi di filesystem tradizionali (normali o journaled) possono essere selezionati dal menu principale di configurazione dei File systems:

File systems
    [*] Second extended fs support
    [*] Ext3 journalling file system support
    [ ] Reiserfs support
    [ ] JFS filesystem support
    [ ] XFS filesystem support

Questa sezione vuole mostrare alcuni tipi di filesystem non tradizionali che Linux supporta e come abilitarli.

RAID

RAID da la possibilità di combinare vari dischi assieme, in modo da comportarsi però come fossero un unico disco. Ciò può aiutare a dare modi di fornire ridondanza o velocità di diffusione dei dati fra i differenti dischi. Linux supporta entrambi hardware e software RAID. L'hardware RAID è gestito dal disk controller, senza nessun aiuto necessario del kernel.

1. Il Software RAID è controllato dal kernel e può essere selezionato come opzione:

Device Drivers
    Multi-device support (RAID and LVM)
        [*] Multiple devices driver support (RAID and LVM)
        [*]   RAID support

2. Ci sono vari differenti tipi di configurazione del RAID. Almeno uno deve essere selezionato per permettere al RAID di funzionare correttamente:

Device Drivers
    Multi-device support (RAID and LVM)
        [*] Multiple devices driver support (RAID and LVM)
        [*]   RAID support
        [*]     Linear (append) mode
        [*]     RAID-0 (striping) mode
        [*]     RAID-1 (mirroring) mode
        [*]     RAID-10 (mirrored striping) mode (EXPERIMENTAL)
        [*]     RAID-4/RAID-5 mode
        [*]     RAID-6 mode

Logical Volume Manager e Device Mapper

Molto simile al RAID, Logical Volume Manager (LVM) permette all'utente di combinare differenti blocchi di dispositivi per comportarsi come fossero un blocco unico. In ogni caso, non funziona a livello di dispositivo come il RAID, ma attraverso un blocco con un meccanismo di mappatura dei settori. Questo permette a differenti porzioni di differenti dischi di essere combinate assieme per formare un unico blocco di dispositivo. Per fare ciò, il kernel utilizza qualcosa chiamato Device Mapper (DM).

1. Abilitare il supporto DM nel kernel:

Device Drivers
    Multi-device support (RAID and LVM)
        [*] Multiple devices driver support (RAID and LVM)
        [*]   Device mapper support

2. Ci sono vari moduli d'aiuto che lavorano con il DM per fornire ulteriore funzionalità:

Device Drivers
    Multi-device support (RAID and LVM)
        [*] Multiple devices driver support (RAID and LVM)
        [*]   Device mapper support
        [*]     Crypt target support
        [*]     Snapshot target (EXPERIMENTAL)
        [*]     Mirror target (EXPERIMENTAL)
        [*]     Zero target (EXPERIMENTAL)
        [*]     Multipath target (EXPERIMENTAL)

Condivisione file con Windows

Samba è un programma che permette agli utenti Linux di accedere a macchine Windows nativamente attraverso la rete, fornendo un modo per condividere unità e dispositivi in maniera trasparente. Concede inoltre a Linux di fungere da server Windows, permettendo ai clients Windows di connettersi ad esso, facendogli credere di essere una vera macchina Windows.

Due differenti filesystems permettono a una macchina Linux di connettersi con una macchina Windows: il filesystem SMB e il filesystem CIFS. Per permettere la connessione per Workgroups a Windows o macchine con Windows 95 o 98, selezionare il filesystem SMB:

File systems
    Network File Systems
        [*] SMB file system support (to mount Windows shares etc.)

Per permettere la connessione a nuove macchine Windows è raccomandato invece il filesystem CIFS:

File systems
    Network File Systems
        [*] CIFS support

Per ulteriori dettagli a riguardo le differenze fra questi due filesystem e quando si dovrebbe utilizzarne uno piuttosto dell'altro, guardare per favore le voci SMB_FS e CIFS nel capitolo 11.

OCFS2

OCFS2 è un cluster filesystem della Oracle che funziona allo stesso tempo per una grande installazione di rete, così come un piccolo sistema locale. Questo filesystem è raccomandato per l'utilizzo di grandi database, come Oracle o DB2, perché può essere spostato nel corso del tempo a diversi dischi di sostegno attraverso la rete molto più facilmente rispetto all'ulteriore stoccaggio necessario.

Per abilitare questo filesystem:

File systems
    [*] OCFS2 file system support

Sicurezza

Il kernel Linux supporta differenti modelli di sicurezza fornendo agganci e lasciando la possibilità di creare il proprio modello. Al momento, solo pochi modelli appartengono al codice di default del kernel, ma sviluppatori di nuovi modelli stanno lavorando per ottenerne di più accettati.

Capacità di default di Linux

Il tipo di modello di sicurezza standard di Linux è il modello "capacità". Dovreste sempre selezionare quest'opzione, a meno che si volesse utilizzare un kernel insicuro per qualsiasi ragione.

Per abilitarlo:

Security options
    [*] Enable different security models
    [*]   Default Linux Capabilities

SELinux

Un modello di sicurezza molto conosciuto è chiamato SELinux. Questo modello è supportato da un discreto numero di differenti distribuzioni di Linux.

SELinux richiede che l'opzione di collegamento in rete sia abilitata. Si guardi la sezione precedente "Collegamento in rete" per abilitarla.

SELinux richiede inoltre che la revisione sia abilitata nella configurazione del kernel. Per fare ciò:

General setup
    [*] Auditing support

Ancora, l'opzione di sicurezza del collegamento in rete deve essere abilitata:

Security options
    [*] Enable different security models
    [*]   Socket and Networking Security Hooks

Adesso è possibile selezionare l'opzione SELinux:

Security options
    [*] Enable different security models
    [*] NSA SELinux Support

Ci sono inoltre un certo numero di opzioni individuali di SELinux che si consiglia di abilitare. Si guardi per favore l'aiuto dei singoli elementi per una descrizione più esaustiva su ciò che fanno:

Security options
    [*] Enable different security models
    [*] NSA SELinux Support
    [ ]   NSA SELinux boot parameter
    [ ]   NSA SELinux runtime disable
    [*]   NSA SELinux Development Support
    [*]   NSA SELinux AVC Statistics
    (1)   NSA SELinux checkreqprot default value

Kernel Debugging

Una vasta gamma di differenti opzioni del kernel può aiutare in debugging per capire cosa sta succedendo all'interno del kernel. La susseguente lista mostra le opzioni più comuni che possono essere utili per scoprire nuove cose su come funziona il kernel o aiutare a trovare potenziali problemi all'interno dell'attuale codice sorgente del kernel.

Kernel Log Timestamps

Il kernel da una vasta gamma di messaggi nei suoi logfile. Questi messaggi possono essere letti guardando nel sistema logfile (normalmente situato in /var/log/messages) o digitando il comando dmesg.

Ogni tanto è opportuno vedere esattamente quando questi messaggi sono stati creati. dmesg non da però nessun "segnalibro di tempo" (timestamp) agli eventi che mostra e la risoluzione di /var/log/messages è solamente vicina al secondo. Si può configurare il kernel per assegnare ad ogni messaggio un "segnalibro di tempo" con l'accuratezza del valore di tempo più piccolo misurabile dal kernel (normalmente nel raggio di microsecondi).

Per abilitare l'opzione "segnalibro di tempo" nei messaggi del kernel:

Kernel hacking
    [*] Show timing information on printks

Magic SysRq Keys

I tasti SysRq sulla tastiera possono essere utilizzati per controllare il kernel in vari modi differenti mentre il kernel è in esecuzione o dopo un crash.

Per abilitare quest'opzione:

Kernel hacking
    [*] Magic SysRq key

Per una descrizione completa delle differenti azioni che possono essere attivate con quest'opzione, si guardi per favore il file Documentation/sysrq.txt all'interno del codice del kernel.

Debug Filesystem

Un filesystem basato sulla RAM può essere utilizzato per estrarre un mucchio di differenti informazioni di debugging. Questo filesystem è chiamato debugfs e può essere abilitato:

Kernel hacking
    [*] Debug filesystem

Dopo aver abilitato questa opzione e aver riavviato il kernel recompilato, viene creata una directory /sys/kernel/debug come locazione per l'utente per montare il filesystem debugfs. Per fare ciò manualmente:

$ mount -t debugfs none /sys/kernel/debug

Oppure montare il filesystem automaticamente all'avvio, aggiungendo la seguente linea al file /etc/fstab:

debugfs /sys/kernel/debug debugfs 0 0

Dopo aver montato debugfs, un grande numero di differenti directories e files saranno presenti nella directory /sys/kernel/debug/. Queste sono tutte virtuali e generate dinamicamente dal kernel, come i files in procfs o sysfs. I files possono essere utilizzati come aiuto per eliminare gli errori dai diveri sotto sistemi del kernel o semplicemente per vedere cosa succede al sistema quando è in esecuzione.

General Kernel Debugging

Qui troviamo una vasta gamma di altre buone opzioni di configurazione del kernel che sarebbe opportuno abilitare se si volesse aiutare gli sviluppatori del kernel a risolvere differenti problemi, o semplicemente per apprendere di più come lavora il kernel osservando i messagi che questa opzione rende disponibili. Si noti che se si abilita qualsiasi delle seguenti opzioni, il kernel rallenterà di un poco; se si dovesse osservare una diminuzione delle prestazioni sarebbe opportuno disabilitare le opzioni:

Kernel hacking
    [*] Kernel debugging
    [*]   Detect Soft Lockups
    [ ]   Collect scheduler statistics
    [*]   Debug slab memory allocations
    [*]     Memory leak debugging
    [*]   Mutex debugging, deadlock detection
    [*]   Spinlock debugging
    [*]   Sleep-inside-spinlock checking
    [ ]   kobject debugging
    [ ]   Highmem debugging
    [ ]   Compile the kernel with debug info

This is an indipendent translation of the book Linux Kernel in a Nutshell by Greg Kroah-Hartman. This translation (like the original work) is available under the terms of Creative Commons Attribution-ShareAlike 2.5.


Capitolo originale