Configurazione del kernel

Ora cercherò di fare un rapido riassunto delle sezioni più importanti del menu di configurazione del kernel, evitando di entrare troppo nello specifico, ma quantomeno cercando di dare un vago barlume di sensatezza qualora di primo acchito non ce ne fosse.
Potrei dirvi tranquillamente di non fidarvi troppo di quanto scritto, visto che da un giorno all'altro il contenuto potrebbe venire riorganizzato o cambiare sostanzialmente.

General Setup
sezione di configurazione generale: opzioni relative alla gestione della memoria, della cpu e dei processi. Può essere abbastanza saggio seguire i consigli dell'HELP o non toccare le opzioni a meno di un approfondimento.
Enable loadable module support
con questa opzione è possibile disabilitare completamente l'uso dei moduli. Se abilitato ci sono poche altre opzioni interne che sarebbe opportuno verificare.
Enable the block layer
abilita i dispositivi a blocchi, normalmente fondamentale in un computer. Una sotto-sezione molto importante riguarda lo scheduling dei dati su disco (sui sistemi desktop attualmente si predilige CFQ)
Processor Type & Features
Questa sezione è abbastanza fondamentale se volete avere il supporto per la vostra CPU (potete vederne le specifiche con il comando: # cat /proc/cpuinfo) e le sue caratteristiche.
Power Management and ACPI options
Sezione relativa alla gestione energetica, fondamentale sui portatili e in presenza di sistemi di alimentazione esterna. È utile anche per poter sfruttare alcune caratteristiche ACPI. Occorre un po' di conoscenza, ma in giro potete trovare alcune guide interessanti e ben fatte, tra cui cito la guida di gentoo per la gestione energetica.
Bus options (PCI etc.)
Sezione relativa ai BUS di sistema: sezione fondamentale, visto che se vi dimenticate di inserire il supporto al PCI-Express il vostro pc avrà non pochi problemi. Non vi sono informazioni specifiche sui chipset ma solamente generiche, l'help dovrebbe potervi aiutare.
Executable file formats / Emulations
Supporto per i file eseguibili e la possibilità di emularne alcuni. Su certe architetture e in certe situazioni abilitare MISC e ELF è molto consigliato, come anche leggere l'help relativo.
Networking support
Sezione relativa a tutti i tipi di networking esistenti (bluetooth, irda, wireless, WiMAX, RF, ...) e alle opzioni relative la comunicazione: tale sezione è abbastanza ok di default (tranne quando si deve avere a che fare con connessioni PPPoE ADSL) ed è fondamentale nel caso stiate configurando un firewall. A tale scopo vi consiglio vivamente di fare riferimento ad un tutorial relativo alla configurazione del kernel per abilitare determinati tipi di connettività.
Device Drivers
Questa sezione è una delle più importanti, in quanto è il punto d'ingresso per configurare tutto l'hardware. Più avanti nella pagina troverete alcuni consigli su come configurare l'hardware.
File systems
Sezione fondamentale per poter leggere e scrivere su determinati supporti (dischi, CD, chiavette, condivisioni di rete, etc etc). Considerate di abilitare staticamente tutto ciò che serve al sistema per avviarsi, e di valutare attentamente l'HELP relativo per ogni opzione. Se non ne avete mai sentito parlare, probabilmente non vi serve (tipo Plan9?).
Kernel Hacking
Il titolo dice tutto. L'unica opzione che posso raccomandarvi di abilitare è CONFIG_MAGIC_SYSRQ, che serve per abilitare le chiavi magiche per comunicare direttamente col kernel (comunque inutili nel caso non abbiate una tastiera a disposizione!): si attivano con la combinazione CTRL+ALT+STAMP+<key> dove <key> è la chiave per eseguire una particolare operazione (che va dal terminare tutte le operazioni, al rebootare il sistema).

Scegliere i driver adeguati

Per meglio capire cosa abilitare o non abilitare relativamente all'hardware della propria macchina occorre avere a disposizione un paio di altri strumenti, visto che spesso l'help può non aiutarvi per niente.
In tal caso avrete bisogno di un programma chiamato lspci presente nella suite pciutils che elenca l'hardware pci disponibile sulla vostra macchina.
Esempio di output su un dispositivo NAS PPC embedded:.

# lspci -nn
00:00.0 Host bridge [0600]: Motorola MPC8245 [Unity] [1057:0006] (rev 14)
00:0b.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL-8169 Gigabit Ethernet [10ec:8169] (rev 10)
00:0c.0 IDE interface [0101]: Silicon Image, Inc. PCI0680 Ultra ATA-133 Host Controller [1095:0680] (rev 02)
00:0e.0 USB Controller [0c03]: NEC Corporation USB [1033:0035] (rev 43)
00:0e.1 USB Controller [0c03]: NEC Corporation USB [1033:0035] (rev 43)
00:0e.2 USB Controller [0c03]: NEC Corporation USB 2.0 [1033:00e0] (rev 04)

Esempio di output su un laptop x86:
# lspci -nn
00:00.0 Host bridge [0600]: Intel Corporation Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller [8086:2590] (rev 03)
00:01.0 PCI bridge [0604]: Intel Corporation Mobile 915GM/PM Express PCI Express Root Port [8086:2591] (rev 03)
00:1b.0 Audio device [0403]: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller [8086:2668] (rev 04)
00:1d.0 USB Controller [0c03]: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 [8086:2658] (rev 04)
00:1d.1 USB Controller [0c03]: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 [8086:2659] (rev 04)
00:1d.2 USB Controller [0c03]: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 [8086:265a] (rev 04)
00:1d.3 USB Controller [0c03]: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 [8086:265b] (rev 04)
00:1d.7 USB Controller [0c03]: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller [8086:265c] (rev 04)
00:1e.0 PCI bridge [0604]: Intel Corporation 82801 Mobile PCI Bridge [8086:2448] (rev d4)
00:1f.0 ISA bridge [0601]: Intel Corporation 82801FBM (ICH6M) LPC Interface Bridge [8086:2641] (rev 04)
00:1f.1 IDE interface [0101]: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller [8086:266f] (rev 04)
00:1f.3 SMBus [0c05]: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) SMBus Controller [8086:266a] (rev 04)
01:00.0 VGA compatible controller [0300]: nVidia Corporation NV43 [GeForce Go 6200/6400] [10de:0167] (rev a1)
06:03.0 CardBus bridge [0607]: Texas Instruments PCI7420 CardBus Controller [104c:ac8e]
06:03.2 FireWire (IEEE 1394) [0c00]: Texas Instruments PCI7x20 1394a-2000 OHCI Two-Port PHY/Link-Layer Controller [104c:802e]
06:03.3 Mass storage controller [0180]: Texas Instruments PCI7420/7620 Combo CardBus, 1394a-2000 OHCI and SD/MS-Pro Controller [104c:ac8f]
06:04.0 Network controller [0280]: Intel Corporation PRO/Wireless 2200BG [Calexico2] Network Connection [8086:4220] (rev 05)
06:08.0 Ethernet controller [0200]: Intel Corporation 82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller Mobile [8086:1068] (rev 04)

