[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 67.   Kernel Linux

Il kernel è il nocciolo del sistema operativo. I programmi utilizzano le funzioni fornite dal kernel e in questa maniera sono sollevati dall'agire direttamente con la CPU.

Il kernel Linux è costituito normalmente da un file soltanto, il cui nome può essere vmlinuz, oppure zImage, bzImage e altri ancora, ma può comprendere anche moduli aggiuntivi per la gestione di componenti hardware specifici che devono poter essere attivati e disattivati durante il funzionamento del sistema.

Quando si fa riferimento a un kernel in cui tutte le funzionalità che servono sono incluse nel file principale, si parla di kernel monolitico, mentre quando parte di queste sono poste all'interno di moduli esterni, si parla di kernel modulare. Il kernel monolitico ha il vantaggio di avere tutto in un file, ma nello stesso modo è rigido e non permette di liberare risorse quando le unità periferiche gestite non servono. Il kernel modulare ha il vantaggio di poter disattivare e riattivare i moduli a seconda delle esigenze, in particolare quando moduli distinti gestiscono in modo diverso lo stesso tipo di unità periferica. Tuttavia, a causa della frammentazione in molti file, l'uso dei moduli può essere fonte di errori.

In generale, chi fa per la prima volta l'esperienza di compilarsi un kernel personalizzato, farebbe bene a cominciare incorporando tutto nel file principale, lasciando per una fase successiva la suddivisione in moduli delle funzionalità che possono essere separate da quello. In altri termini, la compilazione dei kernel modulari dovrebbe essere riservata agli utilizzatori che hanno già un'esperienza sufficiente nella gestione dei kernel monolitici.

67.1   Ricompilazione del kernel

Le distribuzioni GNU/Linux tendono a fornire agli utilizzatori un kernel modulare per usi generali. Anche se questo tipo di kernel si adatta sicuramente alla maggior parte delle configurazioni, ci sono situazioni particolari dove è preferibile costruire un proprio kernel, monolitico o modulare che sia.

Per poter comprendere il procedimento di compilazione descritto in questo capitolo, occorre sapere come si compila e si installa un programma tipico distribuito in forma sorgente, come descritto nel capitolo 54.

67.1.1   Kernel monolitico

Il procedimento descritto in questa sezione serve per generare un kernel monolitico, cioè un kernel in un solo file.

Per poter procedere alla compilazione del kernel è necessario avere installato gli strumenti di sviluppo software, cioè il compilatore e i sorgenti del kernel. In particolare, i sorgenti del kernel possono anche essere reperiti presso vari siti, ma principalmente da <http://www.kernel.org>.

Il numero di versione del kernel Linux è strutturato in tre o quattro livelli: w.x.y.z, dove il primo, w, rappresenta il valore più importante, mentre l'ultimo, z, rappresenta quello meno importante. Ciò che conta, è porre attenzione al secondo valore: x. Se si tratta di un numero pari, la versione si riferisce a un kernel ritenuto sufficientemente stabile, mentre un numero dispari rappresenta una versione destinata agli sviluppatori e non ritenuta adatta per l'utilizzo normale.

Se i sorgenti sono stati installati attraverso un disco (un CD-ROM) di una distribuzione, questi si potrebbero trovarsi da qualche parte a partire da /usr/src/, ma attualmente la loro compilazione non richiede una collocazione particolare nel file system, tanto che anche un utente comune, senza privilegi, può farlo, collocando i sorgenti nell'ambito della propria directory personale.

La distribuzione GNU/Linux Debian si limita a piazzare un archivio (un file compresso) nella directory /usr/src/, lasciando all'utente il compito di estrarlo dove meglio crede.

Riquadro 67.1. Procedura superata.

Nelle prime versioni del kernel Linux è stata utilizzata una procedura che attualmente è bene evitare di adottare. L'elenco seguente serve a sottolineare il fatto che nulla di tutto questo va fatto:

  • i sorgenti venivano estratti in modo da iniziare dalla directory /usr/src/linux/, spesso con l'aiuto di un collegamento simbolico, se erano disponibili diverse versioni affiancate;

  • venivano creati o modificati tre collegamenti simbolici contenuti nella directory /usr/include/:

    • /usr/include/asm --> /usr/src/linux/include/asm-i386/

    • /usr/include/linux --> /usr/src/linux/include/linux/

    • /usr/include/scsi --> /usr/src/linux/include/scsi

Si parte con l'estrazione dell'archivio che li contiene; naturalmente l'utente deve estrarre l'archivio in una posizione in cui gli sia concesso di farlo in base ai permessi che lo riguardano:

tar xjvf linux-w.x.y.z.tar.bz2[Invio]

Si tenga presente che i sorgenti possono essere estratti da un utente comune e compilati dallo stesso utente. Ciò che tale utente non dovrebbe poter fare è l'installazione effettiva del kernel.

Una volta installati i sorgenti del kernel, si può passare alla configurazione che precede la compilazione. Per questo, ci si posiziona nella directory dei sorgenti; quindi, dopo aver letto il file README, si può procedere.

cd linux-w.x.y.z[Invio]

La directory corrente deve essere quella a partire dalla quale si diramano i sorgenti del kernel.

make mrproper[Invio]

Serve a eliminare file e collegamenti vecchi che potrebbero interferire con una nuova compilazione. In particolare, elimina la configurazione data in precedenza alla compilazione del kernel.

make defconfig[Invio]

La prima volta che si procede a definire i contenuti di un proprio kernel, conviene partire da una configurazione predefinita, ottenibile con il comando appena mostrato. In pratica si ottiene un file .config con la selezione delle voci ritenute fondamentali. Successivamente si passa alla fase di configurazione:

make config[Invio]

Questa è l'operazione più delicata attraverso la quale si definiscono le caratteristiche e i componenti del kernel che si vuole ottenere. Ogni volta che la si esegue, viene riutilizzato il file .config contenente la configurazione impostata precedentemente, mentre alla fine la nuova configurazione viene salvata nello stesso file. Di conseguenza, ripetendo il procedimento make config, le scelte predefinite corrispondono a quelle effettuate precedentemente.

Il comando make mrproper elimina il file .config, quindi si deve fare attenzione a non eseguire tale comando se non è questa l'intenzione.

L'utilizzo del comando make config rappresenta è un metodo piuttosto spartano di configurare il sistema. Dopo le prime versioni del kernel Linux sono state aggiunte altre possibilità più pratiche, corrispondenti a comandi come quelli seguenti, ma si possono conoscere anche dei modi alternativi con il comando make help:

make menuconfig[Invio]

make xconfig[Invio]

make gconfig[Invio]

In generale, è conveniente usare il comando make menuconfig, che non richiede la grafica, al contrario degli altri due comandi indicati.

Figura 67.2. Il menù principale della configurazione del kernel attraverso il comando make menuconfig.

.---------------------- Linux Kernel Configuration -----------------------.
|  Arrow keys navigate the menu.  <Enter> selects submenus --->.          |
|  Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes, |
|  <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </> |
|  for Search.  Legend: [*] built-in  [ ] excluded  <M> module  < >       |
| .---------------------------------------------------------------------. |
| |        General setup  --->                                          | |
| |    [*] Enable loadable module support  --->                         | |
| |    --- Enable the block layer  --->                                 | |
| |        Processor type and features  --->                            | |
| |        Power management options (ACPI, APM)  --->                   | |
| |        Bus options (PCI, PCMCIA, EISA, MCA, ISA)  --->              | |
| |        Executable file formats  --->                                | |
| |        Networking  --->                                             | |
| |        Device Drivers  --->                                         | |
| |        File systems  --->                                           | |
| |    [*] Instrumentation Support  --->                                | |
| `----v(+)-------------------------------------------------------------' |
|-------------------------------------------------------------------------|
|                    <Select>    < Exit >    < Help >                     |
`-------------------------------------------------------------------------'

Dopo la definizione della configurazione, si può passare alla compilazione del kernel relativo, utilizzando la sequenza di comandi seguente:

make clean && make bzImage[Invio]

Oppure, nelle versioni recenti del kernel, il secondo comando non ha bisogno di specificare l'obiettivo:

make clean && make[Invio]

Si tratta di due operazioni che non richiedono alcun tipo di interazione con l'utente. Al termine della compilazione, se questa ha avuto successo, il nuovo kernel si trova nella directory arch/i386/boot/ con il nome bzImage (questo vale naturalmente nel caso si utilizzi l'architettura x86).

La sigla bzImage sta per big zImage, a indicare che si tratta di un'estensione del formato zImage. Il formato zImage si otterrebbe con il comando make zImage, ma attualmente lo si considera obsoleto.

Naturalmente, per fare in modo che il kernel possa essere utilizzato, questo va collocato dove il sistema che si occupa del suo avvio può trovarlo (parte xi). Di solito lo si copia nella directory radice o in /boot/, dandogli il nome vmlinuz (come di consueto), sistemando poi ciò che serve per il sistema di avvio che si utilizza.

