Ricompila il Kernel!

Guida dettagliata, strutturata, completa, aggiornata (si spera :o)

alla ricompilazione del Kernel Linux

per sistemi Debian/*ubuntu

Kernel versione 2.6.22

exclamation.png Work in progress!! Se usate questa guida aiutatemi a migliorarla: segnalatemi errori, imprecisioni, trucchi che non ho citato. Il feedback è importantissimo! exclamation.png


N.d.A.

Questa guida cerca di spiegare come ricompilare il più recente kernel Linux, specialmente per sistemi *ubuntu o comunque basati su Debian.

Su Internet è reperibile moltissimo materiale, purtroppo è raro trovare informazioni utili, recenti e raggruppate tutte in uno stesso posto. E in Italiano c’è veramente poco.

Cerco ora di scrivere una guida che sia:

  • dettagliata: le voci di configurazione dovrebbero essere spiegate chiaramente, insieme ai comandi che possono firnire informazioni utili sul proprio hardware. In altre parole: quelle 4 righe in croce che compaiono in menuconfig, xconfig o gconfig sono un capolavoro di ermetismo, gli autori avrebbero potuto spenderci su più tempo.
  • ben strutturata: già il kernel è organizzato come un suk arabo, se poi anche le guide saltano di palo in frasca tanto vale suicidarsi. Chiunque abbia ricompilato più volte il kernel ha più di un dubbio sulla logica della disposizione delle opzioni.
  • completa: purtroppo il kernel Linux si ingigantisce col tempo (siamo passati dai 12MB del 2.2.0 ai 54MB del 2.6.22, e già il 2.6.0 pesava 40MB) e le opzioni di configurazione diventano un vero casino, quindi è utopistico trattarle tutte in dettaglio. Ma allora cosa vuol dire “completa”? Che in questa guida le opzioni importanti sono spiegate (e non semplicemente tradotte dall’inglese), quelle meno importanti sono linkate ad altri siti (possibilmente in italiano).
  • aggiornata: Linus fa un incubo e il giorno dopo rilascia nuovi kernel a manetta? Io non dormirò la notte e aggiornerò questa guida ai nuovi kernel. Ho iniziato col 2.6.22, vediamo sin dove arriviamo prima che Linus decida di andare in vacanza :o)

  • in Italiano: purtroppo l’Inglese nelle nostre scuole viene insegnato … lasciamo stare. Gli Italiani sono il popolo più portato all’inventiva (l’arte di sapersi arrangiare deriva da questa, e pure le furbizie escogitate per non pagare le tasse…) che esista su questo mondo, quindi è più che giusto deviarli verso Linux :o) Bisogna solo dirgli le cose in Italiano, poverini.

Spero di riuscirci :o)


Indice

  1. Introduzione
  2. Il Kernel
  3. Le Patch
  4. Configurazione
  5. Compilazione
  6. Installazione
  7. Problemi e Soluzioni
  8. Links

1. Introduzione

La ricompilazione del Kernel è per qualunque nuovo utente Linux il Battesimo del Fuoco: chi non l’ha ancora fatto non è degno di scrollarsi di dosso l’etichetta di “Newbie”.

Perché mai uno dovrebbe affrontare questa fatica improba?

  • Rito di iniziazione sciamanico
  • Hardware particolarissimo che richiede tra l’altro la recita di dieci Ave Maria e quindici Paternoster
  • Velleità suicide
  • Tesi universitaria
  • “My name is Torvalds. Linus Torvalds”

La prima volta che ci ho provato ho pensato che in fondo non era così importante laurearsi. Ora non mi sono ancora laureato, però ho scoperto il sadomaso.

I benefici che può ricavarne il vostro computer sono veramente minimi nella maggior parte dei casi, mentre se il vostro obiettivo è creare kernel particolarissimi (hard real-time, server, editing audio/video professionale…) allora non avete scuse: dovete ricompilare (senza dimenticare gli Ave Maria e i Paternoster).

La parte più pesante è senza dubbio lo “snellimento” del kernel, ossia l’eliminazione di moduli inutili tramite xconfig/gconfig/menuconfig.
Questa parte può essere tranquillamente saltata dalla maggior parte degli utenti che possono accontentarsi di applicare una patch adatta e ottimizzare il kernel per il loro processore.

Non funziona mai nulla al primo tentativo! La strada verso la santità passa inevitabilmente attraverso il martirio.

Buona fortuna, quando avrete finito sarete diventati più vecchi, più saggi e più inclini agli arresti cardiaci!


2. Il Kernel

nb Nota: prima di iniziare non è mai male un piccolo ripasso dei concetti fondamentali: voce di Wikipedia sul Kernel.

La prima cosa da fare è, ovviamente, avere un kernel Linux su cui lavorare.

Non avrebbe molto senso prendere un kernel fornito dalla propria distribuzione preferita: spesso questi kernel sono già stati patchati e appesantiti.
Meglio dunque scaricare l’ultimo kernel fornito dagli sviluppatori (ossia il kernel “vanilla”, originale e non patchato).

→ Ottenere l’ultimo kernel Vanilla

Aprite questo indirizzo: http://www.eu.kernel.org/pub/linux/kernel/v2.6/ e scaricate il file linux-2.6.22.tar.bz2.

Consiglio di scaricare la versione 2.6.22 e non una 2.6.22.x, altrimenti applicare delle patch potrebbe essere complicato.

Per ora non fateci altro, perché dobbiamo preparargli il “nido” :o)

Preparare /usr/src

Questa è la directory dove lavoreremo sul kernel. Dobbiamo dare i permessi di lettura/scrittura al nostro utente (sostituite nome_utente col vostro!) :

sudo chgrp src /usr/src
sudo chmod -R g+wr /usr/src/*
sudo adduser nome_utente src

Il primo comando impone il gruppo src per la directory /usr/src, il secondo assegna permessi di lettura e scrittura (+rw) al gruppo (g) e il terzo aggiunge al gruppo il nostro utente!

Scompattare il Kernel

Copiamo in /usr/src il kernel vanilla che abbiamo scaricato prima:

cd /usr/src
cp /percorso-al-file/linux-2.6.22.tar.bz2 .

E scompattiamolo (richiederà qualche decina di secondi):

tar xvjf linux-2.6.22.tar.bz2

Ora dovremmo avere una nuova cartella /usr/src/linux-2.6.22.

Fatene subito una copia di backup per evitare di dovervi riscaricare i sorgenti del kernel se qualcosa va male:

cp linux-2.6.22 linux.2.6.22-VANILLA

Infine, per comodità facciamo un link simbolico /usr/src/linux alla cartella di lavoro:

ln -s linux-2.6.22 linux

Viva la fantasia, neh! :o)


3. Le Patch

Probabilmente qualcuno ha desideri particolari:

  • Bassa latenza (soft real-time)
  • Hard real-time (risposte agli interrupt RT in qualche microsecondo)
  • Desktop molto reattivo
  • Passare dalla versione 2.6.22 alla 2.6.22.x

Le patch, detto in maniera semplice, sono dei file che modificano le funzioni originali del kernel adattandolo a un uso specifico.

exclamation.png Attenzione: a questo mondo nulla è gratis! Ogni patch porta un certo tipo di vantaggi, ma qualcosa viene inevitabilmente penalizzato! Consiglio la lettura di questo mio articolo in cui spiego perché un kernel a bassa latenza ha anche una potenza di calcolo minore.

Vediamo le patch principali e come applicarle. Per chi volesse approfondire l’argomento: come creare/applicare patch.

nb Nota: l’applicazione della patch fallirà con una versione del kernel differente da quella voluta dalla patch (per evitare problemi meglio usare il kernel 2.6.22 “puro”, applicare le patch per il 2.6.22 –come la CK–, le patch che lo portano all’ultima versione 2.6.22.x, la patch per 2.6.22.x, e così via)

nb Nota: l’elenco non è certo completo (anzi…): segnalatemi le patch che avete trovato particolarmente utili e le aggiungerò volentieri!

→ Con Kolivas (CK)

! Attenzione! Con Kolivas non produrrà più nessuna patch per kernel successivi al 2.6.22!

Indubbiamente una delle patch di maggior successo, è pensata per avere un desktop molto reattivo mediante un innovativo scheduler (Staircase Deadline Scheduler) e un grande utilizzo della memoria swap (Swap Prefetch). Ovviamente noterete che il vostro HD diventerà molto attivo…

Esiste anche una versione per server.

Scarichiamo la patch dal sito di Con Kolivas. Il file dovrebbe essere patch-2.6.22-ck1.bz2.

Dopo averla scaricata spostiamo pure quella in /usr/src senza scompattarla.

mv /percorso_del_file_scaricato/patch-2.6.22-ck1.bz2 /usr/src

Ora spostiamoci nella cartella che contiene i file del kernel e applichiamo la patch con i diritti di root (utenti Debian: date su, eseguite il comando richiesto e subito dopo exit):

cd /usr/src/linux
bzcat ../patch-2.6.22-ck1.bz2 | patch -p1

(È scritto -p1 non pl!)

Ingo Molnar (Realtime-Preempt)

Questa patch è studiata per offrire un kernel a bassa latenza (soft real-time), ed è utile per chi esegue applicazioni audio-video professionali o vuole farsi un media center. La latenza massima dovrebbe essere 50-60 microsecondi, ma non sono sicuro che possa essere utile anche per applicazioni hard real-time.

Migliorerà la “prontezza” del desktop (ad esempio, quando si inserisce una penna USB appare istantaneamente la finestra che mostra il contenuto, mentre solitamente si attende una frazione di secondo) e peggiorerà la potenza di calcolo “pura” (n task vengono eseguiti in un tempo più lungo).

Si scarica da qui (non ho trovato la versione per 2.6.22, ma solo per 2.6.22.1) e si applica con i comandi:

mv /percorso_del_file_scaricato/patch-2.6.22.1-rt9 /usr/src
cd /usr/src/linux
cat ../patch-2.6.22.1-rt9 | patch -p1

Stavolta la patch non è compressa (l’estensione non era .bz2) quindi bisogna dare solo cat e non bzcat.

Suspend2/TuxOnIce

nb Nota: in futuro il nome della patch sarà TuxOnIce e non Suspend2 (per evidenziare la differenza tra Suspend To RAM e Suspend To Disk)

Questa patch offre le funzioni “Sospendi” e “Iberna” presenti in Windows.

Si scarica da qui e si applica con i soliti comandi:

mv /percorso_del_file_scaricato/suspend2-2.2.10-for-2.6.22.patch.bz2 /usr/src
cd /usr/src/linux
bzcat ../suspend2-2.2.10-for-2.6.22.patch.bz2 | patch -p1

→ Progetto Configurazione Italiana del Kernel Linux

Per quelli che non riescono a biascicare una parola di inglese: gioite! A questo link si trova una patch che traduce in italiano tutte le opzioni di configurazione e loro spiegazioni!

Non l’ho mai usata, quindi non posso dare indicazioni sicure al 100% su che versione del kernel vada usata e come vada applicata.

Patch non più mantenute (cimitero)

Beyond (Linux On Steroids)

Era una patch bellissima che incorporava in una sola botta tutte le patch volte a potenziare un desktop.

bell.png Leggete le motivazioni che stanno dietro l’abbandono del progetto. Sono abbastanza (d)istruttive…


4. Configurazione

Le mie dita tremano mentre inizio a scrivere questo capitolo.

nb Nota: Per una spiegazione esauriente in italiano di quasi tutte le opzioni di configurazione tenete sott’occhio questa pagina e ringraziate gli autori per il loro lavoro titanico :

http://www.slacky.eu/wikislack/index.php?title=Kernel_Menuconfig

nb Nota: Se l’inglese non fa paura la documentazione ufficiale è tutta nella cartella /usr/src/linux/Documentation/

Esistono due possibilità:

  • Indiana Jones vi fa una pippa: partite da zero (e saltate i prossimi due paragrafi)
  • Gli insetti (bug) vi fanno paura: partite dalla configurazione sicuramente funzionante.

Copiare la vecchia configurazione

Nei sistemi Debian-based i file di configurazione dei kernel usati si trovano in /boot, nel formato config-versione_del_kernel.

Trovate la versione del kernel che state usando ora con il comando

uname -r

e saprete quale file di configurazione copiare in /usr/src/linux con i comandi:

cd /usr/src/linux
cp /boot/config-versione_del_kernel .config

Se lo desiderate potete provare ad aprirlo in kate/gedit, giusto per farvi un’idea del numero di opzioni che dovrete vedere (ci ho messo mezzo minuto solo a scrollarlo tutto con la rotella del mouse).

! Non giochicchiate con .config se non sapete quello che state facendo (ma se lo sapeste non stareste leggendo queste righe :o) !

Adattare la vecchia configurazione al nuovo kernel

Lanciate (non come root) il comando

make oldconfig

e rispondete alle domande che vi verranno poste. Non preoccupatevi troppo di rispondere “bene”, perché nei prossimi paragrafi rivedremo tutte le opzioni.

nb Nota: potrebbe esservi utile leggere questo mio vecchio articolo mentre rispondete alle domande.

Iniziare a configurare

Esistono tre interfacce: testuale, pseudografica e grafica. Scegliete voi quale utilizzare. Le opzioni verranno salvate nel file /usr/src/linux/.config

È importante sapere che molte voci, oltre ad essere selezionate e deselezionate, possono essere selezionate come modulo: ossia non incluse nel kernel finale (il kernel rimane snello) ma incluse come moduli esterni al kernel (da caricare quando servono).

Interfaccia testuale (terminale)

make config

Interfaccia pseudografica (da terminale, basata su ncurses)

make menuconfig

Interfaccia grafica

KDE:

make xconfig

GNOME:

make gconfig

Configurazione del kernel

Qui di seguito verranno descritte le opzioni più importanti per la ricompilazione.

Ovviamente i menu più importanti sono General setup e Processor type and features, che nessuno può evitare di fare se vuole veramente ottenere qualche miglioramento di prestazioni.

Gli altri menu sono trattati meno in dettaglio rimandando a documentazione disponibile su internet ove possibile.

• Code maturity level options

» Prompt for development and/or incomplete code/drivers (EXPERIMENTAL)

Se volete che durante la configurazione vi sia presentato anche del codice “alpha”, sperimentale, che può bloccare il computer, farvi perdere dei dati, farvi bestemmiare e soprattutto non potrete andare sulle ML a rincorrere gli sviluppatori chiedendo “Perché non funziona?” (perché è codice alpha, stupido), date Y qui. Questa è l’opzione consigliata per quasi tutti.

Se volete solo codice stabile più del granito, date N.

bell.png Nota: dando N molte opzioni di configurazione qui descritte non vi verranno presentate, questo potrebbe essere un problema poiché il kernel fornito dalle maggiori distro usa anche parti “sperimentali” e carica moduli “sperimentali” per il funzionamento del nostro PC. Noi poveretti che cercheremo l’equivalente del modulo “wlf” scopriremo che sì, c’è l’opzione corrispondente, ma non è selezionabile perché ancora immatura. Dopo questa battuta potrei anche spararmi.

• General setup

» Local version - append to kernel release (LOCALVERSION)

Aggiungerà una stringa extra alla versione del proprio kernel. È sempre una buona idea specificare qualcosa del tipo “-testAAAAMMGG” in modo da poter riconoscere facilmente i kernel in GRUB al riavvio.
Ma questo può essere fatto anche in fase di compilazione tramite l’opzione –append-to-version di make-kpkg. Decidete voi quale metodo usare.

» Automatically append version information to the version string (LOCALVERSION_AUTO)

Se state costruendo una versione di rilascio e avete costruito un albero basato su GIT, beh sapete cosa state facendo e non state certo leggendo queste righe. Questo si chiama paradosso.

Se non avete capito molto/non vi interessa GIT date N.

» Support for paging of anonymous memory (swap) (SWAP)

Bisogna sempre rispondere Y qui, oppure non si potrà usare la memoria swap (e peggioreranno le prestazioni).

Support for prefetching swapped memory (SWAP_PREFETCH)

Questa opzione compare se è stata applicata la patch CK. Ovviamente in tal caso bisogna dare Y.

» System V IPC (SYSVIPC)

IPC: Inter Process Communication (Comunicazione inter processi) è una suite di funzioni di libreria e chiamate di sistema che consentono ai processi di sincronizzarsi e scambiare informazioni.

Siccome alcuni programmi non funzioneranno senza queste funzioni, è consigliabile dare Y.

IPC Namespaces (IPC_NS)

Supporto per i domini IPC. Permette ai contenitori (ambienti virtuali) di usare i domini IPC per fornire differenti oggetti IPC a differenti server. Se non avete capito date N.

» POSIX Message Queues (POSIX_MQUEUE)

Se vi interessa compilare dei programmi che usino le code di messaggi POSIX date Y.

Altrimenti se non sapete quasi programmare date N.

» BSD Process Accounting (BSD_PROCESS_ACCT)

Con questa opzione abilitata il kernel potrà fornire a un programma che lo richieda informazioni sui processi (data di creazione, proprietario…). Alcuni programmi non funzioneranno senza queste informazioni, per cui è opportuno dare Y.

BSD Process Accounting version 3 file format (BSD_PROCESS_ACCT_V3)

Come prima, ma ci sono più informazioni sul processo e cambia il formato del file. Anche qui è opportuno rispondere Y.

» Export task/process statistics through netlink (EXPERIMENTAL) (TASKSTATS)

Tramite l’interfaccia netlink è possibile esportare le statistiche di task/processi mentre essi sono attivi (a differenza del BSD Accounting).

Non è una opzione utile alla maggior parte delle persone, che possono dare N.

» UTS Namespaces (UTS_NS)

Supporto per i domini UTS. Permette ai contenitori (ambienti virtuali) di usare i domini UTS per fornire differenti informazioni UTS a differenti server. Se non avete capito date N.

» Auditing support (AUDIT)

Abilita l’infrastruttura di auditing che puo’ essere usata con un altro sottosistema kernel come SELinux.

Se avete intenzione di inserire sottosistemi kernel che possano monitorare le attività del kernel stesso rispondete Y qui.

Se vi sembra arabo, N.

Enable system-call auditing support (AUDITSYSCALL)

Se inoltre questi sottosistemi devono monitorare anche le chiamate di sistema (e non quelle generate degli utenti) date Y pure qui.

» Kernel .config support (IKCONFIG)

Consente di inserire il file .config direttamente nel kernel, e di poterlo leggere con appositi comandi.

Noi avevamo già visto un altro modo per recuperare il file di configurazione sui sistemi Debian-based (era in /boot), quindi possiamo tranquillamente dare N.

Enable access to .config through /proc/config.gz (IKCONFIG_PROC)

Appunto, un modo per leggere il file .config dal kernel…

» Kernel log buffer size (16 => 64KB, 17 => 128KB) (LOG_BUF_SHIFT)

La dimensione del buffer del log del kernel (dove vengono scritti i messaggi generati dal kernel durante il funzionamento).

Per le macchine uniprocessore il valore corretto è 14.

» Create deprecated sysfs files (SYSFS_DEPRECATED)

Crea link a dispositivi che sono stati deprecati. Viene fornito per ragioni di compatibilità ad es. con vecchie versioni di udev.

Se state usando una distribuzione di Linux (Debian, *ubuntu…) rilasciata nel 2006 o più tardi, rispondete N.

» Kernel->user space relay support (formerly relayfs) (RELAY)

Fornisce un meccanismo per collegare grandi quantità di dati dal kernel space allo user space.

Solitamente non è necessario, però nel file di configurazione standard *ubuntu è abilitato.

Tirate la monetina o rispondete N.

» Initial RAM filesystem and RAM disk (initramfs/initrd) support (BLK_DEV_INITRD)

Il file system RAM iniziale viene caricato dal bootloader (LILO, Loadlin, Grub…) e montato sulla memoria come root, ed è solitamente usato per caricare l’immagine initrd.

Questo punto richiede una spiegazione un po’ più complessa.

Cos’è, a cosa serve e come funziona l’immagine iniziale initrd: questo articolo lo spiega abbastanza bene. In sintesi, contiene tutti i moduli necessari per avviare la macchina; questi moduli vengono caricati nella RAM prima che venga avviato il kernel e senza di essi non si avvierebbe proprio nulla.

Domanda: è utile avere una immagine initrd? Potete farne a meno se compilate tutti i moduli necessari all’avvio dentro al kernel. Esempio banale: avete un disco SATA, e il kernel è memorizzato su quel disco → dovete compilare dentro al kernel (dando Y) il supporto che gestisce i dischi SATA. Quindi questi moduli dovrebbero essere i driver del disco (SATA), il supporto al filesystem di root (solitamente ext3), i moduli I2C necessari. Non bisogna caricare staticamente moduli relativi alle schede video.

Ma attenzione: se compilate tutti i moduli esistenti dentro al kernel, avrete un kernel grande decine e decine di MB (per niente buono). Quindi il kernel fornito dalle distribuzioni deve essere necessariamente modulare per supportare tutti i tipi di hardware → i moduli necessari all’avvio vengono caricati tramite initrd e il kernel è mantenuto “snello”.

Conclusione: se avete intenzione di fare un lavoro serio, scorrendo ogni opzione del kernel, compilando internamente tutti i moduli necessari al vostro hardware (perlomeno all’avvio del sistema) e eliminando tutti gli altri potete rispondere N qui.

In particolare dovrete abilitare i moduli necessari nelle sezioni Processor type and features, Bus options, Device drivers, File systems.

Se invece il vostro scopo è di fare un kernel generico oppure vi accontentate di ottimizzare per il processore, dovrete sbattervi un pelino di più per creare l’immagine iniziale e dare Y qui.

Initramfs source file(s) (INITRAMFS_SOURCE)

Permette di specificare un archivio .cpio oppure una lista di directory che servono per costruire l’immagine initramfs.

Se non volete esplicitamente includere qualcosa qui (non sapete cosa fare) lasciate vuoto.

» Optimize for size (Look out for broken compilers!) (CC_OPTIMIZE_FOR_SIZE)

Se il vostro compilatore gcc non vi ha mai dato problemi (oppure è l’ultima versione disponibile), date Y e il kernel compilato sarà più piccolo. Il che non guasta mai :o)

» Choose SLAB allocator

Cos’è uno SLAB Allocator? Una spiegazione tecnica si trova qui, a circa metà della pagina. In parole povere è un algoritmo che permette di dividere la memoria in piccole unità facilmente gestibili, evitando il formarsi di “vuoti” nella memoria che non possono essere riempiti.

Ci vengono proposte due alternative: SLAB e SLUB.

SLUB è più recente, meno testato ma promette un aumento di prestazioni del 5-10%; per saperne di più leggete questo articolo.

Scegliete SLAB per la stabilità, o SLUB per la velocità.

• Configure standard kernel features

Se non state facendo un sistema embedded non attivatelo mai!

» Load all symbols for debugging/ksymoops (KALLSYMS)

Può essere modificato solo se “Configure standard kernel features” è attivato. Altrimenti rimane sempre attivo.

Include all symbols in kallsyms (KALLSYMS_ALL)

Rispondete Y solo se siete kernel debuggers e vi interessa avere un output più “carino”. Anche a costo di ingrandirlo di 300KB.

Gli altri rispondano N.

Do an extra kallsyms pass (KALLSYMS_EXTRA_PASS)

Debuggers: sempre N sinché non si riscontra un bug proprio in Kallsyms. Questo parametro serve solo da workaround temporaneo sin quando il bug non sarà corretto.

Altri: N.

• Loadable module support

Insieme di opzioni che permettono di definire se il kernel potrà caricare/scaricare dei moduli.

Le (poche) opzioni sono descritte completamente nel wiki di Slacky.eu.

bell.png Nota: la descrizione dell’opzione “Forced module unloading” fa capire che no, i linuxari non sono per nulla seri :o)

• Block layer

Queste opzioni consentono di specificare alcune caratteristiche della parte del kernel che si occupa di comunicare con i dispositivi a blocchi (volgarmente detti Hard Disk :o).

Il mio consiglio è di evitare lo scheduler input/output “Anticipatory” come default nel caso stiate costruendo un server: la lettura da database è più lenta.

Per il resto, seguite pure la descrizione del wiki di Slacky.eu.

• Processor type and features

exclamation.png Questo è il menù che consente i migliori risultati in termini di prestazioni/consumi. E contemporaneamente può rendere inavviabile il kernel se avete impostato il processore sbagliato. Eseguirlo con attenzione.

Sapete che processore avete, vero? Spero di sì, ma per sicurezza vi dico il comando:

cat /proc/cpuinfo

Quel comando elenca tutto ciò che Linux riesce a sapere dal processore.

nb Nota: leggete man mano le varie opzioni su slacky.eu, qui sotto ne descriverò bene solo alcune.

» Tickless System (Dynamic Ticks) (NO_HZ)

Il sistema ogni tanto guarda se “qualcosa” (driver della scheda audio, per esempio) richiede attenzione.
A quale frequenza compie questo controllo? Ubuntu Feisty Desktop mi pare che lo faccia 1000 volte al secondo (1000 Hz), altri lo fanno 250 volte al secondo (250 Hz).
Però quando il processore non ha nulla da fare? Perché dovrebbe sempre controllare? Non possiamo far controllare “dinamicamente” se i driver chiedono attenzione? Su un sito che spiegava l’argomento ho letto che questo, in un computer portatile, portava a allungare di un’ora la vita della batteria.

Quindi se state facendo questo lavoro su un portatile o dovunque il consumo energetico sia un fattore importante (o state sviluppando per real-time) potete rispondere Y qui. Probabilmente degraderà un po’ le prestazioni.

Se invece non volete perdere potenza di calcolo, rispondete N.

» High Resolution Timer Support (HIGH_RES_TIMERS)

Voi sareste interessati a comprare un orologio atomico per avere l’ora esatta, o vi accontentate di millisecondo più millisecondo meno?
Abilitare questa opzione senza avere hardware capace (scheda madre costosa :P) ingrandisce solamente il kernel ma non ha effetti sulle prestazioni.

Questa è un’opzione utile forse per applicazioni real-time con specifiche temporali molto stringenti. Se è il vostro caso, rispondete Y.

Se invece non vi serve una precisione estrema (sotto i microsecondi…) rispondete N.

» Paravirtualization support (EXPERIMENTAL) (PARAVIRT)

Migliorano le prestazioni quando su una stessa macchina girano diversi sistemi Linux contemporaneamente (Debian, Knoppix, Suse… aperti insieme). Non c’entra niente con il dual boot.

Se avete intenzione di far girare dei sistemi “guest” completi sopra un sistema “host” potete rispondere Y qui.

Se non avete in mente di fare alcuna cosa del genere (un solo sistema alla volta) o vi spaventano le cose sperimentali rispondete N.

exclamation.png Attenzione! Dai commenti a questo articolo di DiviLinux sembra che non potrete usare i driver proprietari nVidia se abilitate questa opzione!

» Processor family

Alè, una lista completa di tutti i processori supportati dal kernel Linux! Dovete sceglierne uno e uno solo.

exclamation.png Attenzione: cercate di non sbagliare!

Facciamo un esempio. Date a terminale

cat /proc/cpuinfo | grep model

e avrete un risultato simile a questo, se possedete un Pentium4:

model           : 2model name      : Intel(R) Pentium(R) 4 CPU 1.80GHz

In questo caso la scelta ovvia è Pentium-4/Celeron(P4-based)/Pentium-4 M/older Xeon (MPENTIUM4)

» Generic x86 support (X86_GENERIC)

Se avete un processore x86 (tutti i Pentium) date Y e avrete altri miglioramenti. Questa opzione è utile ai grossi distributori, perché è molto generica e consente di fare un solo kernel per tutte le varietà di processori x86.

» HPET Timer Support (HPET_TIMER)

Dalla lettura di numerosi articoli sull’argomento emerge che HPET (wikipedia) consente al sistema di andare in modalità sleep per intervalli molto più lunghi (risparmio energetico!) quindi è cosa buona assai. Ovviamente deve essere supportato dal vostro chipset per funzionare…

Se avete un chipset con la nuova generazione di timer HPET o non siete sicuri, date Y.

Solo se siete sicuri di non averlo date N.

» Preemption model

Ah-ah! Questo sì che è un punto interessante, francamente il resto è una martellata sui coglioni assurda!

Spiegazione lunga (e pure in inglisc) su vantaggi e svantaggi di un kernel a bassa latenza: leggere qui!

Spiegazione breve: il sistema ogni tanto interrompe il task che il processore sta eseguendo per sostituirlo con un altro task (a seconda della priorità dei task da eseguire). Ovviamente devono esserci dei “punti” nel kernel che consentano di cambiare task in tutta sicurezza.

Questa opzione specifica di fatto la frequenza di questi punti nel codice del kernel (spiegazione da niubbi, lo so, ma è per loro che si scrivono le guide. E per la gloria di Linux, dimenticavo!).
No Forced Preemption (Server): sono pochi i punti in cui si può cambiare task, quindi verranno eseguite sempre grosse porzioni di kernel e il processore “perderà meno tempo” a cambiare task. Questa opzione garantisce la massima potenza grezza di calcolo ed è ideale per un server, ma può risultare frustrante per l’utilizzo desktop: da un clik del mouse alla comparsa della finestra possono passare anche alcuni secondi, se nel frattempo il processore sta eseguendo altri compiti.

Voluntary Kernel Preemption (Desktop): i punti nel codice del kernel in cui si può cambiare task sono attentamente distribuiti in modo da ottenere un compromesso equilibrato tra potenza di calcolo e prontezza della risposta. Questa opzione è adatta alla maggior parte dei desktop (per chi di solito fa una cosa per volta e non si mette a guardare “Jessica e le sue amiche” su Kaffeine mentre scrive il curriculum vitae su Openoffice e ascolta la discografia completa di Zucchero con Amarok, per intenderci :o)

Preemptible Kernel (Low-Latency Desktop): tutto il codice del kernel è pieno zeppo di punti in cui si può cambiare task. Questo significa che in qualunque istante, qualunque cosa stiate facendo, se cliccate da una parte il computer eseguirà immediatamente la vostra richiesta e che tutte le altre applicazioni vadano a farsi fottere, voi siete più importanti. Questa grande considerazione vi permetterà di fare trenta cose tutte insieme e tuttavia vedere i pornazzi senza mai perdere un frame (tragedia!). Ma la potenza di calcolo viene penalizzata “molto”. Ovviamente prima che il computer completi il vostro curriculum vitae (Openoffice ha priorità minore di Kaffeine) avrete ormai perso le speranze di trovare lavoro. Questa scelta è indicata a chi deve eseguire applicazioni audio/video professionali o ha bisogno di un ambiente soft real-time.

» Preempt The Big Kernel Lock (PREEMPT_BKL)

Attivando questa opzione i punti di preemptibilità sono inseriti proprio dappertutto, anche laddove sarebbe meglio finire prima il task.

Per fortuna i processori moderni sono abbastanza veloci da non farci rimpiangere la potenza perduta, quindi quelli che al passo precedente hanno scelto l’opzione “Preemptible Kernel (Low-Latency Desktop)” dovrebbero dare Y qui. Quantomeno per coerenza :o)

» Local APIC support on uniprocessors (X86_UP_APIC)

Le CPU più recenti hanno un controller locale di interrupt: questi interrupt sono generati all’interno della CPU e possono informare il sistema quando si generano lockup, cambi di potenza…

Se il vostro processore ha la flag apic (cat /proc/cpuinfo) potete rispondere Y.

Se la flag apic non è presente, rispondete N.

» High Memory Support

Se avete <1 GB di memoria RAM spuntate “off“.
Se avete da 1 a 4 GB spuntate “4GB“.
Se avete >4 GB spuntate “64GB“. Brutti bastardi!

» Memory split

Se non sapete a cosa serve, non toccate questo parametro (”Default 896MB lowmem“)

» Memory model

Possono essere visualizzate sino a tre alternative: Flat Memory, Sparse Memory e Discontiguous Memory. Sono tre modelli che il kernel utilizza per la gestione della memoria.

Flat Memory funziona sempre per tutti e spesso e l’unica presente; mentre Sparse Memory e /o Discontiguous Memory appaiono solo in sistemi che permettono operazioni più avanzate (come l’aggiunta/rimozione “al volo” della memoria). Selezionatelo se non pensate di mettere ancora mano alla memoria una volta che avete acceso il pc.

Sparse Memory è meno maturo e testato di Discontiguous Memory, ma potrebbe essere più performante.

Discontiguous Memory è maturo e testato, andrebbe preferito rispetto a Sparse Memory.

» 64 bit Memory and IO resources (EXPERIMENTAL) (RESOURCES_64BIT)

Piuttosto semplice: se avete hardware a 64 bit potete sfruttarlo per intero con questa opzione (Y): la CPU a 64 bit potrà comunicare con la memoria e le schede di input/output usando 64 bit quando anche loro sono a 64 bit.

Se invece il vostro processore non è a 64 bit (o lo è ma non avete memoria/schede a 64 bit) è inutile abilitarla. N.

» Allocate 3rd-level pagetables from highmem (HIGHPTE)

Siccome il processore riesce ad accedere più facilmente alla cosiddetta “memoria bassa”, è più vantaggioso scrivere le page tables solamente nella “memoria alta” riservando la memoria bassa ai dati consumati dalle applicazioni.

Se avete a disposizione “molta” memoria RAM (>1GB) potete abilitarlo (Y). Può darsi che il comando top vi faccia vedere poi una quantità di ram inferiore a quella reale, perché vi mostra la ram disponibile (e non quella già occupata dalle page tables).

Altrimenti potete scegliere tranquillamente N.

» Math emulation (MATH_EMULATION)

Tutti i processori moderni (486DX, Pentium e successivi) hanno al loro interno un coprocessore per eseguire le operazioni matematiche in virgola mobile.

Se il vostro processore non ha un coprocessore matematico oppure questo è rotto, dovete abilitare questa opzione dando Y.

Se invece il coprocessore è presente e funziona potete rispondere N e avere un kernel più piccolo di 66KB.

» MTRR (Memory Type Range Register) support (MTRR)

Funzionalità presente sui Pentium successivi al Pentium Pro e al Pentium II, offre considerevoli vantaggi in termini di velocità per le schede video PCI e AGP. Abilitatelo (Y).

Se il vostro processore non ha registri MTRR questa opzione aggiunge 9KB in più al kernel senza avere altri effetti, e potreste disabilitarla con N.

» Boot from EFI support (EFI)

EFI (Extensible Firmware Interface) è presente sui famigerati Macintosh con processore Intel, al posto di BIOS (ha senso questa cosa o S. Jobs si droga pesantemente?).

Se il vostro computer usa EFI invece di BIOS è necessario dare Y qui e usare un bootloader come ELILO (LILO e GRUB ignorano le istruzioni EFI). Il kernel sarà più grande di 8KB.

Invece se usate BIOS potete rispondere tranquillamente N.

» Enable seccomp to safely compute untrusted bytecode (SECCOMP)

Con questa opzione il kernel sarà in grado di eseguire codice “non sicuro” confinandolo nello spazio di indirizzamento ad esso dedicato.

Tutti dovrebbero abilitare questa opzione (Y), tranne chi stia sviluppando un sistema embedded.

» Timer frequency

Regola la frequenza con la quale il sistema controlla gli interrupt ricevuti. Un valore basso significa massima potenza di calcolo (adatto ad un server), mentre un valore alto significa minimi tempi di risposta/latenze (adatto ad un desktop).

Per i computer portatili è possibile risparmiare energia scegliendo valori bassi.

Le scelte possibili sono 100 (server), 250, 300 e 1000 (desktop) Hz. Le altre sono inutili.

» kexec system call (KEXEC)

È utile per “spegnere” un kernel e attivarne un altro senza riavviare la macchina.

Se trovate questa grande innovazione inutile (non vi interessa saltarellare da un kernel all’altro) rispondete N.

» kernel crash dumps (EXPERIMENTAL) (CRASH_DUMP)

Se avete abilitato KEXEC potreste voler abilitare anche questa opzione: quando il kernel di sistema si avvia, riserva una parte della memoria (da impostare al punto successivo) per un kernel d’emergenza che si attiva in caso di crash.

Questa opzione è utile agli sviluppatori che vogliono capire cosa ha causato il crash, tutti gli altri possono tranquillamente rispondere N.

» Physical address where the kernel is loaded (PHYSICAL_START)

Indirizzo fisico dove viene caricato il kernel. Compare solo se avete abilitato il punto precedente.

» Build a relocatable kernel(EXPERIMENTAL) (RELOCATABLE)

Consente di caricare il kernel altrove rispetto allo spazio predefinito da 1MB. Un uso può essere quando il kernel di emergenza chiamato da kexec deve essere avviato, siccome deve risiedere in una posizione differente dal kernel primario (e al passo successivo si specifica la posizione di memoria a cui deve essere allineato).

Anche questa opzione è più utile agli sviluppatori che agli altri, che possono rispondere N.

» Alignment value to which kernel should be aligned (PHYSICAL_ALIGN)

Indirizzo fisico al quale il kernel dovrebbe essere allineato. Compare solo se avete abilitato il punto precedente.

» Compat VDSO support (COMPAT_VDSO)

Se avete una versione di glibc superiore alla 2.3.3 potete rispondere N. In caso contrario dovrete rispondere Y.

nb Nota: Per sapere la versione di glibc su sistemi Debian-based il comando è:

dpkg -l | grep libc6

• Firmware drivers

Tutte le (poche) opzioni sono descritte nel wiki di Slacky.eu.

• Power management options (ACPI, APM)

Prestare attenzione a questo menu specialmente se il consumo energetico è un fattore importante (come nei computer portatili).

ACPI è più avanzato di APM quindi se ne raccomanda l’uso. Tuttavia alcuni vecchi dispositivi potrebbero richiedere APM piuttosto che ACPI.

Su un computer fisso (desktop) disabilitare tutte le opzioni che non hanno senso, come Battery (ACPI_BATTERY).

bell.png Nota: tutte le opzioni sono descritte nel wiki di Slacky.eu. Qui sotto sono presenti solo alcune note che potrebbero tornare utili.

» Default resume partition (PM_STD_PARTITION)

Questo parametro dovrebbe essere impostato con la prima partizione di swap, poiché è lì che verranno salvati sul disco i dati. Per sapere quale è la partizione di swap basta dare il comando

cat /etc/fstab | grep swap

e verrà stampata a video la riga di fstab contenente le informazioni sullo spazio di swap. A noi interessa sapere in quale partizione si trova (prima stringa della riga), ad esempio /dev/sdb5.

» CPUFreq processor drivers

Scegliete accuratamente i driver che si adattano al vostro processore e deselezionate tutti gli altri. Se non sapete cosa fare con un driver, selezionatelo come modulo (M).

• Bus options (PCI, PCMCIA, EISA, MCA, ISA)

Consentono di modificare il modo con cui il kernel comunica con i bus di sistema.

Quasi tutti i computer hanno un bus PCI, i più recenti anche PCI Express. Invece il bus ISA ormai è obsoleto.
Ecco il comando utile per capire cosa vi serve:

lshw -html > ~/lshw.html

Grazie a quel comando avrete nella vostra cartella home una pagina html chiamata “lshw.html” che vi presenterà in una maniera così bella tutto il vostro hardware rilevato che non potrete fare a meno di sorridere.

bell.png Nota: dovete prestare attenzione soprattutto ai driver utilizzati. Infatti è facile trovarli e abilitarli in xconfig (aprite la casella di ricerca con CTRL+F, inserite il nome del driver e dovreste trovare immediatamente le opzioni di configurazione corrispondenti).

Purtroppo questa è una parte ancora non scritta sul wiki di slacky.eu quindi riporterò una traduzione dall’inglese delle opzioni, tuttavia molto intuitive.

» PCI support (PCI)

Va quasi sicuramente abilitato con Y, a meno che non sappiate quello che state facendo. Il bus PCI in quasi tutti i computer moderni collega tutte le schede montate sulla scheda madre (ad esempio la scheda audio). Fate affidamento sull’output di lshw.

Altri bus alternativi a PCI (per computer vecchi) sono ISA, EISA, MCA, VESA.

PCI access mode

Nei sistemi con bus PCI, il BIOS può essere utilizzato per determinare i dispositivi PCI e le loro configurazioni. Tuttavia alcune vecchie schede madri hanno il BIOS bacato e il sistema potrebbe crashare. In più, alcuni dispositivi embedded basati su PCI non hanno nessun BIOS. Linux può provare a determinare direttamente l’hardware PCI senza passare attraverso il BIOS.

Con questa opzione potete specificare come Linux dovrebbe trovare i dispositivi PCI.

BIOS: userà il BIOS

MMConfig: userà il supporto MMConfig di PCIExpress

Direct: li rileverà direttamente

Any: Prima proverà MMConfig, in caso di insuccesso Direct e infine BIOS.

Se non siete sicuri, scegliete “Any“.

PCI Express support (PCIEPORTBUS)

Abilita automaticamente il supporto alle porte del bus PCI Express (molte nuove schede grafiche usano questo tipo di porta). Gli utenti possono scegliere di avere sulle porte PCI Express i supporti Native Hot-Plug, Advanced Error Reporting, Power Management Event e Virtual Channel (Root o Switch).

Se non avete alcuna porta PCI Express, disabilitate questo modulo con N.

» Message Signaled Interrupts (MSI and MSI-X) (PCI_MSI)

Questa opzione consente ai driver dei dispositivi di segnalare un interrupt tramite una Memory Write entrante sul proprio bus PCI invece di asserire il pin IRQ.

Nel dubbio deselezionare questa opzione con N.

» PCI Debugging (PCI_DEBUG)

Da attivare se avete problemi col supporto a PCI e volete che vengano prodotti messaggi di debug sul log di sistema.

Altrimenti, N.

» Interrupts on hypertransport devices (HT_IRQ)

Questa opzione consente ai dispositivi con hypertransport nativo di generare interrupt.

Nel dubbio, Y.

» ISA support (ISA)

Da abilitare se avete un bus ISA sulla scheda madre. È abbastanza raro ormai.

» MCA support (MCA)

Da abilitare se avete un bus MicroChannel.

» NatSemi SCx200 support (SCx200)

Fornisce supporto di base per i processori Geode della National Semiconductor (ora della AMD). Questo driver richiede i PCI-id di alcunio dispositivi on-chip, quindi è probabilmente richiesto da altri driver scx200_*

Se il vostro processore non è un Geode, potete dare tranquillamente N.

• PCCard (PCMCIA/CardBus) support (PCCARD)

Da abilitare soltanto se avete uno slot PCMCIA/PCCard. Di solito sono presenti sui portatili, mentre sui desktop è rarissimo.

• Support for PCI Hotplug (EXPERIMENTAL) (HOTPLUG_PCI)

Aggiungere e togliere schede PCI mentre il computer funziona è sempre stato il vostro sogno?

Se la risposta è “FIQUO!” date Y.

Se la risposta è “Ma che cazzata” date N.

• Executable file formats

Wiki Slacky.eu

• Networking

» Networking options

exclamation.png Attenzione! Questo menu richiederebbe una trattazione così pesante che l’unico consiglio che mi sento di darvi è: non cambiate nulla rispetto alle impostazioni predefinite della vostra distro!

bell.png Nota: se qualcuno ha dei link utili da inserire in questa sezione può farmeli avere :o)

» Amateur radio support (HAMRADIO)

Wiki Slacky.eu

bell.png Nota: Se siete radioamatori e avete una radio amatoriale che può essere connessa al pc, vi pregherei di spiegarmi a cosa servono quelle opzioni perché io ho risposto N e non ho la minima idea di cosa siano quelle cose :o)

» IrDA (infrared) subsystem support (IRDA)

Date Y se avete una porta a infrarossi (quasi tutti i portatile ce l’hanno).

Wiki Slacky.eu

» Bluetooth subsystem support (BT)

Date Y se avete il bluetooth (è abbastanza raro)

» RxRPC session sockets (AF_RXRPC)

Il modulo è incompleto. Per dare Y bisogna essere sicuri di volerlo usare. Altrimenti N.

» Wireless

Improved wireless configuration API (CFG80211)

Non può essere disabilitato se qualche paramentro successivo è abilitato, quindi se usate spesso la wireless (laptop) rispondete Y, altrimenti (desktop) M.

Solo se siete sicuri al 100% di non usare mai la wireless, disabilitate tutto il resto e poi questa opzione dando a tutte N.

Wireless extensions (WIRELESS_EXT)

Generic IEEE 802.11 Networking Stack (mac80211) (MAC80211)

Export mac80211 internals in DebugFS (MAC80211_DEBUGFS)

Enable debugging output (MAC80211_DEBUG)

Verbose debugging output (MAC80211_VERBOSE_DEBUG)

Debug frame dumping (MAC80211_LOWTX_FRAME_DUMP)

TKIP debugging (TKIP_DEBUG)

Extra statistics for TX/RX debugging (MAC80211_DEBUG_COUNTERS)

Support for IBSS testing (MAC80211_IBSS_DEBUG)

Verbose powersave mode debugging (MAC80211_VERBOSE_PS_DEBUG)

Generic IEEE 802.11 Networking Stack (IEEE80211)

Enable full debugging output (IEEE80211_DEBUG)

IEEE 802.11 WEP encryption (802.1x) (IEEE80211_CRYPT_WEP)

IEEE 802.11i CCMP support (IEEE80211_CRYPT_CCMP)

IEEE 802.11i TKIP encryption (IEEE80211_CRYPT_TKIP)

Software MAC add-on to the IEEE 802.11 networking stack (IEEE80211_SOFTMAC)

Enable full debugging output (IEEE80211_SOFTMAC_DEBUG)

» RF switch subsystem support (RFKILL)

Input layer to RF switch connector (RFKILL_INPUT)

• Device drivers

» Generic Driver Options

Select only drivers that don’t need compile-time external firmware (STANDALONE)

Mostra solo i driver che non richiedano firmware esterno al momento della compilazione. La risposta corretta per i newbie è sempre Y.

Il firmware è un software che viene fatto girare su processori dedicati, ad esempio ci può essere il firmware della scheda audio, quello della scheda video… Tutti i firmware dovrebbero essere già inclusi, solo un hardware particolarissimo e specializzato può richiedere di usare un firmware esterno al kernel.

Prevent firmware from being built (PREVENT_FIRMWARE_BUILD)

Siccome il firmware è generalmente fornito col driver, non dovrebbe essere necessario fare una sua ricompilazione: solo quando è necessario l’aggiornamento dello stesso si deve fare un rebuild. Consiglio: Y.

Userspace firmware loading support (FW_LOADER)

Quando un modulo esterno al kernel richiede di caricare del firmware questa opzione dovrebbe essere abilitata (il consiglio è di dare Y).

Driver Core verbose debug messages (DEBUG_DRIVER)

Il “Driver core” produce un output di debug assai dettagliato. Solo agli sviluppatori può interessare. N.

Managed device resources verbose debug messages (DEBUG_DEVRES)

Da scegliere se si hanno problemi con “devres” e si è interessati a risolverli. Insomma, per gli sviluppatori sempre. Gli altri diano N.

» Connector - unified userspace <-> kernelspace linker (CONNECTOR)

È usato dallo strato superiore del protocollo che definisce il socket netlink. Una spiegazione sommaria tratta da qui è questa: il socket netlink è un’interfaccia per consentire ai programmi in userspace di poter comunicare con il codice del kernel. Non è l’unica tuttavia.

Può essere costruito come modulo, siccome ci possono essere programmi che lo usano e non è una cosa che si possa sapere facilmente a priori. M.

» Memory Technology Device (MTD) support (MTD)

Supporto per le memorie come le flash usate sulle memorie USB. Qui c’è un articolo stringatissimo di Wikipedia. Queste memorie, chiamate “a stato solido”, dovrebbero rimpiazzare gli hard disk ed essere sempre più usate in futuro.

Non descrivo per ora le opzioni, ma lascio tutto com’era di default: modulare.

Tra i vari parametri ce n’è uno (BIOS Flash Chip) che permette di riprogrammare il BIOS. Ovviamente è da usare con assoluta cautela…

» Parallel port support

Parallel port support (PARPORT)

Se avete una porta parallela (25 pin) del tipo quella usata per alcune stampanti e volete farla funzionare date Y qui.

Se non ce l’avete un bel N.

PC-style hardware (PARPORT_PC)

Se il vostro PC è… beh, un PC normale con porta parallela e seriale, date Y. Se non fosse normale sareste voi i primi a saperlo.

Multi-IO cards (parallel and serial) (PARPORT_SERIAL)

Supporto anche per le porte seriali… Y se interessati.

Use FIFO/DMA if available (EXPERIMENTAL) (PARPORT_PC_FIFO)

Se possibile il driver cercherà di velocizzare un po’ le cose. Un bel Y ci sta.

SuperIO chipset support (EXPERIMENTAL) (PARPORT_PC_SUPERIO)

Abilita alcune richieste supportate dai chipset Super-IO. Bof. N.

AX88796 Parallel Port (PARPORT_AX88796)

Avete il chip di rete AX88796 e volete usare la sua porta parallela? Accomodatevi con Y.

Altrimenti rifiutate tutto con N.

IEEE 1284 transfer modes (PARPORT_1284)

Se la stampante supporta lo “status readback” o il “device id”, oppure vi interessa usare dispositivi che supportino i modi di trasferimento avanzati definiti da IEEE1284 potete rispondere Y.

Se non avete capito o non vi interessa, un bel N e tutti tranquilli.

» Plug and Play support

» Block devices

» Misc devices

» ATA/ATAPI/MFM/RLL support (IDE)

….bisogna includere nel kernel i driver IDE se si hanno dischi con bus IDE, ma non bisogna assolutamente mettere

Support for SATA (deprecated; conflicts with libata SATA driver) (BLK_DEV_IDE_SATA)

perché bisogna invece usare

Serial ATA (prod) and Parallel ATA (experimental) drivers (ATA)

Bisogna anche abilitare I2O e SCSI in caso di dischi SATA.

Poi bisogna mettere il supporto I2C: I2C support (I2C) e I2C device interface (I2C_CHARDEV)

E l’Hardware Monitoring support (HWMON): per scoprire quale sia il driver che vi serve installate il pacchetto lm_sensors e eseguite il programma sensors-detect.

Graphics support: Support for frame buffer devices (FB)

va deselezionato per i possessori di macchine x86, secondo questo post del forum italiano di Ubuntu:

http://forum.ubuntu-it.org/index.php?topic=115672.msg777913#msg777913

Non so il motivo, ma effettivamente se non viene deselezionato il kernel è avviabile solo da initrd. Senza non si avvia. Chi ha informazioni in proposito è pregato di lasciare un commento.

• File systems

Va compilato staticamente almeno il supporto al file system della partizione di root (solitamente ext3) se si vuole evitare di usare initrd.

• Instrumentation support

• Kernel hacking

• Security options

• Cryptographic options

• Library routines


5. Compilazione

Dopo aver scelto tutte le opzioni utili, è il momento di far lavorare il nostro PC. Vi auguro di avere un processore potente perché qui schizzerà al massimo per 45 minuti ed è meglio lasciarlo lavorare e passare a lavorare su un altro pc.

Esistono due modi di compilare il tutto:

  • metodo Debian
  • metodo standard

Noi tratteremo dettagliatamente solo il metodo Debian.

→ Compilazione Debian-way

Il programma principale che usiamo è make-kpkg.

bell.png Nota: è consigliato almeno dare un’occhiata alla pagina di manuale (man page), accessibile digitando da shell il comando

man make-kpkg

Per uscire dal manuale basta premere il tasto Q.

make-kpkg costruisce pacchetti Debian (.deb) del kernel Linux appena configurato a partire dai sorgenti. Il bello è che poi questi pacchetti verranno installati con un paio di clik! Godiamo tutti quanti!

Ok, dopo aver goduto (o perlomeno fatto finta per non darmi un dispiacere) possiamo descrivere il procedimento, le varie opzioni e qualche esempio.

Prima di iniziare

Assicuratevi di trovarvi nella directory di lavoro:

cd /usr/src/linux

Poi bisogna “ripulire” la directory da vecchi tentativi falliti che hanno lasciato le loro tracce (se è la vostra prima compilazione potete saltare questo passaggio):

make-kpkg clean

Mezzogiorno di fuoco

Il comando nella sua forma utile più completa incute arcaico timore & religioso rispetto:

CONCURRENCY_LEVEL=1 fakeroot make-kpkg --revision ~0.01 --append-to-version -lowlat --initrd kernel_image kernel_headers modules_image

CONCURRENCY_LEVEL=n

Serve a far girare la compilazione su più di un processore in parallelo, se possibile.

Impostate n secondo l’uscita del comando

catÃ�à/proc/cpuinfoÃ�à|Ã�àgrepÃ�àprocessor

Se il risultato è 0 (avete un solo processore) potete omettere questo parametro.

fakeroot

fa credere a make-kpkg di star girando con i permessi di root (potevamo anche usare sudo, è vero, ma un casino fatto con fakeroot è normale, un casino fatto con sudo è devastante :o)

- -revision ~0.01

Utilissimo per correggere un kernel.
Potete usarlo per tenere il conto di quante volte avete ricompilato il kernel (tenetevi 3 cifre almeno :o).
È obbligatorio che almeno un carattere sia numerico; i caratteri consentiti sono tutti gli alfanumerici e i tre caratteri + ~ .
Se lo omettete
, di default verrà assegnata al kernel risultante la revisione 10.00.Custom

exclamation.png Attenzione! Anche il carattere - è ammesso, ma solo gli sviluppatori dei kernel&moduli ufficiali delle distro possono usarlo! Non fatelo MAI altrimenti avrete problemi con dpkg, apt-get e simili!

È utile da usare quando scoprirete che avete fatto un errore nella configurazione e dovrete includere/togliere qualche modulo

exclamation.png Attenzione! Questa opzione sovrascriverà un eventuale kernel che avrete compilato in precedenza! Non usatelo se volete conservarlo (usate piuttosto –append-to-version)!

- -append-to-version -lowlat

Utilissimo per distinguere un kernel da un altro, diventa un po’ ridondante se avete già impostato l’opzione LOCALVERSION durante la configurazione del kernel.
Ad esempio supponiamo che abbiate compilato un kernel a massima potenza di calcolo per fare un server, e un kernel a minima latenza per fare un mediacenter. Come distinguerli, se entrambi sono 2.6.22? Facile! Al primo appenderete una stringa come -server, al secondo -mediactr

- -initrd

Questa opzione vi serve se non avete compilato tutti i moduli necessari all’avvio del kernel staticamente (ossia dentro il kernel, dando Y invece di M), oppure vi siete tenuti troppo “larghi” e il kernel risultante probabilmente sarà qualche MB.
Con questo parametro make-kpkg intraprenderà tutte le azioni necessarie perché il kernel e i suoi moduli siano caricati direttamente nella RAM all’avvio del sistema, ancor prima che il kernel inizi a girare.

Provate a far partire il kernel senza - -initrd, su su :o)

bell.png Nota: se lo stesso kernel compilato senza - -initrd non si avvia, mentre compilato con - -initrd si avvia, è evidente che avete dimenticato di compilare staticamente un modulo necessario. In tal caso ricontrollate il supporto ai dischi (ATA/SATA/…) e ai filesystem usati (ext2/ext3/reiserfs/…), sono le cause principali di kernel panic.

kernel_image

Istruisce make-kpkg di costruire il pacchetto Debian del kernel secondo le indicazioni contenute nel file .config.
Se non trova .config costruisce il kernel con delle impostazioni che… che ce ne frega, vi siete fottuti .config! Rifate tutto da capo, ve lo meritate!!!!

kernel_headers

Istruisce make-kpkg di costruire anche un pacchetto Debian contenente gli headers del kernel.

bell.png Chi sa qualcosa di più lo dica :P

modules_image

Istruisce make-kpkg di costruire anche un pacchetto Debian contenente dei moduli necessari. Questi si trovano nella cartella /usr/src/modules.

Esempio: per consentire la lettura/scrittura su NTFS io avevo scaricato e compilato a manina il modulo “fuse”, e ogni volta che ricompilo il kernel devo anche rifare quel modulo. Infatti si trova in /usr/src/modules

bell.png Se /usr/src/modules non c’è oppure è vuota non avete bisogno di dare anche modules_image.

Qualche esempio

La prima compilazione:

cd /usr/src/linux
fakeroot make-kpkg --revision ~0.00 --append-to-version -mammatiamo --initrd kernel_image kernel_headers modules_image

La seconda compilazione:

cd /usr/src/linux
make-kpkg clean
fakeroot make-kpkg --revision ~0.01 --append-to-version -ciprovo hernel_image kernel_headers modules_image

La terza compilazione:

cd /usr/src/linux
make-kpkg clean
fakeroot make-kpkg --revision ~0.00 --append-to-version -mavaff <font color="#ff0000">--initrd</font> kernel_image kernel_headers modules_image

…Poi avete comprato un Core²

cd /usr/src/linux
make-kpkg clean
CONCURRENCY_LEVEL=2
fakeroot make-kpkg --revision ~9.99 --append-to-version -stavoltacelafaccio kernel_image kernel_headers modules_image

Lanciate il comando che vi sembra più adatto

e inizierà a compilare il kernel.

bell.png Nota: si arresterà se troverà degli errori. Se tutte le dipendendenze di make-kpkg sono soddisfatte dovrete riaprire menuconfig/xconfig/gconfig e correggere la configurazione secondo le indicazioni.


Installazione

bell.png Nota: dovete aver fatto il kernel alla Debian-way! Non è mia intenzione (almeno per ora) trattare l’installazione nel metodo standard.

Dopo aver passato un’oretta a fischiettare, cincischiare, rigirarvi i pollici speranzosi mentre guardavate migliaia di righe scorrere nella vostra shell finalmente vedete che make-kpkg ha finito (e la ventola del pc sta riassestandosi su livelli umani)!

Il risultato di tanta fatica lo troverete nella cartella madre di /usr/src/linux:

 cd ..

Troverete i seguenti pacchetti Debian (modules-image sarà presente solo se c’erano dei moduli in /usr/src/modules):

linux-image-2.6.22-versione.deb
linux-headers-2.6.22-versione.deb
modules-image-2.6.22-versione.deb (opzionale)

Installateli tutti e 3 in quest’ordine: linux-headers, linux-image, modules-image. Potete usare uno strumento grafico fornito dalla vostra distro oppure questi comandi:

sudo dpkg -i linux-headers-2.6.22*.deb
sudo dpkg -i linux-image-2.6.22*.deb
sudo dpkg -i modules-image-2.6.22*.deb

Infine riavviate il computer e incrociate le dita!

Possono accadere basicamente 3 cose:

  1. happy FUNZIONA! Siete nella vostra bella interfaccia grafica, state aprendo e chiudendo le finestre per vedere i tempi di risposta, eccetera. Bravi! stella_premio
    Ora potreste ricompilarlo per ottenere altri scopi… o aiutarmi con questa guida. In cambio avrete tutto il mio amore heart
  2. ( Si avvia, ma non parte l’interfaccia grafica! Provate a modificare /etc/X11/xorg.conf e mettere i driver “vesa”.
    1. bomba Non si avvia nulla! Guardate la prossima sezione.

7. Problemi e Soluzioni

→ Kernel panic

bomba Se a video subito dopo LILO/GRUB compare un messaggio di kernel panic e non avevate usato –initrd, avete dimenticato di compilare staticamente (dando M invece di Y) dei moduli necessari per il kernel.

bomba Se a video subito dopo LILO/GRUB compare un messaggio di kernel panic e avevate usato –initrd, avete escluso (dando N invece di Y) dei moduli necessari per il kernel.

kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block

lampadina In entrambi i casi dovrete:

  • far ripartire la macchina scegliendo un vecchio kernel sicuramente funzionante nel menu di LILO/GRUB
  • dare nuovamente make menuconfig/xconfig/gconfig
  • cercare quali moduli avete dimenticato di compilare.
    Il messaggio del kernel panic può essere d’aiuto; ad esempio io mi ero dimenticato di compilare internamente il supporto al filesystem ext3 del disco dove risiede la partizione di root. Che pirla :o)
  • I moduli da abilitare assolutamente sono relativi al file system, ai driver del disco (ata/atapi e pata non devono essere selezionati insieme, solo pata), e alla sezione i2c in “Device Drivers”. Ovviamente devono essere inoltre presenti i moduli per il bus PCI… Altro per ora non mi viene in mente.

bell.png Nota: non dimenticate di dare make kpkg-clean prima di compilare nuovamente!

→ Schermata nera

errmon Il kernel è partito, ma invece di KDM/GDM (login grafico) ho una bruttissima schermata nera con login testuale!

lampadina Probabilmente questo è dovuto al fatto che avevi compilato i driver della scheda video, che ora col nuovo kernel non vengono caricati.
Per verificare questa ipotesi bisogna vedere se i driver “vesa” consentono di ottenere il login grafico.
Modificare xorg.conf con un editor testuale è semplice:

sudo nano /etc/X11/xorg.conf

Nella sezione “Device” bisogna commentare la linea “Driver” originale (mettendo un # davanti) e aggiungere la linea:

Driver    "vesa"

Salvare (CTRL+O), chiudere Nano (CTRL+X), e riavviare il computer.


8. Links

→ Alcune guide che mi hanno ispirato:

http://www.linuxchix.org/content/courses/kernel_hacking/

http://kernelnewbies.org/

→ L’autore delle bellissime iconcine che ho usato nell’articolo:

pall8 www.famfamfam.com (le iconcine sono qui)

Risposte

Ciao! Ho trovato in un forum Gentoo altri consigli per ottimizzare il kernel… ora sto compilando seguendo queste indicazioni assieme alla tua guida. Speriamo bene!

Ah… dimenticavo il link: http://forums.gentoo.org/viewtopic-t-139455.html

Grazie! Appena avrò tempo leggerò e cercherò di finire la guida, spero che il 2.6.23 non esca troppo rapidamente :)

Promemoria veloce:

1) dopo l’avvio ha selezionato di nuovo la onboard sound card: da disabilitare a BIOS e il problema vien risolto una volta per tutte

2) Altro problema: non trova il file /lib/modules/versione/modules.dep

Probabilmente è dovuto al fatto che ho cancellato la directory source del kernel originale, come suggerito da questo thread di linuxquestions:

http://www.linuxquestions.org/questions/showpost.php?p=2824555&postcount=13

In effetti dando i comandi

cd /lib/modules/versione
ls -la

si vede chiaramente che sono presenti dei link alla directory sorgente originale (ma avevo già fatto make-kpkg clean quindi i link probabilmente servivano a poco):

drwxr-xr-x 3 root root 4096 2007-09-27 11:03 .
drwxr-xr-x 10 root root 4096 2007-09-26 23:42 ..
lrwxrwxrwx 1 root root 23 2007-09-26 23:35 build -> /usr/src/linux-2.6.22.8
drwxr-xr-x 8 root root 4096 2007-09-26 23:35 kernel
-rw-r--r-- 1 root root 56891 2007-09-27 11:03 modules.alias
-rw-r--r-- 1 root root 69 2007-09-27 11:03 modules.ccwmap
-rw-r--r-- 1 root root 79988 2007-09-27 11:03 modules.dep
-rw-r--r-- 1 root root 591 2007-09-27 11:03 modules.ieee1394map
-rw-r--r-- 1 root root 141 2007-09-27 11:03 modules.inputmap
-rw-r--r-- 1 root root 158 2007-09-27 11:03 modules.isapnpmap
-rw-r--r-- 1 root root 74 2007-09-27 11:03 modules.ofmap
-rw-r--r-- 1 root root 17844 2007-09-27 11:03 modules.pcimap
-rw-r--r-- 1 root root 169 2007-09-27 11:03 modules.seriomap
-rw-r--r-- 1 root root 49697 2007-09-27 11:03 modules.symbols
-rw-r--r-- 1 root root 128699 2007-09-27 11:03 modules.usbmap
lrwxrwxrwx 1 root root 23 2007-09-26 23:35 source -> /usr/src/linux-2.6.22.8

altro promemoria: non è necessario fare tutto in un colpo, la configurazione può essere salvata in qualsiasi momento da x/g/menuconfig e poi ripresa successivamente: infatti verrà salvato/riaperto il file .config

Inoltre le patch di Ingo Molnar non possono essere messe insieme alle patch di Con Kolivas.

E Ingo Molnar non può sedersi allos tesso tavolo di Con Kolivas prima che siano stati tolti i coltelli.

thread di ubuntuforums con consigli utili da mettere in guida:

http://forum.ubuntu-it.org/index.php?topic=115672.0
http://forum.ubuntu-it.org/index.php?topic=111623.0
http://forum.ubuntu-it.org/index.php?topic=116589.0

Cosa bisogna abilitare se si vuole fare la ricompilazione senza/con initrd?

La risposta è qui:
http://guide.debianizzati.org/index.php/Debian_Kernel_Howto#Bisogna_usare_l.27initrd_oppure_no.3F

Attenzione! Per chi cerca un kernel low-latency e non vuole ricompilare: su Ubuntu c’è già, basta installarlo da adept/synaptic

Chiarimenti su make oldconfig:

http://forum.ubuntu-it.org/index.php?topic=117589.msg804354#msg804354

Ciao!!Complimenti x l’ottimo lavoro..mi ha aperto la strada del kernel recompiling dove ora posso reputarmi un esperto. Forse però potresti spiegare come settare GRUB in caso di compilazione del kernel statico, perchè crea kernel panic altrimenti. Ho trovato una spiegazione esaustiva in una delle guide che hai segnalato sul sito “debianizzati”.

Hai ragione, e dovrei pure aggiornarla al kernel 2.6.23 che senz’altro è da provare (nuovo scheduler CFS), ma in questo periodo sono infognato con la tesi. Se ne parla più avanti :o)

ps: la guida in questione era questa, http://guide.debianizzati.org/index.php/Guida_a_Grub e il passo utile è che non bisogna indicare per un kernel statico l’immagine initrd in /boot/grub/menu.lst

Si più o meno è li..ma il discorso non è tanto quello di non indicare l’immagine initrd (che da solo non la considera) ma quello di:
1) Inserire la configurazione prima dell’ “AUTOMAGIC KERNELS LIST”.
2) Sostituire root=UUID=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx con
root=/dev/hda* (dove al posto di * devi inserire la partizione associata a root).

PS. Poi..se riesci anche a spiegare come compilare il modulo apparmor sarebbe fantastico perchè Gusty lo richiede.

PS. PS. Buona tesi, io per fortuna ho già dato..

Ahhh, ecco cosa! Grazie mille, quello m’era sfuggito proprio!!!

Apparmor non lo so fare, anzi se riesci a capirlo tu mi farà piacere sapere come hai fatto :)

io purtroppo allo stato attuale dei fatti posso contribuire ben poco, sto proprio in questo momento ricompilando per la prima volta.

posso solo fare i miei più sentiti complimenti all’autore di una guida veramente illuminante.

grazie :)

Ciao Seven,

innanzitutto complimenti per l’ottimo lavoro, è proprio quello che stavo cercando in questi giorni una guida chiara, molto esplicativa e leggera da seguire per il modo in cui è scritta :D

volevo chiederti una cosa… per qunato riguarda l’installazione dei pacchetti ad un certo punto dici:

“Installateli tutti e 3 in quest’ordine: linux-headers, linux-image, modules-image”

ora io ho notato che in molte guide consigliano lo stesso ordine e in molte altre dicono di installare prima il pacchetto image e poi headers…

potresti chiarirmi questa cosa?

grazie mille
Andrea

@ Le Gauche: figurati, fa molto piacere sapere che il lavoro fatto serva a qualcuno :o)

@ Scacchia/Andrea:

Prima una spiegazione sui pacchetti:
-linux-image è il pacchetto del kernel vero e proprio
-linux-headers è un pacchetto che serve a particolari altri pacchetti contenente delle “istruzioni di compilazione”: l’esempio più banale che mi viene in mente è il driver binario nvidia, che durante l’installazione ha bisogno di avere indicazioni su come è stato costruito il tuo kernel per poter efficacemente comunicare con esso. Ad ogni ricompilazione che faccio devo sempre ricostruire il driver nvidia per il nuovo kernel. linux-headers invece non viene utilizzato dai pacchetti “normali” che non si interfacciano direttamente col kernel, quelli usano le opzioni di compilazione di glibc.
-modules-image invece è il pacchetto che contiene dei moduli che potevi avere in /usr/src/modules. Di nuovo, l’esempio che mi viene in mente è FUSE, necessario per ntfs-3g. Quando ancora non era incluso nei repository ufficiali di Ubuntu/Debian ho dovuto compilarlo a manina, e avevo messo i sorgenti di FUSE in /usr/src/modules. Ad ogni ricompilazione generavo il pacchetto modules-image che conteneva la “nuova versione” di FUSE.

Dopo averti fatto questa descrizione, potrei dirti che l’ordine logico sembrerebbe:
1) installa gli header->linux-headers
2) installa il kernel->linux-image
3) installa i moduli->modules-image

Ma guardando su packages.debian.org non trovo dipendenze tra gli uni e gli altri (ossia: il pacchetto linux-headers non dipende da linux-image, e viceversa) quindi la mia risposta alla tua domanda può essere: può benissimo darsi che l’ordine di installazione non abbia importanza, a me funziona così e sicuramente anche agli altri funziona in un altro ordine se l’hanno scritto così.

Conclusione: vai tranquillo!

E grazie anche a te per il feedback :o)

———-

Purtroppo non ho avuto ancora il tempo di aggiornare la guida al nuovo kernel 2.6.23, che come tutti sanno introduce un nuovo scheduler CFS che promette prestazioni migliori della patch -ck. Vi consiglio tuttavia di usarlo, perché Ingo Molnar e Linus Torvalds hanno spinto parecchio su questa nuova caratteristica, definendola senza mezzi termini il più importante cambiamento dopo l’introduzione dell’opzione “Tickless System”.

Infine ricordo a tutti il commento precedente di lukamar:

1) Inserire la configurazione prima dell’ “AUTOMAGIC KERNELS LIST”.
2) Sostituire root=UUID=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx con
root=/dev/hda* (dove al posto di * devi inserire la partizione associata a root).

E se qualcuno sa come compilare apparmor come modulo, ben venga… Uno spunto di partenza è senz’altro la risposta alla domanda “che cazzo è apparmor?”

http://it.opensuse.org/Dettagli_di_AppArmor

Ok, questo fine settimana di amerò o ti odierò. Mi faccio un bel kernel 2.6.22 (così mi vanno i driver ATI) con CK, ma senza swap…

Sonoffree, a questo punto prova il 2.6.23!

(non ho capito bene perché devi ricompilare per i driver ATI, forse mi sono perso qualche notizia…)

No, voglio compilare per soddisfazione personale. Il problema è che i driver ati 8.42 non supportano il 2.6.23. Comunque installo l’ultimo dai, al massimo aspetto i prossimi driver

Ho un errore all’inizio della compilazione

fakeroot make-kpkg –revision ~0.00 kernel_image kernel_headers modules_image
exec make -f /usr/share/kernel-package/ruleset/minimal.mk debian DEBIAN_REVISION=~0.00
====== making target minimal_debian [new prereqs: ]======
This is kernel package version .
test -d debian || mkdir debian
mkdir: impossibile creare la directory `debian’: Permesso negato
make: *** [minimal_debian] Error 1
Failed to create a ./debian directory: Nessun file o directory at /usr/bin/make-kpkg line 1096.

idee? Devo andare di sudo?

Vai di sudo, a quanto pare con fakeroot non hai i permessi per creare nuove directory.

Ora che ci penso: avevamo dato i permessi all’utente normale (sudo adduser sonoffree src) sulla directory src, ma la directory src/linux che permessi ha?

Forse bisogna imporre anche a quella il gruppo src (sudo chgrp src /usr/src/linux) oppure fare il cambiamento di gruppo ricorsivo con l’opzione -r.

Bisognerà indagare un po’, comunque tutto si risolve con sudo (a dire il vero sudo sarebbe necessario solamente al momento di installare i pacchetti, non condivido molto l’uso di sudo per fare normale compilazione anche se non è sbagliato).

@Seven: Grazie per la spiegazione sui pacchetti, in effetti ho fatto delle prove installando prima il pacchetto headers e poi image, dopodichè ho fatto viceversa e sembra vada bene in tutti e due i modi, però dalla tua spiegazione credo che dalla prossima compilazione installerò prima gli headers :)

@Sonofree: anche io non sono mai riuscito a compilare con fakeroot, ance dando i permessi di scrittura su /usr/src… so che tutti sconsigliano di usare sudo, ma io riesco solo cosi… boh :-/

Ho fatto con sudo…ma diciamo che è meglio fare l’oldconfig la prima volta! :-p

Eh sì, diciamolo :P

ciao, gran bella guida :)

ho un problema però, in fase di compilazione mi dà quest’errore:

Building modules, stage 2.
MODPOST 1519 modules
WARNING: Can’t handle masks in drivers/mtd/nand/cafe_nand:FFFF0
ERROR: “max_pfn” [kernel/power/toi_pageflags_test.ko] undefined!
make[2]: *** [__modpost] Error 1
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.23.1′
make: *** [debian/stamp-build-kernel] Error 2

qualche idea?

Ciao RushingMonkey!

La prima cosa che mi viene in mente è riaprire menu/x/gconfig e cercare (CTRL+F in Xconfig) la stringa “pfn”.

La mia ipotesi è che esista un parametro “max_pfn” che deve essere necessariamente definito per poter compilare quel modulo [kernel/power/toi_pageflags_test.ko]

Vedo che stai provando il 2.6.23, quando hai finito vorrei da te un feedback: siccome molto probabilmente userai il nuovo scheduler CFS vorrei sapere quanto più responsivo ti appare il sistema (la prova che mi viene in mente è di inserire una memoria usb e vedere quanto tempo ci mette prima di riconoscerla). Vorrei anche sapere se hai impostato o no l’opzione NO_HZ :)

Ciao!

ari ciao :)

dunque, per quanto riguarda l’opzione NO_HZ non l’ho impostata; il pc in questione è effettivamente un portatile, ma lo uso al 99% con l’alimentatore inserito e in ogni caso la durata della batteria è ridicola (è un 17 pollici), quindi, seguendo quanto scrivevi, ho preferito favorire le prestazioni.

ah, non ho capito se questo “famoso” CFS sia un parametro da configurare / attivare o meno, sotto “IO schedulers” mi faceva scegliere tra Anticipatory, Deadline e CFQ (ho scelto il primo). magari sto dicendo una bestialità e non centra nulla? :P

tornando al problema: non riesco a trovare il modulo toi_pageflags da gconfig (come avrai capito ho applicato la patch TuxOnIce). la prima configurazione lo fatta con make config e mi ricordo che ho settato diverse opzioni relative a TuxOnIce, ma da gconfig trovo solo TOI_CORE :(

grazie per la risposta, ciao :)

scusa, trovato… bisognava mettere “show all options” dal menù, stupido me -_-

ad ogni modo, quell’opzione l’avevo effettivamente impostata su M, cosa mi consigli di fare?

grazie ancora :)

sevencapitalssins, solo un consiglio (cancella questo commento dopo). Questa pagina mi manda in freeze firefox.

ho risolto togliendo del tutto quell’opzione :P

a compilazione e installazione terminata sono riuscito ad avviare il kernel, ma sinceramente non ho notato praticamente alcun miglioramento rispetto a quello predefinito di Gutsy (anzi). non so se dipendesse dal fatto che da “Instrumentation support” in giù avevo lasciato tutto praticamente com’era…

comunque ho riconfigurato alcune opzioni e sto procedendo con un secondo tentativo ^^ fra gli scheduler ho scelto “CFQ” stavolta, dovrebbe trattarsi del Completely Fair se non ho capito male (?)

non mancherò di scrivere un feedback, nel frattempo ancora complimente per questa guida (senza la quale dubito mi sarei buttato nell’impresa) :D

@Sonoffree: lo manda in freeze pure a me, infatti voglio trasferire questa guida su un serverino statico, magari lightppd… il tutto quando avrò tempo, ora sono nella fase più produttiva della tesi altrimenti avrei già aggiornato la guida alla versione 2.6.23….

@RushingMonkey: sono lieto che tu abbia risolto, purtroppo non ti posso dire più di quanto ci sia già scritto perché il 2.6.23 non l’ho ancora scaricato… troppo poco tempo a disposizione!

compilato e installato, il computer si avvia ma… è più lento e irresponsivo rispetto a quello standard di gutsy.

ho usato il 2.6.23.1, patchato solo con TuxOnIce, importato la config del kernel di ubuntu e seguito la tua guida (lasciando invariate alcune opzioni, come dicevo prima). il pacchetto kernel image che ho ottenuto era intorno ai 16 MB.

boh, proverò a compilare il 2.6.22 a questo punto :/

Ciao RushingMonkey,

devo dire che la cosa mi sembra parecchio strana! Che senso ha, mi chiedo, annunciare grandi miglioramenti nello scheduler se poi è meno reattivo? A questo punto usa il kernel lowlatency di Ubuntu…

Comunque non posso darti nessun consiglio, posso solo domandarti se hai impostato bene il tuo processore… finché non provo io stesso non me la sento di dare pareri, e sarò libero solo in Gennaio.

Per quella data chissà cos’altro sarà uscito… :D

Poi infinity89 mi ha segnalato un patchset davvero interessante chiamato “kamikaze”, http://kamikaze.waninkoko.es se qualcuno potesse provarlo e dirmi le sue impressioni gliene sarei grato :D

  • </