Guida pratica alla compilazione del Kernel
2 partecipanti
Zermo :: Informatica :: Software :: Linux
Pagina 1 di 1
Guida pratica alla compilazione del Kernel
Escludendo distribuzioni come Gentoo o LFS, oggi è raro dover
necessariamente compilare un kernel per poter avviare la propria
distribuzione, e di fatto Ubuntu, Fedora ma anche Slackware, Arch Linux e
molte altre a tutti i livelli, forniscono uno o più kernel di default .
Allora, perchè voler un kernel “su misura”?
Le motivazioni sono tante e varie, quella che chi scrive piazza al primo
posto è la compattezza (e quindi indirettamente, la velocità e
l'avidità di memoria), ma le possiblità sono tante e variegate, potreste
volere un supporto ad un filesystem esotico, fregandovene del classico
EXTx piuttosto che il supporto nel kernel a qualche periferica inusuale
(vedremo più avanti) o ancora, un kernel minimale per una macchina
obsoleta e con poca memoria .
Le possiblità sono veramente infinite, tutto per avere la massima versatilità possibile.
Probabilmente vi è stato detto che “ricompilare il kernel è cosa
difficile e macchinosa“, in realtà non è esattamente così; richiede
attenzione, una buona conoscenza della macchina ed un po' di pazienza.
Un invito che posso darvi è quello di compilare una versione diversa e/o
con un nome diverso il vostro kernel, così da avere la “via di fuga” di
quello di default in caso di pasticci.
Ora che siete a conoscenza di queste poche cose possiamo iniziare a
lavorare, un buon inizio è capire come è fatto un kernel: create una
directory di compilazione (ad esempio /home/nomeutente/src) e
procuratevi i sorgenti del kernel (al momento in cui scriviamo 3.2) e
della patch (al momento x.13, che “insieme” al kernel darà vita a
“linux-3.2.13”), ed andranno spacchettati in nella directory precedente;
ora siete davanti ad un gruppo di tanti ed “inutili” file sorgenti.
“Inutili“ perché così come sono la loro compilazione avrebbe effetti
deleteri, bisogna prima di tutto “istruire” il compilatore su cosa e
come lo deve fare, e per farlo c'è bisogno di un file /.config.
NOTA: Questo file è reperibile ad esempio su Ubuntu nel percorso /boot ed è chiamato config-2.6*.
NOTA 2: Ogni distribuzione ha un approccio più o meno gestibile
alla compilazione del kernel, su Arch Linux la vita è facilitata da ABS,
ma su Ubuntu l'operazione è più complicata, quindi da qui in avanti il
metodo che indicherò sarà quello “all'antica”.
Spostiamoci nella directory dei sorgenti ed applichiamo la patch col comando
bzcat [NOME_DELLA_PATCH].bz2 | patch -p1
Questa operazione ha una durata variabile, a seconda del vostro
hardware, ma lascietelo fare e vedrete che prima o poi il prompt di
comando riapparirà!
Ed ora possiamo veramente addentrarci nella configurazione del kernel,
la via senza ombra di dubbio preferibile è “menuconfig”, una sorta di
interfaccia grafica minimale che ci aiuterà nella scelta di cosa e come
fare. Quindi, lanciamo il comando:
make menuconfig
Spostatevi con le freccette verso “Load an Alternate Configuration File”
e selezionate quello precetendemente importato, così partirete dalla
configurazione del vostro kernel di default.
Vi invito a studiarvelo bene, c'è molto da imparare e gia qui, anche l'utente medio può scremare qualcosa,
La mia è una macchina AMD, con processore Phenom, scheda video AMD/ATI:
viene da sé (e non richiede conoscenze specifiche) che è
possibile eliminare la voce "Intel MCE features" o, se avessi un single
core senza hypertreading, potrei spuntare anche il “symmetric
multi-processing support”.
Un cenno importante è l'uso o meno del ramdisk, l'initramfs e l'uso dei moduli/integrazioni.
Di norma il kernel dovrebbe contenere quanto necessario per avviare il
sistema, dovrebbero quindi essere integrati il supporto al filesystem
scelto, il supporto alla scheda video ecc. UDEV poi si occuperà di
caricare dinamicamente i moduli necessari al resto del sistema (ad
esempio, è vitale che il sistema sappia leggere la partizione EXTx dove
risiede, quindi ha priorità assoluta ed il supporto a quel filesystem
deve essere integrato, mentre non è necessario che sappia leggere fin da
subito una chiavetta USB in FAT; quindi il supporto al “dosfs” può
essere compilato come modulo).
Questo approccio è quello "classico", anche se in realtà ad oggi va per la maggiore l'uso di“initramfs”.
Questo approccio permette più flessiblità e leggerezza; in pratica
utilizzandolo si può fare un uso intensivo dei moduli, lasciando il
kernel snello e leggero (un esempio può essere questo: il kernel di Arch
Linux, che utilizza l'initramfs, il supporto a gran parte del parco
hardware è sotto forma di modulo), ma il rischio è di farsi prendere
troppo la mano, generando moduli per tutto; anche per periferiche che
non avremo mai (opppure qualcuno vuol farmi credere che sta scrivendo da
un PC con interfaccia dischi "pre ide"?)
Questo ci porta a dover capire "come non abusare dei moduli".
In primis, dobbiamo identificare tutto l'hardware, infine capire i moduli caricati con il kernel di default durante il boot.
Itendificare l'hardware è semplice, i comandi "lshw" (mostra tutto
l'hardware) "lspci" (dispositivi con interfaccia PCI) "lsusb"
(dispositivi con interfaccia USB) "lscpu" (dettagli approfonditi del
processore), ci vengono agevolmente incontro: il loro output ci aiuterà a
capire ciò di cui non abbiamo bisogno; né come modulo, né build-in.
Un ulteriore aiuto ci viene offerto da "lsmod", il comando mostrerà un
listato dei moduli caricati da UDEV durante il boot, che certamente sono
quelli essenziali per il funzionamento della vostra macchina e che
quindi dovrete compilare come modulo.
IMPORTANTE: STAMPANTI USB, WEBCAM E DISPOSITIVI VARI DEVONO ESSERE COLLEGATI ED OPERATIVI QUANDO LANCERETE "LSMOD"!
Quindi in sintesi, i vari comandi "lsxxx" ci aiuteranno ad identificare
l'hardware, "lsmod" a capire chi e cosa usa un detemrinato modulo. Se
dai listati dai comandi "lsxxx" rapportati a "lsmod", ci dovesse essere
qualche periferica non elencata, non potete sbagliare; sarà necessario
inserire il suo supporto come buid-in.
Una volta compreso quanto detto e configurato il compilatore, potrete
finalmente salvare il vostro .config e uscire dal menu; il kernel che ne
uscirà sarà esattamente ciò di cui avete bisogno per la vostra macchina
e le vostre esigenze.
In conclusione, la compilazione del kernel non è un'operazione che porta
con sé una difficoltà intinseca insormontabile, ma richiede solo un po'
di pazienza ed un'ottima conoscenza della macchina. Non vi resta che
provare e gustarvi i risultati!
Crediti :lffl
necessariamente compilare un kernel per poter avviare la propria
distribuzione, e di fatto Ubuntu, Fedora ma anche Slackware, Arch Linux e
molte altre a tutti i livelli, forniscono uno o più kernel di default .
Allora, perchè voler un kernel “su misura”?
Le motivazioni sono tante e varie, quella che chi scrive piazza al primo
posto è la compattezza (e quindi indirettamente, la velocità e
l'avidità di memoria), ma le possiblità sono tante e variegate, potreste
volere un supporto ad un filesystem esotico, fregandovene del classico
EXTx piuttosto che il supporto nel kernel a qualche periferica inusuale
(vedremo più avanti) o ancora, un kernel minimale per una macchina
obsoleta e con poca memoria .
Le possiblità sono veramente infinite, tutto per avere la massima versatilità possibile.
Probabilmente vi è stato detto che “ricompilare il kernel è cosa
difficile e macchinosa“, in realtà non è esattamente così; richiede
attenzione, una buona conoscenza della macchina ed un po' di pazienza.
Un invito che posso darvi è quello di compilare una versione diversa e/o
con un nome diverso il vostro kernel, così da avere la “via di fuga” di
quello di default in caso di pasticci.
Ora che siete a conoscenza di queste poche cose possiamo iniziare a
lavorare, un buon inizio è capire come è fatto un kernel: create una
directory di compilazione (ad esempio /home/nomeutente/src) e
procuratevi i sorgenti del kernel (al momento in cui scriviamo 3.2) e
della patch (al momento x.13, che “insieme” al kernel darà vita a
“linux-3.2.13”), ed andranno spacchettati in nella directory precedente;
ora siete davanti ad un gruppo di tanti ed “inutili” file sorgenti.
“Inutili“ perché così come sono la loro compilazione avrebbe effetti
deleteri, bisogna prima di tutto “istruire” il compilatore su cosa e
come lo deve fare, e per farlo c'è bisogno di un file /.config.
NOTA: Questo file è reperibile ad esempio su Ubuntu nel percorso /boot ed è chiamato config-2.6*.
NOTA 2: Ogni distribuzione ha un approccio più o meno gestibile
alla compilazione del kernel, su Arch Linux la vita è facilitata da ABS,
ma su Ubuntu l'operazione è più complicata, quindi da qui in avanti il
metodo che indicherò sarà quello “all'antica”.
Spostiamoci nella directory dei sorgenti ed applichiamo la patch col comando
bzcat [NOME_DELLA_PATCH].bz2 | patch -p1
Questa operazione ha una durata variabile, a seconda del vostro
hardware, ma lascietelo fare e vedrete che prima o poi il prompt di
comando riapparirà!
Ed ora possiamo veramente addentrarci nella configurazione del kernel,
la via senza ombra di dubbio preferibile è “menuconfig”, una sorta di
interfaccia grafica minimale che ci aiuterà nella scelta di cosa e come
fare. Quindi, lanciamo il comando:
make menuconfig
Spostatevi con le freccette verso “Load an Alternate Configuration File”
e selezionate quello precetendemente importato, così partirete dalla
configurazione del vostro kernel di default.
Vi invito a studiarvelo bene, c'è molto da imparare e gia qui, anche l'utente medio può scremare qualcosa,
La mia è una macchina AMD, con processore Phenom, scheda video AMD/ATI:
viene da sé (e non richiede conoscenze specifiche) che è
possibile eliminare la voce "Intel MCE features" o, se avessi un single
core senza hypertreading, potrei spuntare anche il “symmetric
multi-processing support”.
Un cenno importante è l'uso o meno del ramdisk, l'initramfs e l'uso dei moduli/integrazioni.
Di norma il kernel dovrebbe contenere quanto necessario per avviare il
sistema, dovrebbero quindi essere integrati il supporto al filesystem
scelto, il supporto alla scheda video ecc. UDEV poi si occuperà di
caricare dinamicamente i moduli necessari al resto del sistema (ad
esempio, è vitale che il sistema sappia leggere la partizione EXTx dove
risiede, quindi ha priorità assoluta ed il supporto a quel filesystem
deve essere integrato, mentre non è necessario che sappia leggere fin da
subito una chiavetta USB in FAT; quindi il supporto al “dosfs” può
essere compilato come modulo).
Questo approccio è quello "classico", anche se in realtà ad oggi va per la maggiore l'uso di“initramfs”.
Questo approccio permette più flessiblità e leggerezza; in pratica
utilizzandolo si può fare un uso intensivo dei moduli, lasciando il
kernel snello e leggero (un esempio può essere questo: il kernel di Arch
Linux, che utilizza l'initramfs, il supporto a gran parte del parco
hardware è sotto forma di modulo), ma il rischio è di farsi prendere
troppo la mano, generando moduli per tutto; anche per periferiche che
non avremo mai (opppure qualcuno vuol farmi credere che sta scrivendo da
un PC con interfaccia dischi "pre ide"?)
Questo ci porta a dover capire "come non abusare dei moduli".
In primis, dobbiamo identificare tutto l'hardware, infine capire i moduli caricati con il kernel di default durante il boot.
Itendificare l'hardware è semplice, i comandi "lshw" (mostra tutto
l'hardware) "lspci" (dispositivi con interfaccia PCI) "lsusb"
(dispositivi con interfaccia USB) "lscpu" (dettagli approfonditi del
processore), ci vengono agevolmente incontro: il loro output ci aiuterà a
capire ciò di cui non abbiamo bisogno; né come modulo, né build-in.
Un ulteriore aiuto ci viene offerto da "lsmod", il comando mostrerà un
listato dei moduli caricati da UDEV durante il boot, che certamente sono
quelli essenziali per il funzionamento della vostra macchina e che
quindi dovrete compilare come modulo.
IMPORTANTE: STAMPANTI USB, WEBCAM E DISPOSITIVI VARI DEVONO ESSERE COLLEGATI ED OPERATIVI QUANDO LANCERETE "LSMOD"!
Quindi in sintesi, i vari comandi "lsxxx" ci aiuteranno ad identificare
l'hardware, "lsmod" a capire chi e cosa usa un detemrinato modulo. Se
dai listati dai comandi "lsxxx" rapportati a "lsmod", ci dovesse essere
qualche periferica non elencata, non potete sbagliare; sarà necessario
inserire il suo supporto come buid-in.
Una volta compreso quanto detto e configurato il compilatore, potrete
finalmente salvare il vostro .config e uscire dal menu; il kernel che ne
uscirà sarà esattamente ciò di cui avete bisogno per la vostra macchina
e le vostre esigenze.
In conclusione, la compilazione del kernel non è un'operazione che porta
con sé una difficoltà intinseca insormontabile, ma richiede solo un po'
di pazienza ed un'ottima conoscenza della macchina. Non vi resta che
provare e gustarvi i risultati!
Crediti :lffl
giugiu69- Membro d'onore
- Messaggi : 817
Località : Porto Torres
Re: Guida pratica alla compilazione del Kernel
Bravo!!Sposto in Linux
Derp- Responsabile
- Messaggi : 7444
Località : Reggio Emilia (RE)
Argomenti simili
» compilazione modulo registrazione
» Ottimizzare i parametri di rete nel kernel Linux
» [Video-Guida] Velocizzare velocità scaricamento uTorrent (aggiornata guida)
» T.T lo impicco alla fine xD
» alla ricerca del link..
» Ottimizzare i parametri di rete nel kernel Linux
» [Video-Guida] Velocizzare velocità scaricamento uTorrent (aggiornata guida)
» T.T lo impicco alla fine xD
» alla ricerca del link..
Zermo :: Informatica :: Software :: Linux
Pagina 1 di 1
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.
|
|
Dom Mag 03, 2020 11:59 am Da eligabri44
» Siti per scaricare e vedere in streaming film ??
Ven Set 06, 2019 6:43 pm Da Aldo3
» film sui diritti civili
Ven Set 06, 2019 6:39 pm Da Aldo3
» Ciao a tutti
Mar Mag 01, 2018 10:52 am Da tonk
» Mi presento
Sab Ott 07, 2017 4:23 pm Da gcmmrt
» ciao a tutti
Dom Mar 26, 2017 2:15 pm Da Savio
» erwewweeerwreeweww
Dom Feb 26, 2017 4:06 pm Da inter1130
» Ciao a tutti dopo tanto tempo
Sab Feb 25, 2017 1:49 pm Da giulio99
» Ciao ragazzi
Mar Feb 21, 2017 1:56 pm Da xazazelx