Generalmente, dal momento che si possono utilizzare più kernel alternativi, selezionandoli in fase di avvio, di solito il nome del file è completo della versione del kernel stesso: vmlinuz-w.x.y.z. Inoltre, si conserva una copia del file System.map, mettendola nella stessa directory in cui si trova il kernel, con un nome del tipo System.map-w.x.y.z; infine si fa la stessa cosa con il file .config, a cui si dà normalmente il nome config-w.x.y.z.

Una volta realizzato un kernel è necessario fare una prova per vedere se funziona. Il modo più semplice per il principiante per verificarne il funzionamento, con la garanzia di non poter fare dei danni, è quello di farne una copia in un dischetto di avvio (ovvero un dischetto di boot), ammesso che la dimensione del kernel lo consenta.

È bene ricordare che non si tratta di una copia nel senso normale del termine, perché in questo caso, cioè quello dell'esempio, il dischetto non contiene alcun file system. Di conseguenza, è inutile tentare poi di innestare un dischetto del genere.

È probabile che servano dei privilegi particolari per poter scrivere sul file di dispositivo corrispondente all'unità a dischetti, come si vede nel comando successivo:

cp arch/i386/boot/bzImage /dev/fd0[Invio]

Per utilizzare correttamente questo dischetto di avvio è molto probabile che si debba intervenire prima con il programma rdev o con knl (49.1).

67.1.2   Kernel modulare

Il procedimento per la creazione di un kernel modulare inizia nello stesso modo di quello monolitico e giunge alla creazione di un file che in più ha dei riferimenti a moduli esterni che vengono compilati a parte. Questi moduli, per poter essere gestiti correttamente, necessitano di programmi di servizio che si occupano della loro attivazione e disattivazione.

In questo caso, oltre ai sorgenti del kernel sono necessari i programmi per la gestione dei moduli. Questi si trovano normalmente in archivi il cui nome è organizzato in modo simile a quello dei sorgenti del kernel: modules-w.x.y.tar.gz. La struttura della versione rappresentata dai numeri w.x.y rispecchia lo stesso meccanismo utilizzato per i sorgenti del kernel, però non ne vengono prodotte altrettante versioni, pertanto si deve badare a utilizzare la versione più vicina a quella del kernel che si utilizza. Questo archivio si trova normalmente nella stessa directory del sito dal quale si ottengono i sorgenti del kernel.

Anche i programmi contenuti nell'archivio modules-w.x.y.tar.gz sono in forma sorgente e prima di poterli utilizzare devono essere compilati e installati.

Se si sta ricompilando il kernel attraverso i sorgenti della distribuzione GNU/Linux che si utilizza, è ragionevole supporre che questi programmi di gestione dei moduli siano già stati installati correttamente.

Per ottenere un kernel modulare, dopo la preparazione del file principale del kernel attraverso lo stesso procedimento visto nel caso di un kernel monolitico, si devono compilare i moduli:

make modules[Invio]

Quindi si installano, ma con i privilegi dell'utente root:

make modules_install[Invio]

Quello che si ottiene sono una serie di file oggetto, il cui nome ha un'estensione .ko (Kernel object), raggruppati ordinatamente all'interno di directory discendenti da /lib/modules/w.x.y.z/, dove w.x.y.z rappresenta il numero della versione dei sorgenti del kernel. La posizione di questi file non deve essere cambiata.

Si osservi che la compilazione dei moduli deve essere ripetuta ogni volta che si ricompila la parte principale del kernel; in altre parole, i moduli non sono compatibili con un kernel differente da quello per il quale sono stati realizzati specificatamente, anche se si tratta della stessa versione.

67.1.3   Compilazione del kernel in una distribuzione GNU/Linux Debian

Teoricamente, la distribuzione GNU/Linux Debian consente di compilare il kernel e i moduli secondo il procedimento standard; tuttavia ciò non conviene, se non altro perché l'installazione dei moduli va a rimuovere un collegamento simbolico nella directory /lib/modules/ che punta a /etc/modprobe.conf.

La distribuzione GNU/Linux Debian mette a disposizione uno strumento per facilitare la compilazione del kernel, passando per la creazione di un pacchetto Debian vero e proprio, che poi può essere installato secondo la procedura comune della distribuzione stessa. Il pacchetto in questione è denominato kernel-package e per questo scopo può essere usato direttamente senza bisogno di alcuna configurazione. È sufficiente procedere nel modo seguente:

  1. cd directory_iniziale_dei_sorgenti
    

    ci si sposta nella directory iniziale dei sorgenti del kernel;

  2. make  {config|menuconfig|xconfig|...}
    

    si procede con la configurazione del kernel che si vuole ottenere;

  3. make-kpkg clean
    

    ci si prepara alla compilazione;

  4. make-kpkg --revision=versione kernel_image
    

    si esegue la compilazione generando l'archivio Debian corrispondente, nella directory precedente (la directory genitrice), completo di moduli se previsti.

    Questo ultimo passaggio richiede però i privilegi dell'utente root per arrivare alla creazione del pacchetto Debian.

L'esempio seguente si riferisce alla compilazione di un kernel 2.6.21.6 (compresi i moduli eventuali) collocato nella directory ~/linux-2.6.21.6/.

Questa collocazione è volutamente differente da quella standard per la distribuzione GNU/Linux Debian, che invece dovrebbe essere ~/kernel-source-2.6.21.6/, proprio per mostrare che ciò non influisce in questo contesto.

cd ~/linux-2.6.21.6[Invio]

make-kpkg clean[Invio]

su root[Invio]

make-kpkg --revision=custom.1.0 kernel_image[Invio]

Si può osservare che la versione è stata definita dalla stringa custom.1.0. Questo è ciò che viene suggerito nella documentazione originale. In particolare, il numero «1.0» va incrementato ogni volta che si predispone una versione successiva.

Al termine si ottiene l'archivio kernel-image-2.6.21.6_custom.1.0_i386.deb, collocato nella directory precedente a quella dei sorgenti da cui è stato ottenuto; per installarlo basta procedere come segue, usando naturalmente i privilegi dell'utente root:

dpkg -i ../kernel-image-2.6.21.6_custom.1.0_i386.deb[Invio]

67.2   Elementi della configurazione

Gli elementi richiesti per la configurazione del kernel prima della sua compilazione, dipendono molto dalla versione che si possiede. In particolare, può capitare che alcune voci vengano spostate da una versione all'altra del kernel.

Le varie opzioni sono raggruppate in alcuni gruppi principali, che dovrebbero guidare intuitivamente nella configurazione prima della compilazione del kernel:

Nelle sezioni seguenti vengono descritti in parte solo alcuni di questi gruppi di configurazione, mostrando qualche esempio che comunque non può esaurire il problema.

67.2.1   General setup

Questa sezione raccoglie una serie di opzioni di importanza generale, che non hanno trovato una collocazione specifica in un'altra posizione della procedura di configurazione.

[*] Prompt for development and/or incomplete code/drivers
()  Local version - append to kernel release 
[ ] Automatically append version information to the version string 
[*] Support for paging of anonymous memory (swap) 
[*] System V IPC 
[ ] IPC Namespaces 
[*] POSIX Message Queues 
[*] BSD Process Accounting 
[*] BSD Process Accounting version 3 file format 
[ ] Export task/process statistics through netlink (EXPERIMENTAL) 
[ ] UTS Namespaces 
[*] Auditing support 
[ ] Enable system-call auditing support 
< > Kernel .config support 
(15) Kernel log buffer size (16 => 64KB, 17 => 128KB) 
[*] Cpuset support 
[ ] Create deprecated sysfs files 
[*] Kernel->user space relay support (formerly relayfs) 
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support 
() Initramfs source file(s) 
[*] Optimize for size (Look out for broken compilers!) 
[ ] Configure standard kernel features (for small systems) ---> 
    Choose SLAB allocator (SLAB) ---> 

67.2.2   Enable loadable module support

Questa sezione della procedura di configurazione permette di attivare il sistema di gestione dei moduli. I moduli sono blocchetti di kernel separati che possono essere attivati e disattivati durante il funzionamento del sistema. Solo alcune parti del kernel possono essere gestite in forma di modulo.

Se si intende creare un kernel modulare, è evidente la necessità di attivare questa gestione all'interno della parte principale del kernel stesso.

[*] Enable loadable module support   
[*]   Module unloading               
[ ]     Forced module unloading      
[*]   Module versioning support      
[ ]   Source checksum for all modules
[*]   Automatic kernel module loading

67.2.3   Processor type and features

Questa sezione serve a definire il tipo di microprocessore utilizzato. In generale, se si utilizza un'architettura di tipo x86, la selezione del tipo di microprocessore 386 garantisce la creazione di un kernel compatibile nella maggior parte delle situazioni, a discapito però delle prestazioni.