Come noterete, ogni riga inizia con un codice particolare, nella forma XX:YY.Z, che corrisponde alla posizione assegnata nel sistema (maggiori informazioni informazioni le potete trovare in qualche manuale del kernel relativo a sys e proc), mentre terminano con un numero tra parentesi quadre chiamato PCI-IDs, nel formato [XXXX:YYYY]. Interrogando il sito di device drive check & report di Debian con quest'ultimo numero (XXXX:YYYY) potreste trovare se è supportato e il driver del kernel che vi serve. Una successiva ricerca nell'interfaccia con il nome del driver, come consigliato nella pagina precedente, potrà portarvi all'opzione giusta.
Se il sito sopraindicato non vi dice nulla, considerate la possibilità di fare una ricerca in Internet con quel codice: la maggior parte delle volte potrà darvi dei suggerimenti interessanti a riguardo!

La cosa difficile, come potrete immaginare, è capire come è strutturato un computer e di conseguenza cosa si attacca a cosa e cosa possa essere un BUS, piuttosto che un dispositivo a caratteri o quant'altro... posso solo consigliarvi di munirvi di pazienza e iniziare a documentarvi a riguardo.

La mia unica altra raccomandazione per quanto riguarda l'hardware è quella di stare attenti quando si stanno per compilare staticamente dei driver, specie se questi sono simili o se sono soluzioni alternative allo stesso dispositivo: ne è un caso proprio i dischi ATA/PATA che possono portare da una parte ad un differente nome per il dispositivo stesso, dall'altra ad errori di conflitto e ad una conseguente instabilità del kernel. Considerate piuttosto la possibilità di provarli alternativamente in maniera statica, o di compilarli come moduli caricandoli manualmente per testarne il funzionamento.

Metodi alternativi

Negli anni sono stati proposti alcuni metodi alternativi alla compilazione manuale del kernel, nel caso specifico in cui si debba configurare il tutto ex-novo, tra cui spicca in particolar modo genkernel, script realizzato dai devel Gentoo proprio per facilitare la compilazione del kernel.
Sfortunatamente genkernel non è la panacea a tutti i mali, infatti non è così intelligente da capire cosa volete e cosa non volete ed è buona norma utilizzarlo con sale in zucca: leggo spesso sui forum di supporto di Gentoo di gente che non riesce a montare il file system di base del sistema pensando che genkernel gli abbia installato il supporto al file system X con cui ha voluto formattare la root del sistema.
Se proprio volete aiutare il programma vi consiglio di dare una letta al suo manuale e rivedere la configurazione manualmente, per accertarvi che tutto quello che vi serve sia stato abilitato.

Ora che avete sistemato la configurazione, uscite dall'interfaccia salvando il .config

*** End of Linux kernel configuration.
*** Execute 'make' to build the kernel or try 'make help'.
 # 


Site optimized for Gecko and Webkit browsers - Copyright © 2008 - Matteo 'Peach' Pescarin