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)

100 thoughts on “Ricompila il Kernel!

  1. Fruskio ha detto:

    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

  2. sevencapitalsins ha detto:

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

  3. sevencapitalsins ha detto:

    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

  4. sevencapitalsins ha detto:

    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.

  5. sevencapitalsins ha detto:

    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

  6. lukamar ha detto:

    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”.

  7. sevencapitalsins ha detto:

    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

  8. lukamar ha detto:

    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..

  9. sevencapitalsins ha detto:

    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 :)

  10. Le Gauche ha detto:

    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 :)

  11. Scacchia ha detto:

    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

  12. sevencapitalsins ha detto:

    @ 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

  13. sonoffree ha detto:

    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…

  14. sevencapitalsins ha detto:

    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…)

  15. sonoffree ha detto:

    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

  16. sonoffree ha detto:

    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?

  17. sevencapitalsins ha detto:

    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).

  18. Scacchia ha detto:

    @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 :-/

  19. sonoffree ha detto:

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

  20. sevencapitalsins ha detto:

    Eh sì, diciamolo :P

  21. RushingMonkey ha detto:

    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?

  22. sevencapitalsins ha detto:

    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!

  23. RushingMonkey ha detto:

    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 :)

  24. RushingMonkey ha detto:

    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 :)

  25. sonoffree ha detto:

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

  26. RushingMonkey ha detto:

    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

  27. sevencapitalsins ha detto:

    @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!

  28. RushingMonkey ha detto:

    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 :/

  29. sevencapitalsins ha detto:

    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

  30. RushingMonkey ha detto:

    alla fine ho compilato un 2.6.23.8 vanilla (senza alcuna patch): la situazione è lievemente migliorata, nel senso che come prestazioni è in linea con quello “generic” di ubuntu… nonostante l’ottimizzazione per il processore e per la ram… sul processore era difficile sbagliare (è un pentium 4) mentre la memoria è di soli 512 MB, quindi ho impostato “high memory support” su OFF (il generic è impostato su 4GB o_O boh).

    non mi interessa / non ho esigenza di avere un kernel lowlatency, volevo solo un desktop un po’ più reattivo dato che col passaggio da feisty a gutsy le prestazioni sono *nettamente* peggiorate… e pensavo che snellire il kernel avrebbe aiutato.

    comunque non mi arrendo :D dopo faccio qualche altra prova; cosa dovrebbe fare comunque quella patch “kamikaze”? il nome non è molto rassicurante :P

  31. sevencapitalsins ha detto:

    Se hai un P4 puoi provare il kernel i386 di ubuntu, è leggermente migliore del generic. Ma è strano, sul mio pc con gutsy le prestazioni sono migliorate…

    In un mio post su gentoo avevo messo il .config del kernel, e ti posso dire che gentoo è una belva, tanto che lo metto in powersave sempre e comunque (ma tutti i programmi sono compilati ottimizzati…)

    Puoi provare a adottare quel .config (il kernel si ricompila in una manciata di minuti, è una cosa bestiale) per vedere se migliora qualcosa. Non toccare lo scheduler, di default dovrebbe essere il nuovo.

    “kamikaze” non è un nome rassicurante: ho dato un’occhiata e ho capito che le prestazioni sono preferite anche a scapito della stabilità, a te l’ardua scelta. Io se riuscissi me lo fare immediatamente :P

  32. Pioneer Skies ha detto:

    Ciao seven! Passo anch’io a farti un po’ di complimenti per la guida ben fatta. ^_^

    Quando a gennaio potrai riprendere a smanettare sul PC, mi chiedo: non è che approfondiresti la compilazione dei moduli per il nuovo kernel? Ad esempio i restricted, per citarne uno che non mi lascia gustare il mio 2.6.23.8 CFS appena compilato che parte benissimo, ma sul quale non riesco a fare andare i driver nvidia. >_>

    A riguardo ho trovato spiegazioni in 3 righe; il che fa sperare in una cosa semplice. Invece io non ci riesco quindi o sono idiota (ma la cosa più bella è che mi sono compilato un intero kernel, poi un modulo mi blocca…mah), oppure non ho trovato ben spiegati i passaggi…

    Riguardo a questa: “Se /usr/src/modules non c’è oppure è vuota non avete bisogno di dare anche modules_image.”. Mi mette un sacco di dubbi… Io appena riavviato il sistema con il kernel nuovo, ho provato ad usare il restricted-manager, che però mi ha detto che avrei dovuto installare linux-restricted-manager-[identificativo del mio kernel]. Ora sto delirando perché non capisco come tirarmelo fuori compilato per il k. attuale…

    Che stufia…

    P.S.
    Ho appreso che siamo compatrioti. Cioè, io non abito ad Ivrea, ma a Torino… quindi siamo compatrioti piemontesi. Va beh… era un attimo di condivisione non finalizzata… -_-‘

  33. sevencapitalsins ha detto:

    Ciao Pioneer!

    Purtroppo qui non hai molta possibilità di scelta: il restricted-manager è quel programmino che su ubuntu ti installa i driver proprietari ati o nvidia, e questi sono moduli che vengono forniti con una precisa versione del kernel.

    Siccome tu ricompilando il kernel cambi anche l'”interfaccia” verso quei driver, restricted-manager è del tutto inutile perché non esiste un pacchetto fatto apposta per il tuo kernel ormai specializzato per la tua particolare macchina.

    Quindi devi fare alla vecchia maniera:

    1) scaricare i driver nVidia dal sito ufficiale
    2) salvarli nella cartella home (supponiamo che il file si chiami nvidia-installer.run)
    3) ucciedere X (CTRL+ALT+BACKSPACE)
    4) rientrare con la sola interfaccia testuale (dovrebbe esserci dal menu “sessione” di kdm o gdm)
    5) installare i driver nVidia apposta per il tuo kernel:
    chmod +x nvidia-installer.run
    sudo sh nvidia-installer.run

    Fatto questo controlla che in /etc/X11/xorg.conf sia impostato il driver nvidia nella sezione “device”, se non fisse così scrivilo tu.

    Infine riavvia X (startx) e se il comando glxgears fa comparire le classiche rotelline belle fluide hai i driver nVidia.

    Dimenticati restricted-manager se vuoi un kernel ben fatto :o)

    In alto le bandiere piemunteis!

  34. Pioneer Skies ha detto:

    Oh, ma dunque questo:

    -scarico e installo il pacchetto fglrx-source
    – in /usr/src viene scompattato fglrx.tar.bz2 (i sorgenti)
    – quando si compila il kernel si aggiunge:

    make-kpkg –initrd –append-to-version -versione kernel_image modules_image

    – alla fine della compilazione in /usr/src,oltre al kernel in .deb,ci sara’ anche un pacchetto fglrx compilato per quel kernel..installabile con un click

    Non è corretto? Questa è la fonte…

  35. sevencapitalsins ha detto:

    Mettiamo ordine…

    1) quello che è presente in /usr/src sotto forma di FILE SORGENTE (è il caso di fglrx-source) viene costruito “insieme” al kernel grazie a modules_image e alla fine trovi i pacchetti .deb di tutto. Quindi quanto hai letto sul forum NON è sbagliato. Anzi, è la miglior procedura per installare dei moduli se sono disponibili i file sorgenti.

    2) invece io (e mi par d’aver capito pure tu) ho una nVidia. E ti ho detto di scaricarti i file binari (non ci sono i sorgenti) dal sito della nVidia, vengono sotto forma di un installatore. Non è altro che uno script shell da eseguire con X spento, che installa i driver da solo senza bisogno di passare da pacchetti Debian da costruire. Una roba del tipo nvidia-installer.run.
    Chiaramente devi reinstallarli ogni volta che cambi il kernel. Non sono pacchetti sorgente quindi non puoi costruirli con modules_image.

    3) infine il restricted-manager (o come si chiama) di Ubuntu funziona solo se il kernel è quello standard di Ubuntu, se ricompili e fai un tuo kernel devi necessariamente reinstallare i driver fglrx (punto 1) o nVidia (punto 2).

    Chiaramente è più comodo il metodo 1 che non il metodo 2, visto che al riavvio ti trovi già il driver installato e non la schermata nera… se fosse stata la nVidia sull’orlo del fallimento, probabilmente avrebbe rilasciato i sorgenti. Ma attualmente comanda e fornisce i driver migliori :o)

    Spero di esserti stato utile nonostante il piccolo inizio di flame :o)

  36. Pioneer Skies ha detto:

    Quale flame? Quello contra invidia? Beh, come darti torto? Ora ho chiaro il panorama delle possibilità. Ti ringrazio!
    Resta il fatto che io non riesco a compilare moduli i quali sorgenti sono presenti in /usr/src/ tramite modules_image. Questo per ora resterà un mistero, ma lo svelerò presto o tardi. Magari un po’ più distante dal periodo esami.
    Per i driver ufficiali no problema: l’operazione è basilare. Semplicemente fino ad oggi avevo usato quelli di Ubuntu. ;)
    Tutto funziona alla grande alla fin fine. Non credevo che i cambiamenti sarebbero stati tanto sensibili. La reattività maggiore l’ho notata al volo. O_O Ora mi resta da andare a pacioccare i giusti settaggi per partire senza initrd (sopo aver scoperto cosa ho dimenticato, perché ero convinto di averci fatto attenzione), alleggerire il kernel (è pesantissimo) da decine di cose inutili che ho notato spiando, ma che non ho già tolto perché ho usato oldconfig per fare un primo tentativo cambiando solo le opzioni del processore.
    Dunque tornerò qui a spulciare la tua guida più nel dettaglio delle options. ^_^

    Salutoni!

    P.S.
    Come mai quando accedo al tuo blog FireFox mi si pianta per una decina di secondi – va in zombie – prima di riprendere colorito e fare come se nulla fosse? Capita solo a me?

  37. sevencapitalsins ha detto:

    Davvero hai notato una maggior reattività? madonna, che voglia di compilare….

    Per lo sterminio di moduli inutili: io sul mio laptop ho messo Gentoo e ho un kernel veramente ridotto all’osso (ti dico solo che lo ricompila in menjo di 2 minuti).

    E ho persino postato qui il file di configurazione, se avrai la pazienza di scorrertelo e distinguere quali moduli sono per la tua specifica macchina e quali eliminare :) è un lavoro che volevo già fare io, ma di nuovo porta via molto tempo.

    Gentoo on a Fujitsu-Siemens S2110 Laptop

    Infine no, non sei l’unico: succede anche a me, non è stata affatto una buona idea fare una pagina così lunga su wordpress perché fa tante di quelle cazzate javascript… infatti la prossima versione della guida la metterò su altervista e qui ci metterò solo un sunto e il link alla guida.

    Saluti!

  38. Pioneer Skies ha detto:

    “Attenzione! Dai commenti a questo articolo di DiviLinux sembra che non potrete usare i driver proprietari nVidia se abilitate questa opzione!” [cit. da Paravirtualization Support]

    Per cronaca e feedback: ho installato gli ultimi driver nvidia con questa opzione attivata nel kernel. Non che il solo mio caso dia certezze, ma vorrà pur dire qualcosa. ^_^

  39. sevencapitalsins ha detto:

    Grazie mille! Ma senti, tu non sei mica venuto al linux day 2a parte? dalla foto hai una fisionomia familiare…

  40. kidrock ha detto:

    ciao
    ho seguito la tua guida per compilare il kernel 2.6.23. Nella compilaizone ho incluso i driver nvidia proprietari (per questo ho seguito un’altra guida) installando il pacchetto nvidia-kernel-new–source e poi scompattandolo e creando così il modulo. Alla fine della compilazione ho ottenuto il file nvidia-kernel-[mia conf] oltre a linux-image e linux-headers. Quindi li ho installati ma al riavvio niente da fare parte solo con driver vesa. Cosa posso fare?
    Altre note da dire sono:
    – non ho disinstallato il pacchetto nvidia-glx-new
    – uso ubuntu 7.10
    – ho anche provato in linux-restriceted-modules a disable il modulo nv ma non cambia nulla!

    Ovviamente in fase di compiazione ho deselezionato support framebuffer e attivato paravirtualization

    Dove ho sbagliato e cosa posso farE?
    tra l’altro con i vesa parte gnome e il kernel sembra funzionare!

  41. kidrock ha detto:

    mi rispondo in parte da solo! ho letto male e paravirtualisaton va tolto non messo!

  42. sevencapitalsins ha detto:

    Ciao Kidrock,

    i driver vesa funzionano sempre. Fanno fare tutto il lavoro al processore…

    Quando metti “nvidia” in xorg.conf cosa succede poi quando fai partire X? Che errore dà?

    E soprattutto, hai provato a installare i driver nvidia nella maniera “normale” (leggi circa 6-7 commenti sopra)?

  43. Pioneer Skies ha detto:

    Grazie mille! Ma senti, tu non sei mica venuto al linux day 2a parte? dalla foto hai una fisionomia familiare…

    Di nulla! No, io sono stato al Linux Day, ma solo la mattina ed a quello del GlugTO, dato che ero ospite da loro…

  44. kidrock ha detto:

    @ sevencapitalsins

    ciao
    tempo fa , la prima volta che ho ricompilato il kernel, ho usato con successo i driver nvidia installati alla maniera normale. Questo però comporta una serie di problemi sul funzionamento del vecchio kernel nel caso in cui io voglia tornare indietro. Per cui mi piacerebbe riuscire in questo modo perché vorrei mantenere il kernel vecchio funzionante con tutte le comodità di ubuntu :D almeno finché non ho completamente testato il nuovo. Ovviamente con i driver vesa rischio di diventare cieco xkè almeno sul mio pc funzionano malissimo, sono comodi solo per avere x e vedere due cose.
    Ho anche provato a forzare in xorg il driver nvidia sia usando il nuovo tool che si avvia automaticamente in ubuntu gutsy (quando non riesce a far partire x) sia a mano ma senza successo. Penso sia legato al problema della paravirtualization xkè ho usato la stessa versione dei driver del post di divilinux.
    Cmq adesso sto ricompilando senza e il mio vecchio pc ci impiega diverse ore a compilare.
    Appena finisce faccio una prova e ti faccio sapere!
    In caso non va posso cmq procedere installando i driver nvidia a mano (ovvero rimuovendo quelo creato col kernel e nvidia-glx e facendo quindi tutto a mano?)
    grazie ciao!

  45. kidrock ha detto:

    ricompilazione fatta senza paravirtualization ma niente stesso errore! cosa posso fare?

  46. sevencapitalsins ha detto:

    Ciao Kidrock,

    mi spiace ma non so se ho le conoscenze per aiutarti. Non ho mai provato a compilare il modulo nVidia col kernel, e non so che problemi possa dare…

    In dmesg non dice nulla?

  47. kidrock ha detto:

    non compare niente

  48. sevencapitalsins ha detto:

    Non so aiutarti, mi spiace. Chiedi ad altri che abbiano provato e ci siano riusciti.

  49. Alieno ha detto:

    date un’occhiata, e se qualcuno contribuisce……

    http://guide.debianizzati.org/index.php/Linux_Kernel_in_a_Nutshell

  50. kidrock ha detto:

    prima di provare il .run per i driver nvidia ho provato a vedere se andavano webcam e chiavetta giusto x vedere se il kernel funziona a dovere! eppure non le vede ma in gconfig le voci sono selezionate (quickcam e usb storage) cosa posso aver sbagliato?

  51. sevencapitalsins ha detto:

    Se riesci a usare il computer, il kernel funziona. Per la webcam probabilmente devi selezionare anche il video4linux e per la chiavetta deve essere attivo il servizio hal.

    Di nuovo, il miglior suggerimento che ti posso dare è di guardare la coda di dmesg dopo aver inserito la chiavetta o cercato di catturare l’immagine della webcam, e cercare di capire da lì cosa manca.

  52. ^-Super_Treje-^ ha detto:

    Ancora nulla per le sezioni che ne’ tu ne’ il wiki di slacky hanno redatto ???
    Mi servirebbero spiegazioni approfondite delle voce networking e di queste altre :
    • Kernel hacking

    • Security options

    • Cryptographic options
    per poter configurare correttamente la mia gentoo senza dovermi mettere a fare tutte le permutazioni del caso visto che in molte voci c’e’ un semplice e perentorio “nel dubbio metti Y o N” = angosciante :S

    Cmq complimenti per il resto ;)

  53. sevencapitalsins ha detto:

    Per security-cryptographic options non credo lo farò mai: non sono sezioni che mi interessano, almeno sino a quando non dovrò mettere su un server serio con tutte le opzioni di sicurezza e crittografia dei dati…

    Per kernel hacking: ti serve se sei uno sviluppatore del kernel.

    Invece il networking sarebbe utile, ma non ho proprio idea di come si possa fare a spiegare in poche righe un intero protocollo di comunicazione.

    Comunque sia, per un paio di mesi non potrò lavorare alla guida, ho trovato lavoro ma non ho ancora finito la tesi quindi sarò in alto mare per un po’.

    Ciao!

  54. andrea ha detto:

    ciao mi chiamo andrea!
    ti ringrazio per la tua guida..
    sono newbie di linux e sto cercando di ricompilare il kernel.
    percortesia mi daresti una mano?
    quando lancio il comando “make menuconfig” mi ritorna indietro questo output “make: *** no rule to make target ‘menuconfig’ . stop.”
    di conseguenza non mi parte l’interfaccia di configurazione…
    mi sai dare indicazioni? ti ringrazio molto!
    ciao..

  55. sevencapitalsins ha detto:

    Devi dare il comando nella directory dove sono i sorgenti del kernel: /usr/src/linux

    Prima di dare “make menuconfig” dai “cd /usr/src/linux”

  56. andrea ha detto:

    forse ho fatto un’errore…
    il sorgente del kernel che ho scaricato, l’ho messo in /usr/src e non in usr/src/linux..
    comunque di directory linux in /src me ne trovo due:
    linux-headers-2.6.22-14 linux-headers-2.6.22-14-generic
    in quale delle due devo mettere il sorgente del kernel scaricato?
    grazie per la gentilezza!

  57. sevencapitalsins ha detto:

    Leggiti bene la parte di preparazione….. il sorgente va messo in /usr/src, lì va estratto dall’archivio e poi crei il collegamento simbolico alla cartella estratta….

  58. andrea ha detto:

    grazie mille…. ciao

  59. andrea ha detto:

    ciao..
    volevo includere il supporto per il chipset della mia scheda madre nel kernel, ma non riesco a trovare la relativa voce per impostare i parametri corretti…
    percortesia sai dirmi quale potrbbe essere la voce?
    grazie..

  60. sevencapitalsins ha detto:

    Una scheda madre, anche se potrebbe non sembrare, è fatta di tanti componenti… Quindi devi caricare nel kernel i driver per ogni componente.

    I comandi lspci e lshw possono aiutarti a determinare di quali driver hai bisogno.

  61. monossido ha detto:

    Ciao, ottimo lavoro complimenti!
    Ho un problema di cui non riesce a capirne il motivo.
    Un pò dappertutto si consiglia di non abilitare “Configure standard kernel features” in General (o almeno così ho capito)…il problema è che se lo disabilito non mi funziona più il resume dell’ibernazione (tuxonice).
    Cosa consigli di fare?

  62. monossido ha detto:

    non mi funziona vuol dire che ho scermo nero ma in realtà il sistema sta girando (ctrl-alt-f1 e ctrl-alt-canc riavvia la macchina)
    ho un portatile asus con uns empron scheda video sis

  63. sevencapitalsins ha detto:

    eh… se lo disabiliti non ti funziona tuxonice… quindi il consiglio ovviamente è di abilitarlo in questo caso oppure non usare tuxonice… ;-)

  64. untitledfinale ha detto:

    stavo provando a sistemare apparmor, fa parte dei “modules” di ubuntu (linux-ubuntu-modules…)
    il sorgente di questi lo si può prendere dal launchpad, l’unico problema è riuscire a compilarli, e compilarli in modo che vengano “installati” sul nostro kernel custom.

    ho provato a creare il pacchetto deb per il mio kernel, ma ho ottenuto uno strano errore… ma in ogni caso mi stava ricompilando per il kernel che c’è di default e non il custom.

    comunque la guida è veramente ben fatta! complimenti! ;)

    potresti anche aggiungere una “quick reference” come in questo post che sta su ubuntuforums
    http://ubuntuforums.org/showpost.php?p=1174954

  65. sevencapitalsins ha detto:

    Grazie, in effetti non è una cattiva idea… quindi mi basterà linkare col link che hai messo tu :D

  66. klovis86 ha detto:

    ciao, sono capitato qui per caso googleando, sono un niubbo di kernel e ricompilazioni, però volevo sapere come fare per fare partire ubuntu gutsy sul mio nuovo portatile, facendogli riconoscere acpi apic e lapic… nelle opzioni di avvio della live devo disabilitarli, vorrei sapere come fare per riattivarli…(sul forum di ubuntu . it mi hanno abbandonato :( )

  67. sevencapitalsins ha detto:

    Ciao klovis, per favore linkami il post nel forum di ubuntu così capisco a che punto sei arrivato :)

  68. sevencapitalsins ha detto:

    continuiamo là che è il posto più adatto :)

  69. Pol ha detto:

    A me invece parte ma la risoluzione è 800×600 e non mi trova la scheda video..col kernel 2.6.24.5 ricompilato e alsa-source e nvidia-new-kernel-source versione 169 inclusi ed installati…

  70. sevencapitalsins ha detto:

    Alsa non c’entra nulla, mentre il fatto che X ti parta lo stesso probabilmente è dovuto al “bulletproof X”. Per farti un paragone considera Windows: parte di default a 800×600 qualsiasi sia lo schermo, per non lasciare l’utente senza interfaccia grafica.

    Scarica i driver dal sito nvidia e reinstallali, poi modifica xorg.conf mettendo “nvidia”… non usare i driver di ubuntu/debian.

  71. Pol ha detto:

    ah ok…quindi quando compilo il kernel NON metto ne gli alsa source ne gli nvidia source?

    e per l’audio come fo?

  72. sevencapitalsins ha detto:

    Gli alsa… aummaumma……

    …ma non sono già inclusi dentro il kernel? Non puoi semplicemente compilarli internamente o come moduli?

    Forse mi sono rincoglionito io, ma sulla gentoo ho ricompilato un po’ di tempo fa il 2.6.24 e l’unico risultato di lsmod è fglrx!

    E l’audio funziona :D

  73. Pol ha detto:

    ok per l’audio provo a fare così..e proverò per i video…ora xò ho n’altro problema!

    Come faccio a cambiare INITRAMFS?
    Mi spiego, ora è configurato su /boot/initrd.img-2.6.24.5-pol

    ma NON esiste questa roba!

    io devo metterlo su /boot/initrd.img-2.6.24-16-generic

    COME FACCIO?

  74. Pol ha detto:

    risolto da solo!

  75. […] ufficiale: Fast Mode Guida approfondita: Apprendista Mode Posted by realgpp […]

  76. Adryano ha detto:

    Ciao Seven,
    Complimenti per la guida, ottima per uno come me che
    tenta di compilare il kernel per la prima volta.
    Ho seguito alla lettera tutti i passaggi, almeno credo, ma quando dò il comando per la compilazione mi daà il seguente errore:
    adryano@Praga:/usr/src/linux$ fakeroot make-kpkg –revision ~0.01 –append-to-version -test –initrd kernel_image kernel_headers modules_image
    exec make -f /usr/share/kernel-package/ruleset/minimal.mk debian DEBIAN_REVISION=~0.01 APPEND_TO_VERSION=-test INITRD=YES
    /usr/share/kernel-package/ruleset/misc/version_vars.mk:161: *** Error. The version number 2.6.24-rt1-testTest VERSION=[2], PATCHLEVEL=[6], SUBLEVEL=[24], EXTRAVERSION=[-rt1], iatv=[-test], LOCALVERSION=[Test], GIT_VERSION=[] UTS_RELEASE_VERSION=[], KERNELRELEASE=[ ]. is not all lowercase. Since the version ends up in the package name of the kernel image package, this is a Debian policy violation, and the packaging system shall refuse to package the image. . Stop.
    Failed to create a ./debian directory: Nessun file o directory at /usr/bin/make-kpkg line 1096.
    Qualche idea?
    Ti ringrazio molto per il tuo lavoro.

  77. sevencapitalsins ha detto:

    tu hai fatto 2 cose:

    1) durante la compilazione del kernel hai messo dentro General Setup->Local Version la stringa “Test” con la T maiuscola

    2) alla fine hai usato –append-to-version “test”

    Il risultato (come puoi vedere dall’output) è 2.6.24-rt1-testTest

    e il compilatore Debian si lamenta che la versione non è tutta in caratteri minuscoli.

    Riapri la configurazione e togli la T maiuscola da Local Version… tutto minuscolo!

    Ciao!

  78. […] ufficiale: Fast Mode Guida approfondita: Apprendista Mode Posted by realgpp […]

  79. Adryano ha detto:

    Ciao Seven,
    grazie per la risposta fulminea, il problema era proprio quello.
    Ho tentato di cancellare” Test” ma ogni volta che cambiavo riga mi ricompariva. Ho scoperto che con il tasto dx cambiando il metodo di input sono riuscito a cancelarla.
    Ora la compilazione è cominciata, spero di riuscire a portarla a termine. Ho perso 3 ore con xconfig, spero di avere tolto tutti i moduli inutili, anchè perchè la mia configurazione hardware la conosco a memoria nei particolari.
    Ti sono molto grato x l’aiuto.
    Buon weekend!!!!!!!!!

  80. spillo ha detto:

    Per la preparazione della mia gentoo sul nuovo pc sto seguendo un sacco di guide, ovviamente questa mi è stata di grande aiuto nella configurazione del kernel…

    mi piacerebbe che scrivessi qualche nuovo post riguardante gentoo e i kernel :)

    davvero molto bella la guida nonchè ben scritta e strutturata ;)

  81. sevencapitalsins ha detto:

    Ciao Spillo, purtroppo Gentoo l’ho già abbandonata :D sto provando una dietro l’altra praticamente tutte le distribuzioni, oscillando sempre tra una difficile e una facile alla ricerca dell’equilibrio…

    Attualmente ho Linux Mint sul desktop e Arch Linux sul laptop, e sono un po’ con le fratte con la Tesi Eterna. Finita quella farò senz’altro un kernel ad hoc per il mio desktop, ma non credo di mettere su di nuovo Gentoo.

    Gentoo è la più veloce che ho provato ma è mantenuta veramente male, ha una carenza cronica di sviluppatori e per fare la stessa fatica tanto varrebbe installare Slackware.

    Non ho ancora deciso la prossima distro comunque… ma credo che lo deciderò al linux Day :)

  82. spillo ha detto:

    sul lato sviluppatori hai super ragione, siamo rimasti indietro sotto molti aspetti… portage è molto complesso da aggiornare e i pochi che lo fanno, purtroppo, ci mettono molto…

    ad ogni modo linux è linux, usiamo tutti piu o meno lo stesso kernel, questa guida può valere per gentoo come per xandros ^^

    comunque aspetto un tuo post in cui ci comunichi a cosa deciderai di passare al linux day (che quest’anno non potrò sicuramente seguire)…. :)

  83. Neptune ha detto:

    Salve,
    a distanza di un pò di tempo mi sono accorto che il lettore cdrom non va, ed effettivamente il modulo “include ide/atapi cdrom support”. Mi chiedevo se c’è una maniera per ricompilare solo quel modulo o se l’unica e ricompilare di nuovo tutto il kernel.
    In aggiunta mi domandavo se per far funzionare il mio NEC DVD_RW ND-3520A, ATAPI CD/DVD-ROM bastasse attivare solo il modulo scritto sopra o se ne servono “altri specifici”.

    Intanto ne sto approfittando per ricompilare tutto e vedere l’ultima versione del kernel, la 2.6.29, però se mi dovessi dimenticare qualcosa sarebbe comodo poter ricompilare “solo i moduli mancanti”.

    Vorrei anche fare una domanda riguardo al nuovo kernel 2.6.29, leggevo del supporto dei modesetting per xorg, ma ho trovato solo qualcosa “di frastagliato”, sapreste indicarmi qualcosa di un pò più tecnico?

  84. sevencapitalsins ha detto:

    Secondo me la possibilità di compilare solo un modulo da caricare poi dinamicamente esiste (penso ad es al modulo nvidia dei driver video), quindi farei ricerche in tal senso.

    Per il modesetting di xorg… come purtroppo vedi non sono riuscito a mantenere le promesse iniziali :( e adesso che lavoro mi rimane poco tempo la sera da dedicare alle smanettate.

  85. ingalex ha detto:

    non c’è la possibilità di effettuare la compilazione in un’altra partizione ? perchè nella partizione dove ho installato ubuntu non ho molto spazio libero e ho notato che in fase di compilazione supera anche i 3Gb. Posso farlo nella partizione di windows?

  86. Roberto ha detto:

    Salve, durante la compilazione mi è apparto un errore stamp-arch-conf error 1 qualcuno sa come posso risolverlo?

  87. ARM_ ha detto:

    ciao

    Ottima guida, ma c’è un’errore

    <>

    in realtà il comando giusto è make-kpkg clean, come giustamente scrivi poco prima di <>

    per il resto, grazie mille.

  88. ARM_ ha detto:

    ARM_ :
    ciao
    Ottima guida, ma c’è un’errore
    “Nota: non dimenticate di dare make kpkg-clean prima di compilare nuovamente!”
    in realtà il comando giusto è make-kpkg clean, come giustamente scrivi poco prima di “Mezzogiorno di fuoco”
    per il resto, grazie mille.

  89. Shishimaru ha detto:

    è vero,occhio a tutti!
    a proposito,come si può andare a scoprire quali sono i driver che mi servono? è difficilissimo scoprirli!

  90. sevencapitalsins ha detto:

    @ ARM_: grazie. Purtroppo se edito mi manda a ramengo tutti i codici…

    @Shishimaru: lspci, lsusb. lshw, lsmod… e tanto Google!

  91. Shishimaru ha detto:

    perfetto,grazie mille! ho provato in un paio di forum ma… non mi hanno cag***! :D
    vedo che con k. ha rilasciato un’altra patch per il 2.6.32 se non sbaglio… proverò anche con quella!

  92. sevencapitalsins ha detto:

    Sì, è comunque meno complesso dello scheduler “ufficiale”

  93. ARM_ ha detto:

    Questa resta sempre la mia bibbia quando ricompilo.

  94. sevencapitalsins ha detto:

    :) Mi piacerebbe veramente poterla aggiornare. Con tutte le novità che sono uscite nel frattempo http://kernelnewbies.org/Linux_2_6_35 è criminale non testarle!

Scrivi una risposta a sevencapitalsins Cancella risposta