Sempre nel caso di architettura di tipo x86, è possibile abilitare l'emulazione per il coprocessore matematico (i387), che in alcuni elaboratori molto vecchi non è incluso. Di solito, l'inclusione del codice di emulazione non crea problemi di conflitti, perché viene individuata automaticamente la presenza dell'hardware relativo e l'emulazione non viene attivata se non quando necessario. In tal modo, includendo questa funzionalità si genera un kernel più compatibile.

L'esempio che si vede sotto si riferisce a una compatibilità limitata a microprocessori i686 o superiori:

[*] Tickless System (Dynamic Ticks)                                      
[*] High Resolution Timer Support                                     
[*] Symmetric multi-processing support                                
    Subarchitecture Type (PC-compatible)  --->                        
[*] Paravirtualization support (EXPERIMENTAL)                         
[ ]   VMI Paravirt-ops support                                        
    Processor family (Pentium-Pro)  --->                              
[*] Generic x86 support                                               
[*] HPET Timer Support                                                
(8) Maximum number of CPUs (2-255)                                    
[*] SMT (Hyperthreading) scheduler support                            
[*] Multi-core scheduler support                                      
    Preemption Model (Preemptible Kernel (Low-Latency Desktop))  ---> 
[*] Preempt The Big Kernel Lock                                       
[*] Machine Check Exception                                           
<M>   Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4
[*]   check for P4 thermal throttling interrupt.                      
<M> Toshiba Laptop support                                            
<M> Dell laptop support                                               
[*] Enable X86 board specific fixups for reboot                       
<M> /dev/cpu/microcode - Intel IA32 CPU microcode support             
<M> /dev/cpu/*/msr - Model-specific register support                  
<M> /dev/cpu/*/cpuid - CPU information support                        
    Firmware Drivers  --->                                            
    High Memory Support (4GB)  --->                                   
    Memory model (Flat Memory)  --->                                  
[ ] 64 bit Memory and IO resources (EXPERIMENTAL)                     
[ ] Allocate 3rd-level pagetables from highmem                        
[ ] Math emulation                                                    
[*] MTRR (Memory Type Range Register) support                         
[*] Boot from EFI support                                             
[*] Enable kernel irq balancing                                       
[*] Enable seccomp to safely compute untrusted bytecode               
    Timer frequency (1000 HZ)  --->                                   
[*] kexec system call                                                 
[ ] kernel crash dumps (EXPERIMENTAL)                                 
[ ] Build a relocatable kernel(EXPERIMENTAL)                          
(0x100000) Alignment value to which kernel should be aligned          
[*] Support for suspend on SMP and hot-pluggable CPUs (EXPERIMENTAL)  
[*] Compat VDSO support                                               

67.2.4   Power management options

Questa sezione permette di accedere alle funzionalità legate al controllo dell'alimentazione e al risparmio energetico. In generale si tratta di opzioni delicate che dipendono molto dalle caratteristiche fisiche dell'elaboratore.

[*] Power Management support                                         
[*]   Legacy Power Management API (DEPRECATED)                       
[ ]   Power Management Debug Support                                 
[*]   Suspend to RAM and standby
[ ]   Hibernation (aka 'suspend to disk')
      ACPI Support (Advanced Configuration and Power Interface)  --->
<*>   APM (Advanced Power Management) BIOS support  --->             
      CPU Frequency scaling  --->                                    

L'esempio mostra l'attivazione delle funzionalità in generale, che però devono essere specificate all'interno di altri menù. In generale, dovrebbe essere possibile attivare le funzioni che consentono di spegnere l'elaboratore via software, senza problemi particolari di incompatibilità, selezionando la voce {APM (Advanced Power Management) BIOS Support} e compilando la maschera relativa nel modo seguente:

<*> APM (Advanced Power Management) BIOS support
[ ]   Ignore USER SUSPEND
[ ]   Enable PM at boot time
[*]   Make CPU Idle calls when idle
[ ]   Enable console blanking using APM
[ ]   Allow interrupts during APM BIOS calls
[ ]   Use real mode APM BIOS call to power off

Si osservi che l'attivazione della voce {Use real mode APM BIOS call to power off} può essere controproducente con alcune schede madri che dispongono del BIOS AMI.

67.2.5   Bus options

Questa sezione permette di selezionare la gestione di alcuni tipi di bus. Generalmente è necessario abilitare l'uso di bus ISA e PCI:

[*] PCI support                                         
      PCI access mode (Any)  --->                       
[*]   PCI Express support                               
< >     PCI Express Hotplug driver                      
[*]     Root Port Advanced Error Reporting support      
[*] Message Signaled Interrupts (MSI and MSI-X)         
[*] Interrupts on hypertransport devices                
[*] ISA support                                         
[ ]   EISA support                                      
[ ] MCA support                                         
<M> NatSemi SCx200 support                              
<M>   NatSemi SCx200 27MHz High-Resolution Timer Support
    PCCARD (PCMCIA/CardBus) support  --->               
<M> Support for PCI Hotplug (EXPERIMENTAL)  --->        

Per quanto riguarda la gestione di schede PCMCIA, è necessario attivare la gestione dei vari tipi di integrati che sono in grado di gestire un bus di questo tipo. Si accede a queste voci da {PCCARD (PCMCIA/CardBus) support}:

<M> PCCard (PCMCIA/CardBus) support                   
[ ]   Enable PCCARD debugging                         
<M>   16-bit PCMCIA support                           
[*]     Load CIS updates from userspace (EXPERIMENTAL)
[*]     PCMCIA control ioctl (obsolete)               
---   32-bit CardBus support                          
---   PC-card bridges                                 
<M>   CardBus yenta-compatible bridge support         
<M>   Cirrus PD6729 compatible bridge support         
<M>   i82092 compatible bridge support                
<M>   i82365 compatible bridge support                
<M>   Databook TCIC host bridge support               

67.2.6   Executable file formats

Il kernel deve essere predisposto per il tipo di eseguibili che si vogliono usare. In generale, se possibile, conviene abilitare tutti i tipi disponibili:

<*> Kernel support for ELF binaries
<M> Kernel support for a.out and ECOFF binaries
<*> Kernel support for MISC binaries

67.2.7   Networking

La configurazione delle funzionalità di rete è importante anche se il proprio elaboratore è isolato. Quando è attiva la gestione della rete, il kernel fornisce implicitamente le funzionalità di inoltro dei pacchetti, consentendo in pratica il funzionamento come router. Tuttavia, l'attivazione di ciò dipende dall'inclusione della gestione del file system /proc/ (67.2.21) e dell'interfaccia sysctl (67.2.1). Inoltre, durante il funzionamento del sistema è necessario attivare espressamente l'inoltro IPv4 attraverso un comando simile a quello seguente:

echo '1' > /proc/sys/net/ipv4/ip_forward[Invio]

Esiste anche un comando analogo per IPv6, che però va usato soltanto quando serve veramente, perché con la funzionalità di inoltro attiva, il nodo di rete non prende in considerazione la configurazione automatica di Radvd (sezione 264.6):

echo 1 > /proc/sys/net/ipv6/conf/interfaccia/forwarding[Invio]

--- Networking support                       
      Networking options  --->               
[*]   Amateur Radio support  --->            
<M>   IrDA (infrared) subsystem support  --->
<M>   Bluetooth subsystem support  --->      
<M>   RxRPC session sockets                  
[ ]     RxRPC dynamic debugging              
<M>     RxRPC Kerberos security              
      Wireless  --->                         
<M>   RF switch subsystem support  --->      
<M>   Plan 9 Resource Sharing Support (9P2000)  --->

Le opzioni di funzionamento della rete sono raccolte in un menù a cui si accede dalla voce {Networking options}:

<*> Packet socket                                                   
[*]   Packet socket: mmapped IO                                     
<*> Unix domain sockets                                             
<M> Transformation user configuration interface                     
[ ] Transformation sub policy support (EXPERIMENTAL)                
[ ] Transformation migrate database (EXPERIMENTAL)                  
<M> PF_KEY sockets                                                  
[ ]   PF_KEY MIGRATE (EXPERIMENTAL)                                 
[*] TCP/IP networking                                               
[*]   IP: multicasting                                              
[*]   IP: advanced router                                           
        Choose IP: FIB lookup algorithm  --->
[*]   IP: policy routing                                            
[*]   IP: equal cost multipath                                      
[ ]     IP: equal cost multipath with caching support (EXPERIMENTAL)
[*]   IP: verbose route monitoring                                  
[ ]   IP: kernel level autoconfiguration                            
<M>   IP: tunneling                                                 
<M>   IP: GRE tunnels over IP                                       
[*]     IP: broadcast GRE over IP                                   
[*]   IP: multicast routing                                         
[*]     IP: PIM-SM version 1 support                                
[*]     IP: PIM-SM version 2 support                                
[ ]   IP: ARP daemon support (EXPERIMENTAL)                         
[*]   IP: TCP syncookie support (disabled per default)              
<M>   IP: AH transformation                                         
<M>   IP: ESP transformation                                        
<M>   IP: IPComp transformation                                     
<M>   IP: IPsec transport mode                                      
<M>   IP: IPsec tunnel mode                                         
<M>   IP: IPsec BEET mode                                           
<M>   INET: socket monitoring interface                             
[*]   TCP: advanced congestion control  --->                        
[ ]   TCP: MD5 Signature Option support (RFC2385) (EXPERIMENTAL)    
<M>   IP virtual server support (EXPERIMENTAL)  --->                
<M>   The IPv6 protocol                                             
[*]     IPv6: Privacy Extensions support                            
[ ]     IPv6: Router Preference (RFC 4191) support                  
[ ]     IPv6: Enable RFC 4429 Optimistic DAD (EXPERIMENTAL)         
<M>     IPv6: AH transformation                                     
<M>     IPv6: ESP transformation                                    
<M>     IPv6: IPComp transformation                                 
[ ]     IPv6: Mobility (EXPERIMENTAL)                               
<M>   IPv6: IPsec transport mode                                    
<M>   IPv6: IPsec tunnel mode                                       
<M>   IPv6: IPsec BEET mode                                         
<M>   IPv6: MIPv6 route optimization mode (EXPERIMENTAL)            
<M>   IPv6: IPv6-in-IPv4 tunnel (SIT driver)                        
<M>   IPv6: IPv6-in-IPv6 tunnel                                     
[ ]   IPv6: Multiple Routing Tables                                 
[*] Security Marking                                                
[*] Network packet filtering framework (Netfilter)  --->            
<M> The DCCP Protocol (EXPERIMENTAL)  --->                          
--- The SCTP Protocol (EXPERIMENTAL)  --->                          
<M> The TIPC Protocol (EXPERIMENTAL)  --->                          
<*> Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)                 
<*>   Classical IP over ATM (EXPERIMENTAL)                          
[ ]     Do NOT send ICMP if no neighbour (EXPERIMENTAL)             
<M>   LAN Emulation (LANE) support (EXPERIMENTAL)                   
<M>     Multi-Protocol Over ATM (MPOA) support (EXPERIMENTAL)       
<M>   RFC1483/2684 Bridged protocols                                
[ ]     Per-VC IP filter kludge                                     
<M> 802.1d Ethernet Bridging                                        
<M> 802.1Q VLAN Support                                             
<M> DECnet Support                                                  
[*]   DECnet: router support (EXPERIMENTAL)                         
<M> ANSI/IEEE 802.2 LLC type 2 Support                              
<M> The IPX protocol                                                
[*]   IPX: Full internal IPX network                                
<M> Appletalk protocol support                                      
<M>   Appletalk interfaces support                                  
<M>     Apple/Farallon LocalTalk PC support                         
<M>     COPS LocalTalk PC support                                   
[*]       Dayna firmware support                                    
[*]       Tangent firmware support                                  
<M>     Appletalk-IP driver support                                 
[*]       IP to Appletalk-IP Encapsulation support                  
[*]       Appletalk-IP to IP Decapsulation support                  
<M> CCITT X.25 Packet Layer (EXPERIMENTAL)                          
<M> LAPB Data Link Driver (EXPERIMENTAL)                            
<M> Acorn Econet/AUN protocols (EXPERIMENTAL)                       
[*]   AUN over UDP                                                  
[*]   Native Econet                                                 
<M> WAN router                                                      
    QoS and/or fair queueing  --->                                  
    Network testing  --->                                           

La gestione relativa a IPTables, diventa accessibile in un menù separato, dopo aver attivato la voce {Network packet filtering framework}:

--- Network packet filtering framework (Netfilter)      
[ ]   Network packet filtering debugging                
[*]   Bridged IP/ARP packets filtering                  
      Core Netfilter Configuration  --->                
      IP: Netfilter Configuration  --->                 
      IPv6: Netfilter Configuration (EXPERIMENTAL)  --->
      DECnet: Netfilter Configuration  --->             
      Bridge: Netfilter Configuration  --->             

Per accedere alla gestione di filtro IPv4, occorre selezionare la voce {IP: Netfilter Configuration}:

<M> IPv4 connection tracking support (required for NAT)     
[*]   proc/sysctl compatibility with old connection tracking
<M> IP Userspace queueing via NETLINK (OBSOLETE)            
<M> IP tables support (required for filtering/masq/NAT)     
<M>   IP range match support                                
<M>   TOS match support                                     
<M>   recent match support                                  
<M>   ECN match support                                     
<M>   AH match support                                      
<M>   TTL match support                                     
<M>   Owner match support                                   
<M>   address type match support                            
<M>   Packet filtering                                      
<M>     REJECT target support                               
<M>   LOG target support                                    
<M>   ULOG target support                                   
<M>   Full NAT                                              
<M>     MASQUERADE target support                           
<M>     REDIRECT target support                             
<M>     NETMAP target support                               
<M>     SAME target support                                 
<M>     Basic SNMP-ALG support (EXPERIMENTAL)               
<M>   Packet mangling                                       
<M>     TOS target support                                  
<M>     ECN target support                                  
<M>     TTL target support                                  
<M>     CLUSTERIP target support (EXPERIMENTAL)             
<M>   raw table support (required for NOTRACK/TRACE)        
<M> ARP tables support                                      
<M>   ARP packet filtering                                  
<M>   ARP payload mangling                                  

Successivamente, dal menù {Device drivers}, {Network device support}, si procede all'inserzione del codice necessario alla gestione delle varie interfacce di rete utilizzate effettivamente.

67.2.8   Device drivers, parallel port support

La gestione della porta parallela non riguarda solo la stampa, dal momento che consente anche l'uso di altri tipi di unità periferiche. In questo gruppo di opzioni è possibile abilitare l'uso delle porte parallele, stabilendo eventualmente il grado di compatibilità di queste.

<M> Parallel port support                               
<M>   PC-style hardware                                 
<M>     Multi-IO cards (parallel and serial)            
[*]     Use FIFO/DMA if available (EXPERIMENTAL)        
[ ]     SuperIO chipset support (EXPERIMENTAL)          
<M>     Support for PCMCIA management for PC-style ports
<M>   AX88796 Parallel Port                             
[*]   IEEE 1284 transfer modes                          

67.2.9   Device drivers, plug and play support

La gestione del Plug & Play permette al kernel di configurare automaticamente alcuni dispositivi che aderiscono a queste specifiche.

[*] Plug and Play support
[ ]   PnP Debug Messages
---   Protocols
[*]   ISA Plug and Play support (EXPERIMENTAL)
[*]   Plug and Play BIOS support (EXPERIMENTAL)
[*]     Plug and Play BIOS /proc interface

67.2.10   Device drivers, block devices

Un dispositivo a blocchi è quello che utilizza una comunicazione a blocchi di byte di dimensione fissa, contrapponendosi al dispositivo a caratteri con cui la comunicazione avviene byte per byte. Il dispositivo a blocchi tipico è un'unità a disco.

Merita attenzione particolare anche il dispositivo definito loopback,(1) che rappresenta in pratica un file contenente l'immagine di un disco, che viene letto come se fosse un disco o una partizione reale. Questa possibilità, tra le altre cose, consente di gestire direttamente i file che contengono la riproduzione esatta di dischetti, senza bisogno di trasferire questi file su dischetti reali.

Infine, è qui che si può abilitare e configurare la gestione dei dischi RAM, ovvero di dischi che vengono rappresentati nella memoria RAM.

<*> Normal floppy disk support                                   
< > XT hard disk support                                         
< > Parallel port IDE device support                             
<M> Compaq SMART2 support                                        
<M> Compaq Smart Array 5xxx support                              
[*]   SCSI tape drive support for Smart Array 5xxx               
<M> Mylex DAC960/DAC1100 PCI RAID Controller support             
<M> Micro Memory MM5415 Battery Backed RAM support (EXPERIMENTAL)
<M> Loopback device support                                      
<M>   Cryptoloop Support                                         
<M> Network block device support                                 
<M> Promise SATA SX8 support                                     
< > Low Performance USB Block driver                             
<*> RAM disk support                                             
(16)  Default number of RAM disks                                
(24576) Default RAM disk size (kbytes)                           
(1024) Default RAM disk block size (bytes)                       
<M> Packet writing on CD/DVD media                               
(8)   Free buffers for data gathering                            
[ ]   Enable write caching (EXPERIMENTAL)                        
<M> ATA over Ethernet support                                    

67.2.11   Device drivers, ATA/ATAPI/MFM/RLL support

La gestione di unità a blocchi tradizionali ed economiche, PATA/ATAPI, viene inserita in un menù apposito. In particolare, è possibile includere una gestione specifica per alcuni integrati, specialmente per quelli che hanno dimostrato di avere dei difetti di funzionamento.

--- ATA/ATAPI/MFM/RLL support                                            
<M>   Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support                
---     Please see Documentation/ide.txt for help/info on IDE drives     
[ ]     Support for SATA (deprecated; conflicts with libata SATA driver) 
[ ]     Use old disk-only driver on primary interface                    
<M>     Include IDE/ATA-2 DISK support                                   
[ ]     Use multi-mode by default                                        
<M>     PCMCIA IDE support                                               
<M>     Cardbus IDE support (Delkin/ASKA/Workbit)                        
<M>     Include IDE/ATAPI CDROM support                                  
<M>     Include IDE/ATAPI TAPE support (EXPERIMENTAL)                    
<M>     Include IDE/ATAPI FLOPPY support                                 
< >     SCSI emulation support                                           
[ ]     IDE ACPI support                                                 
[ ]     IDE Taskfile Access                                              
[*]     legacy /proc/ide/ support                                        
---     IDE chipset support/bugfixes                                     
<M>     generic/default IDE chipset support                              
[*]     CMD640 chipset bugfix/support                                    
[ ]       CMD640 enhanced support                                        
[*]     PNP EIDE support                                                 
[*]     PCI IDE chipset support                                          
[*]       Sharing PCI IDE interrupts support                             
[ ]     Boot off-board chipsets first support                            
<M>     Generic PCI IDE Chipset Support                                  
<M>     OPTi 82C621 chipset enhanced support (EXPERIMENTAL)              
<M>     RZ1000 chipset bugfix/support                                    
[*]     Generic PCI bus-master DMA support                               
[ ]       Force enable legacy 2.0.X HOSTS to use DMA                     
[ ]       Enable DMA only for disks                                      
<M>       AEC62XX chipset support                                        
<M>       ALI M15x3 chipset support                                      
[ ]         ALI M15x3 WDC support (DANGEROUS)                            
<M>       AMD and nVidia IDE support                                     
<M>       ATI IXP chipset IDE support                                    
<M>       CMD64{3|6|8|9} chipset support                                 
<M>       Compaq Triflex IDE support                                     
<M>       CY82C693 chipset support                                       
<M>       Cyrix CS5510/20 MediaGX chipset support (VERY EXPERIMENTAL)    
<M>       Cyrix/National Semiconductor CS5530 MediaGX chipset support    
<M>       Cyrix/National Semiconductor CS5530 MediaGX chipset support    
<M>       AMD CS5535 chipset support                                     
<M>       HPT34X chipset support                                         
[ ]         HPT34X AUTODMA support (EXPERIMENTAL)                        
<M>       HPT36X/37X chipset support                                     
<M>       JMicron JMB36x support                                         
<M>       National SCx200 chipset support                                
<M>       Intel PIIXn chipsets support                                   
<M>       IT8213 IDE support                                             
<M>       IT821X IDE support                                             
<M>       NS87415 chipset support                                        
<M>       PROMISE PDC202{46|62|65|67} support                            
[*]         Special UDMA Feature                                         
<M>       PROMISE PDC202{68|69|70|71|75|76|77} support                   
<M>       ServerWorks OSB4/CSB5/CSB6 chipsets support                    
<M>       Silicon Image chipset support                                  
<M>       SiS5513 chipset support                                        
<M>       SLC90E66 chipset support                                       
<M>       Tekram TRM290 chipset support                                  
<M>       VIA82CXXX chipset support                                      
<M>       Toshiba TC86C001 support                                       
[*]     Other IDE chipset support                                        
---       Note: most of these also require special kernel boot parameters
[*]       Generic 4 drives/port support                                  
<M>       ALI M14xx support                                              
<M>       DTC-2278 support                                               
<M>       Holtek HT6560B support                                         
<M>       QDI QD65xx support                                             
<M>       UMC-8672 support                                               
[ ]     IGNORE word93 Validation BITS                                    

67.2.12   Device drivers, SCSI support

Questa sezione riguarda la gestione del kernel delle unità SCSI. Le interfacce SCSI non hanno uno standard comune come avviene nel caso di quelle ATA e derivate, per cui è indispensabile includere il codice specifico per tutte le interfacce che si intendono utilizzare.

In certe situazioni può essere necessario abilitare la «gestione generica» SCSI. In particolare, questo serve nel caso si preveda l'uso di un masterizzatore SCSI.

<M> RAID Transport Class                                     
<M> SCSI device support                                      
---   SCSI target support                                    
[*] legacy /proc/scsi/ support                               
--- SCSI support type (disk, tape, CD-ROM)                   
<M> SCSI disk support                                        
<M> SCSI tape support                                        
<M> SCSI OnStream SC-x0 tape support                         
<M> SCSI CDROM support                                       
[*]   Enable vendor-specific extensions (for SCSI CDROM)     
<M> SCSI generic support                                     
<M> SCSI media changer support                               
--- Some SCSI devices (e.g. CD jukebox) support multiple LUNs
[*] Probe all LUNs on each SCSI device                       
[*] Verbose SCSI error reporting (kernel size +=12K)         
[*] SCSI logging facility                                    
[ ] Asynchronous SCSI scanning                               
    SCSI Transports  --->                                    
    SCSI low-level drivers  --->                             
    PCMCIA SCSI adapter support  --->                        

Per definire l'uso di questo o di quell'adattatore SCSI, occorre selezionare la voce {SCSI low-level drivers}.

67.2.13   Device drivers, serial ATA and paralel ATA drivers

Questa sezione riguarda la gestione più evoluta delle unità ATA, sia seriali, sia parallele. Come per le unità SCSI è necessario includere il codice specifico per tutte le interfacce che si intendono utilizzare.

--- Serial ATA (prod) and Parallel ATA (experimental) drivers 
<M>   AHCI SATA support                                       
<M>   ServerWorks Frodo / Apple K2 SATA support               
<M>   Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support          
<M>   Marvell SATA support (HIGHLY EXPERIMENTAL)              
<M>   NVIDIA SATA support                                     
<M>   Pacific Digital ADMA support                            
<M>   Pacific Digital SATA QStor support                      
<M>   Promise SATA TX2/TX4 support                            
<M>   Promise SATA SX4 support                                
<M>   Silicon Image SATA support                              
<M>   Silicon Image 3124/3132 SATA support                    
<M>   SiS 964/965/966/180 SATA support                        
<M>   ULi Electronics SATA support                            
<M>   VIA SATA support                                        
<M>   VITESSE VSC-7174 / INTEL 31244 SATA support             
<M>   Initio 162x SATA support (HIGHLY EXPERIMENTAL)          
<M>   ALi PATA support (Experimental)                         
<M>   AMD/NVidia PATA support                                 
<M>   ARTOP 6210/6260 PATA support (Experimental)             
<M>   ATI PATA support (Experimental)                         
<M>   CMD640 PCI PATA support (Very Experimental)             
<M>   CMD64x PATA support (Very Experimental)                 
<M>   CS5510/5520 PATA support                                
<M>   CS5530 PATA support (Experimental)                      
<M>   CS5535 PATA support (Experimental)                      
<M>   Cypress CY82C693 PATA support (Very Experimental)       
<M>   EFAR SLC90E66 support                                   
<M>   Generic ATA support                                     
<M>   HPT 366/368 PATA support (Experimental)                 
<M>   HPT 370/370A/371/372/374/302 PATA support (Experimental)
<M>   HPT 372N/302N PATA support (Very Experimental)          
<M>   HPT 343/363 PATA support (Experimental)                 
<M>   ISA Plug and Play PATA support (Experimental)           
<M>   IT8211/2 PATA support                                   
<M>   IT8213 PATA support (Experimental)                      
<M>   JMicron PATA support                                    
<M>   Legacy ISA PATA support (Experimental)                  
<M>   Compaq Triflex PATA support                             
<M>   Marvell PATA support via legacy mode                    
<M>   Intel PATA MPIIX support                                
<M>   Intel PATA old PIIX support                             
<M>   NETCELL Revolution RAID support                         
<M>   Nat Semi NS87410 PATA support (Experimental)            
<M>   OPTI621/6215 PATA support (Very Experimental)           
<M>   OPTI FireStar PATA support (Very Experimental)          
<M>   PCMCIA PATA support                                     
<M>   Older Promise PATA controller support (Experimental)    
<M>   QDI VLB PATA support                                    
<M>   RADISYS 82600 PATA support (Very Experimental)          
<M>   PC Tech RZ1000 PATA support                             
<M>   SC1200 PATA support (Very Experimental)                 
<M>   SERVERWORKS OSB4/CSB5/CSB6/HT1000 PATA support          
<M>   Promise PATA 2027x support                              
<M>   CMD / Silicon Image 680 PATA support                    
---   SiS PATA support (Experimental)                         
<M>   VIA PATA support                                        
<M>   Winbond SL82C105 PATA support                           
<M>   Winbond W83759A VLB PATA support (Experimental)         

67.2.14   Device drivers, multi-device support

La gestione software di più unità di memorizzazione in modo combinato richiede la selezione di un gruppo speciale di opzioni. Può trattarsi di dischi o partizioni ridondanti come forma di protezione dalle perdite di dati, oppure può essere un modo per fondere assieme più partizioni in una partizione logica più grande. Se c'è la possibilità, conviene attivare almeno le funzionalità necessarie a gestire il livello RAID 1.

Si veda eventualmente il capitolo 173.

[*] Multiple devices driver support (RAID and LVM)     
<*>   RAID support                                     
<M>     Linear (append) mode                           
<M>     RAID-0 (striping) mode                         
<M>     RAID-1 (mirroring) mode                        
<M>     RAID-10 (mirrored striping) mode (EXPERIMENTAL)
<M>     RAID-4/RAID-5/RAID-6 mode                      
[*]       Support adding drives to a raid-5 array      
<M>     Multipath I/O support                          
<M>     Faulty test module for MD                      
<M>   Device mapper support                            
[ ]     Device mapper debugging support                
<M>     Crypt target support                           
<M>     Snapshot target (EXPERIMENTAL)                 
<M>     Mirror target (EXPERIMENTAL)                   
<M>     Zero target (EXPERIMENTAL)                     
<M>     Multipath target (EXPERIMENTAL)                
<M>       EMC CX/AX multipath support (EXPERIMENTAL)   
< >     I/O delaying target (EXPERIMENTAL)             

67.2.15   Device drivers, network device support

L'utilizzo delle funzionalità di rete richiede la selezione della gestione delle interfacce di rete relative.

[*] Network device support                                           
<M>   Intermediate Functional Block support                          
<*>   Dummy net driver support                                       
<M>   Bonding driver support                                         
<M>   EQL (serial line load balancing) support                       
<M>   Universal TUN/TAP device driver support                        
<M>   General Instruments Surfboard 1000                             
<M>   ARCnet support  --->                                           
<M>   PHY Device support and infrastructure  --->                    
      Ethernet (10 or 100Mbit)  --->                                 
[*]   Ethernet (1000 Mbit)  --->                                     
[*]   Ethernet (10000 Mbit)  --->                                    
[*]   Token Ring driver support  --->                                
      Wireless LAN  --->                                             
      USB Network Adapters  --->                                     
[*]   PCMCIA network device support  --->                            
[*]   Wan interfaces support  --->                                   
[*]   ATM drivers  --->                                              
[*]   FDDI driver support                                            
<M>     Digital DEFTA/DEFEA/DEFPA adapter support                    
[ ]       Use MMIO instead of PIO                                    
<M>     SysKonnect FDDI PCI support                                  
[*]   HIPPI driver support (EXPERIMENTAL)                            
<M>     Essential RoadRunner HIPPI PCI adapter support (EXPERIMENTAL)
[ ]       Use large TX/RX rings (EXPERIMENTAL)                       
<M>   PLIP (parallel port) support                                   
<M>   PPP (point-to-point protocol) support                          
[*]     PPP multilink support (EXPERIMENTAL)                         
[*]     PPP filtering                                                
<M>     PPP support for async serial ports                           
<M>     PPP support for sync tty ports                               
<M>     PPP Deflate compression                                      
<M>     PPP BSD-Compress compression                                 
<M>     PPP MPPE compression (encryption) (EXPERIMENTAL)             
<M>     PPP over Ethernet (EXPERIMENTAL)                             
<M>     PPP over ATM                                                 
<M>   SLIP (serial line) support                                     
[*]     CSLIP compressed headers                                     
[*]   Keepalive and linefill                                         
[*]   Six bit SLIP encapsulation                                     
[*]   Fibre Channel driver support                                   
<M>   Traffic Shaper (OBSOLETE)                                      
<M>   Network console logging support (EXPERIMENTAL)                 
[ ] Netpoll traffic trapping                                         

67.2.16   Device drivers, input device support

I dispositivi per l'inserimento dati richiedono la selezione di una serie di opzioni, che fanno capo a questo menù:

--- Generic input layer (needed for keyboard, mouse, ...)
<M>   Support for memoryless force-feedback devices      
< >   Polled input device skeleton                       
---   Userland interfaces                                
---   Mouse interface                                    
[*]     Provide legacy /dev/psaux device                 
(1024)  Horizontal screen resolution                     
(768)   Vertical screen resolution                       
<M>   Joystick interface                                 
<M>   Touchscreen interface                              
(240)   Horizontal screen resolution                     
(320)   Vertical screen resolution                       
<M>   Event interface                                    
< >   Event debugging                                    
---   Input Device Drivers                               
---   Keyboards  --->                                    
[*]   Mice  --->                                         
[*]   Joysticks/Gamepads  --->                           
[*]   Tablets  --->                                      
[*]   Touchscreens  --->                                 
[*]   Miscellaneous devices  --->                        
    Hardware I/O ports  --->                             

67.2.17   Device drivers, character devices

Un dispositivo a caratteri è quello che utilizza una comunicazione byte per byte e si contrappone a quello a blocchi con cui la comunicazione avviene attraverso l'uso di blocchi di byte di dimensione fissa.

--- Virtual terminal                                                
[ ]   Support for binding and unbinding console drivers             
[ ] Non-standard serial port support                                
    Serial drivers  --->                                            
[ ] Legacy (BSD) PTY support                                        
<M> Parallel printer support                                        
[ ]   Support for console on line printer                           
<M> Support for user-space parallel port device drivers             
<M> Texas Instruments parallel link cable support                   
    IPMI  --->                                                      
[ ] Watchdog Timer Support  --->                                    
<*> Hardware Random Number Generator Core support                   
<M>   Intel HW Random Number Generator support                      
<M>   AMD HW Random Number Generator support                        
<M>   AMD Geode HW Random Number Generator support                  
<M>   VIA HW Random Number Generator support                        
<M> /dev/nvram support                                              
<M> Enhanced Real Time Clock Support                                
<M> Generic /dev/rtc emulation                                      
[*]   Extended RTC operation                                        
<M> Double Talk PC internal speech card support                     
<M> Siemens R3964 line discipline                                   
<M> Applicom intelligent fieldbus card support                      
<M> Sony Vaio Programmable I/O Control Device support (EXPERIMENTAL)
<M> /dev/agpgart (AGP Support)                                      
<M>   ALI chipset support                                           
<M>   ATI chipset support                                           
<M>   AMD Irongate, 761, and 762 chipset support                    
<M>   AMD Opteron/Athlon64 on-CPU GART support                      
---   Intel 440LX/BX/GX, I8xx and E7x05 chipset support             
<M>   NVIDIA nForce/nForce2 chipset support                         
<M>   SiS chipset support                                           
<M>   Serverworks LE/HE chipset support                             
<M>   VIA chipset support                                           
<M>   Transmeta Efficeon support                                    
<M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) 
<M>   3dfx Banshee/Voodoo3+                                         
<M>   ATI Rage 128                                                  
<M>   ATI Radeon                                                    
<M>   Intel I810                                                    
<M>   Intel 830M, 845G, 852GM, 855GM, 865G                          
<M>     i830 driver                                                 
<M>     i915 driver                                                 
<M>   Matrox g200/g400                                              
<M>   SiS video cards                                               
<M>   Via unichrome video cards                                     
<M>   Savage video cards                                            
    PCMCIA character devices  --->                                  
<M> ACP Modem (Mwave) support                                       
<M> NatSemi SCx200 GPIO Support                                     
<M> NatSemi PC8736x GPIO Support                                    
<M> NatSemi Base GPIO Support                                       
<M> AMD CS5535/CS5536 GPIO (Geode Companion Device)                 
<M> RAW driver (/dev/raw/rawN) (OBSOLETE)                           
(256) Maximum number of RAW devices to support (1-8192)             
[*] HPET - High Precision Event Timer                               
[ ]   HPET Control RTC IRQ                                          
[*]   Allow mmap of HPET                                            
<M> Hangcheck timer                                                 
    TPM devices  --->                                               
<M> Telecom clock driver for ATCA SBC                               

67.2.18   Device drivers, graphic support

Questa sezione riguarda la gestione della console, dal punto di vista grafico:

--- Backlight & LCD device support  --->                               
<M> Frontpath ProGear Backlight Driver                                 
< > Intel Carillo Ranch Backlight Driver                               
    Display device support  --->                                       
<*> Support for frame buffer devices                                   
[*]   Enable firmware EDID                                             
---   Enable Video Mode Handling Helpers                               
---   Enable Tile Blitting Support                                     
---   Frame buffer hardware drivers                                    
<M>   Cirrus Logic support                                             
<M>   Permedia2 support                                                
[*]     enable FIFO disconnect feature                                 
<M>   CyberPro 2000/2010/5000 support                                  
<M>   Arc Monochrome LCD board support                                 
[ ]   Asiliant (Chips) 69000 display support                           
[ ]   IMS Twin Turbo display support                                   
<M>   VGA 16-color graphics support                                    
[*]   VESA VGA graphics support                                        
[ ]   Intel-based Macintosh Framebuffer Support                        
<M>   Hecuba board support                                             
<M>   Hercules mono graphics support                                   
[ ]     Hercules mono Acceleration functions (EXPERIMENTAL)            
<M>   Epson S1D13XXX framebuffer support                               
<M>   nVidia Framebuffer Support                                       
[*]     Enable DDC Support                                             
[ ]     Lots of debug output                                           
[*]     Support for backlight control                                  
<M>   nVidia Riva support                                              
[ ]     Enable DDC Support                                             
[ ]     Lots of debug output                                           
[*]     Support for backlight control                                  
<M>   Intel 810/815 support (EXPERIMENTAL)                             
[ ]     use VESA Generalized Timing Formula                            
<M>   Intel LE80578 (Vermilion) support                                
<M>     Intel Carillo Ranch support                                    
<M>   Intel 830M/845G/852GM/855GM/865G/915G/945G support (EXPERIMENTAL)
[ ]     Intel driver Debug Messages                                    
[*]     DDC/I2C for Intel framebuffer support                          
<M>   Matrox acceleration                                              
[*]     Millennium I/II support                                        
[*]     Mystique support                                               
[*]     G100/G200/G400/G450/G550 support                               
<M>     Matrox I2C support                                             
<M>       G400 second head support                                     
[*]     Multihead support                                              
<M>   ATI Radeon display support                                       
[*]     DDC/I2C for ATI Radeon support                                 
[*]     Support for backlight control                                  
[ ]     Lots of debug output from Radeon driver                        
<M>   ATI Rage128 display support                                      
[*]     Support for backlight control                                  
<M>   ATI Mach64 display support                                       
[*]     Mach64 CT/VT/GT/LT (incl. 3D RAGE) support                     
[*]       Mach64 generic LCD support (EXPERIMENTAL)                    
[*]     Mach64 GX support                                              
[*]     Support for backlight control                                  
<M>   S3 Trio/Virge support                                            
<M>   S3 Savage support                                                
[*]     Enable DDC2 Support                                            
[ ]     Enable Console Acceleration                                    
<M>   SiS/XGI display support                                          
[*]     SiS 300 series support                                         
[*]     SiS 315/330/340 series and XGI support                         
<M>   NeoMagic display support                                         
<M>   IMG Kyro support                                                 
<M>   3Dfx Banshee/Voodoo3 display support                             
[ ]     3Dfx Banshee/Voodoo3 Acceleration functions (EXPERIMENTAL)     
<M>   3Dfx Voodoo Graphics (sst1) support                              
<M>   VIA VT8623 support                                               
<M>   Cyberblade/i1 support                                            
<M>   Trident support                                                  
[ ]     Trident Acceleration functions (EXPERIMENTAL)                  
<M>   ARK 2000PV support                                               
<M>   Permedia3 support (EXPERIMENTAL)                                 
[*]   AMD Geode family framebuffer support (EXPERIMENTAL)              
<M>     AMD Geode GX framebuffer support (EXPERIMENTAL)                
[ ]       Manually specify the Geode GX framebuffer size               
<M>     AMD Geode GX1 framebuffer support (EXPERIMENTAL)               
<M> Silicon Motion SM501 framebuffer support                           
<M> Virtual Frame Buffer support (ONLY FOR TESTING!)                   
    Console display driver support  --->                               
[ ] Bootup logo  --->                                                  

Può essere importante verificare la configurazione contenuta nel menù a cui si accede dalla voce {Console display driver support}:

--- VGA text console                             
[ ]   Enable Scrollback Buffer in System RAM     
---   Video mode selection support               
<M> MDA text console (dual-headed) (EXPERIMENTAL)
<*> Framebuffer Console support                  
[*]   Framebuffer Console Rotation               
[ ] Select compiled-in fonts                     

67.2.19   Device drivers, sound

Questo gruppo di opzioni consente di gestire le funzionalità audio, specificando l'uso di una scheda audio particolare.

<*> Sound card support
    Advanced Linux Sound Architecture  --->
    Open Sound System  --->

Attraverso la voce {Advanced Linux Sound Architecture} si raggiunge un menù specifico; l'altro menù, riferito alla voce {Open Sound System}, non è più consigliato.

<M> Advanced Linux Sound Architecture                      
<M>   Sequencer support                                    
<M>     Sequencer dummy client                             
<M>   OSS Mixer API                                        
<M>   OSS PCM (digital audio) API                          
[*]     OSS PCM (digital audio) API - Include plugin system
[*]   OSS Sequencer API                                    
<M>   RTC Timer support                                    
[*]     Use RTC as default sequencer timer                 
[ ]   Dynamic device file minor numbers                    
[*]   Support old ALSA API                                 
[*]   Verbose procfs contents                              
[ ]   Verbose printk                                       
[ ]   Debug                                                
      Generic devices  --->                                
      ISA devices  --->                                    
      PCI devices  --->                                    
      USB devices  --->                                    
      PCMCIA devices  --->                                 
      System on Chip audio support  --->                   

67.2.20   USB support

Questo gruppo di opzioni consente la gestione di adattatori USB e delle unità periferiche relative. In generale conviene prevedere l'uso di tutti i tipi di adattatori USB, assieme all'accesso a memorie di massa (dischi esterni), che sono componenti abbastanza comuni.

<M> Support for Host-side USB                                      
[ ]   USB verbose debug messages                                   
---   Miscellaneous USB options                                    
[*]   USB device filesystem                                        
[*]   USB device class-devices (DEPRECATED)                        
[ ]   Dynamic USB minor allocation (EXPERIMENTAL)                  
[ ]   USB selective suspend/resume and wakeup (EXPERIMENTAL)       
---   USB Host Controller Drivers                                  
<M>   EHCI HCD (USB 2.0) support                                   
[*]     Full speed ISO transactions (EXPERIMENTAL)                 
[*]     Root Hub Transaction Translators (EXPERIMENTAL)            
[ ]     Improved Transaction Translator scheduling (EXPERIMENTAL)  
<M>   ISP116X HCD support                                          
<M>   OHCI HCD support                                             
<M>   UHCI HCD (most Intel and VIA) support                        
<M>   Elan U132 Adapter Host Controller                            
<M>   SL811HS HCD support                                          
<M>     CF/PCMCIA support for SL811HS HCD                          
---   USB Device Class drivers                                     
<M>   USB Modem (CDC ACM) support                                  
<M>   USB Printer support                                          
--- NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'        
--- may also be needed; see USB_STORAGE Help for more information  
<M> USB Mass Storage support                                       
[ ]   USB Mass Storage verbose debug                               
[*]   Datafab Compact Flash Reader support (EXPERIMENTAL)          
[*]   Freecom USB/ATAPI Bridge support                             
[*]   ISD-200 USB/ATA Bridge support                               
[*]   Microtech/ZiO! CompactFlash/SmartMedia support               
[*]   USBAT/USBAT02-based storage support (EXPERIMENTAL)           
[*]   SanDisk SDDR-09 (and other SmartMedia) support (EXPERIMENTAL)
[*]   SanDisk SDDR-55 SmartMedia support (EXPERIMENTAL)            
[*]   Lexar Jumpshot Compact Flash Reader (EXPERIMENTAL)           
[*]   Olympus MAUSB-10/Fuji DPC-R1 support (EXPERIMENTAL)          
[*]   Support for Rio Karma music player                           
[ ] The shared table of common (or usual) storage devices          
--- USB Imaging devices                                            
<M> USB Mustek MDC800 Digital Camera support (EXPERIMENTAL)        
<M> Microtek X6USB scanner support                                 
[*] USB Monitor                                                    
--- USB port drivers                                               
<M> USS720 parport driver                                          
    USB Serial Converter support  --->                             
--- USB Miscellaneous drivers                                      
<M> EMI 6|2m USB Audio interface support                           
<M> EMI 2|6 USB Audio interface support                            
<M> ADU devices from Ontrak Control Systems (EXPERIMENTAL)         
<M> USB Auerswald ISDN support (EXPERIMENTAL)                      
<M> USB Diamond Rio500 support (EXPERIMENTAL)                      
<M> USB Lego Infrared Tower support (EXPERIMENTAL)                 
<M> USB LCD driver support                                         
<M> USB BlackBerry recharge support                                
<M> USB LED driver support                                         
<M> Cypress CY7C63xxx USB driver support                           
<M> Cypress USB thermometer driver support                         
<M> USB Phidgets drivers                                           
<M>   USB PhidgetInterfaceKit support                              
<M>   USB PhidgetMotorControl support                              
<M>   USB PhidgetServo support                                     
<M> Siemens ID USB Mouse Fingerprint sensor support                
<M> Elan PCMCIA CardBus Adapter USB Client                         
<M> Apple Cinema Display support                                   
<M> USB 2.0 SVGA dongle support (Net2280/SiS315)                   
[*]   Text console and mode switching support                      
<M> USB LD driver                                                  
<M> PlayStation 2 Trance Vibrator driver support                   
<M> IO Warrior driver support                                      
<M> USB testing driver (DEVELOPMENT)                               
    USB DSL modem support  --->                                    
    USB Gadget Support  --->                                       

67.2.21   Filesystems

Attraverso questa sezione si definiscono i tipi di file system che si vogliono gestire. In particolare, anche i file system virtuali, come /proc/ e /dev/pty/, vengono definiti qui.

Il file system standard dei sistemi GNU/Linux è il tipo Second-extended, ovvero Ext2, Ext3 o Ext4. La gestione di questo tipo di file system deve essere inclusa nel kernel, a meno che si stia cercando di produrre del codice specifico per un'applicazione particolare.

In questo gruppo di opzioni trovano posto anche quelle necessarie alla condivisione attraverso la rete, per esempio con il protocollo NFS.

È interessante osservare che è necessario specificare anche i sistemi di partizionamento dei dischi. In generale è indispensabile la gestione delle partizioni tipiche dei sistemi Dos.

Infine, è importante anche tenere in considerazione il tipo di codifica che si vuole poter utilizzare nell'ambito del file system. La codifica in questione riguarda il modo di rappresentare i nomi dei file, che potrebbe richiedere estensioni particolari. In generale viene abilitata la codifica UTF-8.

<M> Second extended fs support                                 
[*]   Ext2 extended attributes                                 
[*]     Ext2 POSIX Access Control Lists                        
[*]     Ext2 Security Labels                                   
[ ]   Ext2 execute in place support                            
<M> Ext3 journalling file system support                       
[*]   Ext3 extended attributes                                 
[*]     Ext3 POSIX Access Control Lists                        
[*]     Ext3 Security Labels                                   
<M> Ext4dev/ext4 extended fs support development (EXPERIMENTAL)
[*]   Ext4dev extended attributes                              
[*]     Ext4dev POSIX Access Control Lists                     
[*]     Ext4dev Security Labels                                
[*] JBD (ext3) debugging support                               
[ ] JBD2 (ext4dev/ext4) debugging support                      
<M> Reiserfs support                                           
[ ]   Enable reiserfs debug mode                               
[ ]   Stats in /proc/fs/reiserfs                               
[*]   ReiserFS extended attributes                             
[*]     ReiserFS POSIX Access Control Lists                    
[*]     ReiserFS Security Labels                               
<M> JFS filesystem support                                     
[*]   JFS POSIX Access Control Lists                           
[*]   JFS Security Labels                                      
[ ]   JFS debugging                                            
[ ]   JFS statistics                                           
<M> XFS filesystem support                                     
[*]   XFS Quota support                                        
[*]   XFS Security Label support                               
[*]   XFS POSIX ACL support                                    
[*]   XFS Realtime subvolume support                           
<M> GFS2 file system support                                   
<M>   GFS2 "nolock" locking module                             
<M>   GFS2 DLM locking module                                  
<M> OCFS2 file system support                                  
[*]   OCFS2 logging support                                    
<M> Minix fs support                                           
<M> ROM file system support                                    
[*] Inotify file change notification support                   
[*]   Inotify support for userspace                            
[*] Quota support                                              
<M>   Old quota format support                                 
<M>   Quota format v2 support                                  
<M> Kernel automounter support                                 
<M> Kernel automounter version 4 support (also supports v3)    
<M> Filesystem in Userspace support                            
    CD-ROM/DVD Filesystems  --->                               
    DOS/FAT/NT Filesystems  --->                               
    Pseudo filesystems  --->                                   
    Miscellaneous filesystems  --->                            
    Network File Systems  --->                                 
    Partition Types  --->                                      
    Native Language Support  --->                              
    Distributed Lock Manager  --->                             

La voce {Pseudo filesystems} consente di accedere alle funzioni relative a file system virtuali:

--- /proc file system support                               
[*]   /proc/kcore support                                   
[*] Virtual memory file system support (former shm fs)      
[ ]   Tmpfs POSIX Access Control Lists                      
[ ] HugeTLB file system support                             
<M> Userspace-driven configuration filesystem (EXPERIMENTAL)

67.2.22   Kernel hacking

Attraverso questa sezione si possono attivare alcune funzionalità, utili generalmente per chi partecipa allo sviluppo del kernel Linux. C'è comunque almeno una voce che può interessare alla maggior parte degli utenti.

[ ] Show timing information on printks
[ ] Enable __must_check logic
[*] Magic SysRq key
[ ] Enable unused/obsolete exported symbols
[ ] Debug Filesystem
[ ] Run 'make headers_check' when building vmlinux
[ ] Kernel debugging

La voce {Magic SysRq key}, se attivata, consente di disporre sempre di un accesso privilegiato ad alcune funzioni attraverso una console, indipendentemente dal fatto che su questa sia attiva o meno una sessione di lavoro. Queste funzioni si ottengono con delle combinazioni di tasti, costituite da [R_Sist AltGr x], dove x è una lettera che cambia in funzione dell'operazione che si vuole compiere. Il tasto [R_Sist] corrisponde a [SysRq] nelle tastiere per la lingua inglese, da cui viene il nome della voce di menù. Si osservi anche che il tasto [R_Sist] o [SysRq], coincide con il tasto [Stampa] o [Print_Screen].

67.3   Come fare per configurare correttamente il kernel che si vuole compilare

Il kernel Linux è molto dinamico e il suo sviluppo prende spesso delle strade imprevedibili. Questa vitalità è molto importante per il futuro del software libero; senza di essa non ci sarebbe modo di usare domani le nuove tecnologie proposte. In questo senso, diventa difficile dare delle indicazioni precise e durature sul modo corretto di configurare il kernel prima della compilazione.

L'unica documentazione sicura sotto questo aspetto è quella che si può consultare in modo contestuale quando si utilizza il comando make menuconfig, oppure make xconfig. Eventualmente, può essere utile sapere che le informazioni che si leggono lì sono contenute nel file Documentation/Configure.help (nell'ambito dei sorgenti), fino alle versioni 2.4.*, mentre in quelle successive si trovano suddivise in vari file Kconfig collocati nelle directory contenenti il codice relativo al contesto a cui si riferiscono. Segue un estratto di uno di questi file Kconfig, precisamente si tratta di drivers/usb/Kconfig:

#
# USB device configuration
#

menu "USB support"

# ARM SA1111 chips have a non-PCI based "OHCI-compatible" USB host interface.
config USB
        tristate "Support for USB"
        depends on PCI || SA1111
        ---help---
          Universal Serial Bus (USB) is a specification for a serial bus
          subsystem which offers higher speeds and more features than the
          traditional PC serial port.  The bus supplies power to peripherals
          and allows for hot swapping.  Up to 127 USB peripherals can be
          connected to a single USB port in a tree structure.  The USB port is
          the root of the tree, the peripherals are the leaves and the inner
          nodes are special USB devices called hubs.  Many newer PC's have USB
          ports and newer peripherals such as scanners, keyboards, mice,
          modems, and printers support the USB protocol and can be connected
          to the PC via those ports.

          Say Y here if your computer has a USB port and you want to use USB
          devices.  You then need to say Y to at least one of "UHCI HCD support"
          or "OHCI HCD support" below (the type of interface that the USB hardware
          in your computer provides to the operating system) and then choose
          from amongst the drivers for USB peripherals.  You may want to check
          out the information provided in <file:Documentation/usb/> and
          especially the links given in <file:Documentation/usb/usb-help.txt>.

          If you have a new USB 2.0 High Speed system, you should also choose
          "EHCI HCD (USB 2.0) support" as well as at least one of UHCI or OHCI.

          It doesn't normally hurt to select them all if you are not certain.

          To compile this driver as a module, choose M here: the
          module will be called usbcore.

Quando si parte da zero, è sufficiente accertarsi di eliminare il file .config, che comunque viene eliminato con il comando make mrproper. In questo modo, il programma che guida alla configurazione del kernel offre già le risposte più ovvie alle domande che fa. Naturalmente è sempre necessario leggere le prime volte il testo delle spiegazioni disponibili, fino a che si raggiunge una dimestichezza adeguata al tipo di esigenze che si hanno. Eventualmente, si può generare una prima configurazione predefinita con l'aiuto di make defconfig, da modificare poi sulla base delle proprie esigenze.

Come la documentazione interna suggerisce spesso, nella directory Documentation/ sono contenuti tanti file di testo contenenti spiegazioni particolareggiate rispetto a problemi specifici della configurazione. A questo punto dovrebbe essere evidente che non si può configurare e compilare un kernel se non si conosce minimamente la lingua inglese.

Questo tipo di lavoro passa poi necessariamente per una lunga serie di tentativi falliti (avendo cura di conservare i file .config, per poter ripartire almeno dall'ultima configurazione tentata). Tuttavia, il principiante non deve pensare di essersi messo involontariamente nei guai, perché queste difficoltà riguardano tutti, anche gli esperti, proprio perché la dinamicità nello sviluppo del kernel Linux porta continue novità.

67.4   Riferimenti


1) Il termine loop device usato qui, non deve essere confuso con loopback device usato nella configurazione dei servizi di rete.


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome kernel_linux_1.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory