|
|
Riga 1: |
Riga 1: |
| ''Torna all'indice: [[Linux Kernel in a Nutshell]]'' | | ''Torna all'indice: [[Linux Kernel in a Nutshell]]'' |
|
| |
|
| Questo capitolo descrive i programmi necessari per configurare un kernel, compilarlo e fare il boot con successo. È utile consultare il file ''Documentation/Changes'' per verificare esattamente quale sia la versione richiesta di ogni programma descritto. Qui vengono riportate le versioni dei programmi che funzionano con il kernel 2.6.18, su cui si basa la trattazione. Chi sta usando un kernel diverso verifichi di avere installate le versioni richieste, come riportato nel file sopra specificato, altrimenti qualcosa potrebbe non funzionare correttamente e potrebbe essere estremamente difficile capire cosa � andato nel modo sbagliato.
| | Quando si compila un kernel personalizzato ci si vorrebbe servire dell'ultima versione stabile. Molte distribuzioni forniscono i loro pacchetti dei sorgenti del kernel, ma raramente questi sono i pi� recenti e aggiornati. I pacchetti ufficiali delle distribuzioni hanno il vantaggio di essere compatibili con il compilatore e gli altri strumenti forniti dalla distribuzione stessa (Il capitolo 2 mette in evidenza l'importanza di questa compatibilit�), ma non � detto che permettano di avere le funzionalit� o le prestazioni di cui si ha bisogno. Preparando l'ambiente con il kernel pi� recente e le ultime versioni del compilatore e degli altri programmi sar� possibile ottenere esattamente ci� che si vuole. Questo capitolo spiega quali sorgenti del kernel scaricare e dove trovarli. |
|
| |
|
| | =='''Quale ramo usare'''== |
| | [[Immagine:kernel_releases.png|300px|thumb|Figura 3-1: Ciclo di sviluppo e rilascio del kernel]] |
|
| |
|
| =='''Strumenti per compilare il kernel'''==
| | In passato il kernel Linux era diviso in 2 rami: quello di "sviluppo" e quello "stabile". Per distinguerli, il ramo di sviluppo era contrassegnato da un valore dispari nel secondo numero di release, quello stabile da un valore pari. Ad esempio, la 2.5.25 era una versione di sviluppo, mentre la 2.4.25 era la stabile. |
|
| |
|
| La maggior parte delle distribuzioni prevede la possibilit� di installare una raccolta di pacchetti per lavorare con il kernel. Qualora la distribuzione offra questa possibilit� � consigliabile sfruttarla, piuttosto che tentare di rintracciare ogni singola applicazione necessaria allo scopo.
| | Quando fu creata la serie 2.6, gli sviluppatori decisero di abbandonare questo metodo basato su due rami separati e annunciarono che tutti i rilasci della serie 2.6 del kernel sarebbero stati considerati "stabili", indipendentemente da quanto veloce fosse stato il processo di sviluppo. I pochi mesi a disposizione tra le versioni maggiori della serie 2.6 avrebbero lasciato agli sviluppatori il tempo necessario per aggiungere nuove funzioni e renderle stabili per il rilascio successivo. Assieme a questo fu creato un ramo "-stabile" del kernel per permettere eventuali correzioni dei bug e aggiornamenti di sicurezza per l'ultima versione, prima che quella nuova venga rilasciata. |
| | Alcuni esempi, illustrati in [[:Immagine:kernel_releases.png|figura 3-1]], aiuteranno a chiarire tutto questo: il team del kernel rilascia la versione stabile 2.6.17; poi gli sviluppatori iniziano a lavorare su nuove caratteristiche e rilasciano la versione -rc del kernel in via di sviluppo, in modo che chi vuole possa aiutare nella fase di test e di debug dei cambiamenti. Quando tutti concordano sul fatto che la versione in via di sviluppo sia abbastanza stabile, questa viene rilasciata come 2.6.18. L'intero ciclo impiega solitamente due o tre mesi, dipendendo da svariati fattori. |
|
| |
|
| Per compilare un kernel servono solo tre pacchetti: un compilatore, un linker e un'utility ''make''. Questa sezione descrive il contenuto di ognuno di questi pacchetti.
| | Durante lo sviluppo di nuove funzioni vengono rilasciate la 2.6.17.2, la 2.6.17.3 e altre release stabili del kernel, contenenti correzioni di bug e aggiornamenti di sicurezza. |
| | È consigliabile che chi intenda usare l'ultima versione del kernel per lavoro si serva di quella stabile. Chi invece intende aiutare gli sviluppatori, pu� testare le caratteristiche della generazione successiva del kernel e darne una valutazione. Per quanto concerne gli scopi di questo capitolo, si suppone che venga utilizzata la versione stabile. |
|
| |
|
| ==='''Compilatore'''===
| | =='''Dove trovare i sorgenti del kernel'''== |
| | Tutti i sorgenti del kernel Linux si possono trovare in ognuno dei siti kernel.org, una rete di mirror che permette a chiunque di trovare il server locale pi� vicino. Questo fa s� che i server principali possano rispondere pi� prontamente ai mirror e che gli utenti riescano a scaricare i file il pi� velocemente possibile. |
|
| |
|
| Il kernel Linux � scritto in linguaggio C, con alcune piccole sezioni scritte in assembly. Per compilare un kernel � necessario utilizzare il compilatore per C gcc. La maggior parte delle distribuzioni comprendono un pacchetto di nome ''gcc'' che dovrebbe essere installato. Se volete scaricare il compilatore e compilarlo da soli, potete trovarlo all'indirizzo http://gcc.gnu.org .
| | La pagina principale di http://www.kernel.org riporta tutte le versioni correnti del kernel per ogni differente ramo, come mostrato in [[:Immagine:kernel.org.png|figura 3-2]]. |
|
| |
|
| Per quanto concerne la release 2.6.18 del kernel, la versione 3.2 di ''gcc'' � la pi� vecchia tra quelle che possono compilare correttamente un kernel funzionante. Occorre fare attenzione che utilizzare l'ultima versione di ''gcc'' non � sempre una buona idea. Alcune delle versioni pi� recenti non compilano correttamente il kernel, quindi, a meno che non si voglia aiutare nel lavoro di debug del compilatore, ne � sconsigliato l'utilizzo.
| | [[Immagine:kernel.org.png|center|500px|thumb|Figura 3-2: Il sito ufficiale Kernel.org.]] |
|
| |
|
| Per scoprire quale versione di ''gcc'' avete installata usate il seguente comando: | | Per scaricare l'ultima versione stabile del kernel � sufficiente fare clic sulla lettera F nella riga corrispondente: cos� facendo si scaricher� l'intero albero dei sorgenti. Altrimenti � possibile accedere alla sottocartella relativa ad ogni versione della serie 2.6 tramite la pagina http://www.kernel.org/pub/linux/kernel/v2.6/, mostrata in [[:Immagine:Kernel.org.v2.6.png|figura 3-3]]. |
|
| |
|
| <pre>$ gcc --version</pre>
| | [[Immagine:Kernel.org.v2.6.png|center|500px|thumb|Figura 3-3: Directory dei sorgenti per il kernel 2.6]] |
|
| |
|
| ==='''Linker'''===
| | È anche possibile scaricare i sorgenti del kernel tramite riga di comando, usando il programma <tt>wget</tt> o <tt>curl</tt>, normalmente presenti in ogni distribuzione Linux. |
|
| |
|
| Il compilatore C, ''gcc'', non compie il lavoro di compilazione interamente da solo, ma ha bisogno di alcuni strumenti, chiamati ''binutils'', per effettuare il collegamento (linking) e l'assemblaggio dei file sorgente. Il pacchetto ''binutils'' contiene anche altre utili applicazioni che permettono di intervenire sui file oggetto (''object files'', prodotti dal compilatore ma non ancora collegati, dal linker, alle librerie e/o ad altri file oggetto necessari per l'esecuzione, N.d.T.) in molti modi, ad esempio per vedere il contenuto di una libreria.
| | Per scaricare la versione 2.6.17.8 del kernel con <tt>wget</tt> il comando �: |
|
| |
|
| ''binutils'' si trova di solito all'interno di un pacchetto di nome... ''binutils'' in ogni distribuzione. Se volete scaricarlo e installarlo da soli, potete trovarlo all'indirizzo http://www.gnu.org/software/binutils .
| | <pre>$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.8.tar.gz |
|
| |
|
| La versione pi vecchia di ''binutils'' che pu essere utilizzata per collegare il kernel 2.6.18 la 2.12. Per scoprire quale versione di ''binutils'' avete installata nel vostro sistema eseguite il comando seguente:
| |
|
| |
|
| <pre>$ ld -v</pre>
| | -> 'linux-2.6.17.8.tar.gz |
|
| |
|
| ==='''Make'''===
| | Resolving www.kernel.org... 204.152.191.5, 204.152.191.37 |
|
| |
|
| ''make'' � uno strumento che cerca nei sorgenti del kernel quali file devono essere compilati e successivamente chiama il compilatore e gli altri strumenti necessari per costruire il kernel. Il kernel necessita della versione GNU di ''make'', che solitamente si trova in ogni distribuzione in un pacchetto chiamato ''make''.
| | Connecting to www.kernel.org|204.152.191.5|:80... connected. |
|
| |
|
| Se volete scaricare e installare ''make'' da soli potete trovarlo all'indirizzo:
| | HTTP request sent, awaiting response... 200 OK |
| http://www.gnu.org/software/make .
| |
|
| |
|
| La release pi� vecchia di make che pu� essere utilizzata con un kernel 2.6.18 � la 3.79. Vi consiglio di installare la versione stabile pi� recente, perch� le versioni pi� recenti lavorano pi� velocemente nel processare i file di compilazione.
| | Lenght: 51,707,742 (49M) [application/x-gzip] |
| Per verificare quale versione di make avete installata usate il comando:
| |
|
| |
|
| <pre>$ make --version</pre>
| | 100%[-------------------------------------->] 51,707,742 35.25k/s |
|
| |
|
| =='''Strumenti per utilizzare il kernel'''==
| | ETA 00:00 |
|
| |
|
| Anche se solitamente la versione del kernel che sta funzionando in un sistema non influisce su alcuna applicazione a livello utente, ci sono alcuni programmi per cui invece � importante. Questa sezione descrive alcuni strumenti che probabilmente sono gi� installati nel vostro sistema Linux: se aggiornate il kernel ad una versione diversa da quella inclusa nella vostra distribuzione, potrebbe essere necessario aggiornare anche alcuni di questi pacchetti, per permettere al sistema di funzionare correttamente.
| | 18:02:48 (47.12 kB/s) - 'linux-2.6.17.8.tar.gz' saved [51707742/51707742]</pre> |
|
| |
|
| ==='''util-linux'''===
| | Per scaricarla con <tt>curl</tt>: |
|
| |
|
| Il pacchetto ''util-linux'' � una raccolta di piccole utilit� che assolvono ad un'ampia gamma di compiti; la maggior parte di queste utilit� si occupa del montaggio e della creazione di partizioni su disco e della gestione dell'orologio di sistema.
| | <pre>$ curl http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.8.tar.gz \ -o linux-2.6.17.8.tar.gz</pre> |
|
| |
|
| Se volete scaricare ed installare questo pacchetto da soli lo trovate al seguente indirizzo: http://www.kernel.org/pub/linux/utils/util-linux .
| | Il modo pi� semplice e veloce per scoprire quale sia l'ultima versione del kernel � usare le informazioni disponibili alla pagina http://www.kernel.org/kdist/finger_banner, come mostrato in [[:Immagine:Kernel.org.v2.6.png|figura 3-4]]. |
|
| |
|
| La versione pi� vecchia di ''util-linux'' compatibile con il kernel 2.6.18 � la 2.10. È consigliabile installare la pi� recente versione disponibile di questo pacchetto, perch� le ultime versioni supportano le nuove caratteristiche implementate nel kernel. I ''bind mounts'' sono un esempio di un'opzione inclusa nei kernel pi� nuovi, che necessita della versione pi� recente di ''util-linux'' per poter funzionare correttamente.
| | [[Immagine:Kernel.org_finger_banner.png|center|500px|thumb|Figura 3-4: Ultima versione del kernel.]] |
|
| |
|
| Per scoprire quale versione di ''util-linux'' avete installata nel vostro sistema usate il seguente comando:
| | =='''Cosa fare con i sorgenti'''== |
|
| |
|
| <pre>$ fdformat --version</pre>
| | Una volta scaricati i sorgenti del kernel appropriati, dove � previsto che vengano messi? È consigliabile creare una directory locale nella propria home chiamata linux per conservare tutti i file dei sorgenti del kernel: |
|
| |
|
| ==='''module-init-tools'''===
| | <pre>$ mkdir ~/linux</pre> |
|
| |
|
| Il pacchetto ''module-init-tools'' � necessario per poter utilizzare i moduli del kernel. Un ''modulo del kernel'' � un pezzetto di codice caricabile che pu� essere aggiunto o rimosso dal kernel anche mentre questo sta girando. È comodo compilare i driver dei dispositivi come moduli per poter caricare solo quelli relativi allo hardware presente nel sistema. Tutte le distribuzioni di Linux usano i moduli per poter caricare solo i driver necessari al sistema in base allo hardware presente, invece di essere costretti a costruire tutti i possibili driver e opzioni del kernel in un unico blocco. L'uso dei moduli permette di risparmiare memoria, caricando solo il codice necessario per controllare correttamente la macchina.
| | Spostate il codice sorgente nella directory linux: |
|
| |
|
| Il processo di caricamento dei moduli ha subito una revisione radicale nella versione 2.6 del kernel. Il linker per i moduli (il codice che si occupa di risolvere tutti i simboli e capire come associare i pezzi di codice in memoria) adesso � compilato all'interno del kernel, e questo permette di avere degli strumenti a livello userspace molto leggeri. Le distribuzioni pi� vecchie hanno un pacchetto che si chiama ''modutils'' che non funziona correttamente con il kernel 2.6. Il pacchetto ''module-init-tools'' � quello di cui avete bisogno per lavorare correttamente con i moduli di kernel 2.6.
| | <pre>$ mv ~/linux-2.6.18.8.tar.gz ~/linux/</pre> |
|
| |
|
| Chi volesse scaricare e installare da solo questo pacchetto, pu� trovarlo all'indirizzo:
| | ed entrate nella directory linux: |
| http://www.kernel.org/pub/linux/utils/kernel/module-init-tools .
| |
|
| |
|
| La versione pi� vecchia di ''module-init-tools'' compatibile con il kernel 2.6.18 � la 0.9.10. Si raccomanda di installare l'ultima release disponibile di ''module-init-tools'', in quanto permette di utilizzare alcune caratteristiche nuove del kernel. Ad esempio, la possibilit� di creare una blacklist dei moduli che non si vuole vengano automaticamente caricati da udev � una delle opzioni che sono presenti solo nelle versioni pi� recenti di ''module-init-tools''.
| | <pre>$ cd ~/linux |
| Per scoprire quale versione avete installata nel vostro sistema usate il comando:
| | $ ls |
| | linux-2.6.18.8.tar.gz</pre> |
|
| |
|
| <pre>$ depmod -V</pre>
| | Adesso che il codice sorgente si trova nella directory giusta, decomprimetelo: |
|
| |
|
| =='''Strumenti specifici per i filesystem'''==
| | <pre>$ tar -xzvf linux-2.6.18.8.tar.gz</pre> |
|
| |
|
| Per creare, formattare e riparare le partizioni dei dischi � necessario un ampio spettro di strumenti specifici per i vari filesystem. Il pacchetto ''util-linux'' ne contiene alcuni, ma alcuni dei pi� popolari filesystem hanno dei pacchetti separati che contengono le utilit� necessarie.
| | Lo schermo si riempir� della lista dei file che verranno decompressi, e alla fine nella directory linux/ rimarr�: |
|
| |
|
| ==='''ext2/ext3/ext4'''===
| | <pre>$ ls |
| | | linux-2.6.18.8.tar.gz |
| I filesystem ''ext3'' e quello in fase di sviluppo ''ext4'' sono evoluzioni dell' ''ext2'' e possono essere gestiti con gli stessi strumenti; la versione pi� recente di qualunque applicazione basata su ''ext2'' pu� essere impiegata anche sugli altri due filesystem.
| | linux-2.6.18.8/</pre> |
| | |
| Per utilizzare questi filesystem dovete avere il pacchetto ''e2fsprogs''; l'indirizzo a cui trovarlo per scaricarlo e installarlo da soli �: http://e2fsprogs.sourceforge.net.
| |
| | |
| La versione pi� vecchia di ''e2fsprogs'' funzionante con il kernel 2.6.18 � la 1.29; � altamente consigliato utilizzare la release pi� recente per sfruttare al meglio le nuove caratteristiche dei filesystem ''ext3'' ed ''ext4''.
| |
| | |
| Per scoprire quale versione di ''e2fsprogs'' � installata nel vostro sistema usate il comando:
| |
| | |
| <pre>$ tune2fs</pre> | |
| | |
| ==='''JFS'''===
| |
| | |
| Per usare il filesystem JFS di IBM � necessario avere il pacchetto ''jfsutils''; se volete scaricarlo e installarlo da soli lo trovate all'indirizzo: http://jfs.sourceforge.net.
| |
| | |
| La versione pi� vecchia di ''jfsutils'' utilizzabile correttamente con il kernel 2.6.18 � la 1.1.3; per verificare quale versione avete installata lanciate il comando:
| |
| | |
| <pre>$ fsck.jfs -V</pre>
| |
| | |
| ==='''ReiserFS'''===
| |
| | |
| Per usare il filesystem ReiserFS � necessario il pacchetto ''reiserfsprogs''. Per scaricarlo e installarlo da soli l'indirizzo �: http://www.nemesys.com/download.html.
| |
| | |
| La versione pi� vecchia di ''reiserfsprogs'' funzionante con il kernel 2.6.18 � la 3.6.3; il comando per controllare quale versione � installata nel sistema �:
| |
| | |
| <pre>$ reiserfsck -V</pre>
| |
| | |
| ==='''XFS'''===
| |
| | |
| Per usare il filesystem XFS di SGI � necessario avere il pacchetto ''xfsprogs''; � possibile scaricare il pacchetto da installare all'indirizzo: http://oss.sgi.com/project/xfs.
| |
| | |
| La release pi� vecchia di ''xfsprogs'' compatibile con il kernel 2.6.18 � la 2.6.0; per verificare quale versione � installata nel sistema si utilizza:
| |
| | |
| <pre>$ xfs_db -V</pre>
| |
| | |
| ==='''Quota'''===
| |
| | |
| Per utilizzare le quote come funzionalit� del kernel � necessario avere installato il pacchetto ''quota-tools'';* {{Box|To do|nota a pi� di pagina: scoprire come si fa}} Questo pacchetto contiene applicazioni che permettono di fissare le quote di filesystem a disposizione di ogni utente, forniscono statistiche sull'uso delle quote dei vari utenti e diramano degli avvertimenti quando questi stanno per esaurire la loro quota di filesystem.
| |
| | |
| Per scaricare e installare questo pacchetto da soli l'indirizzo �: http://sourceforge.net/projects/quota. La versione pi� vecchia utilizzabile con il kernel 2.6.18 � la 3.0.9; � possibile visualizzare la versione installata con il comando:
| |
| | |
| <pre>$ quota -V</pre>
| |
| | |
| ==='''NFS'''===
| |
| | |
| Per utilizzare correttamente il filesystem NFS � necessario il pacchetto ''nfs-utils''. ** {{Box|To do|nota a pi� di pagina: scoprire come si fa}} Questo pacchetto contiene dei programmi con cui � possibile montare delle partizioni NFS come client e far girare un server NFS.
| |
| | |
| L'indirizzo da cui prelevare questo pacchetto per installarlo da soli �: http://nfs.sf.net.
| |
| | |
| La versione pi� vecchia funzionante con il kernel 2.6.18 � la 1.0.5; il comando per determinare la versione installata �:
| |
| | |
| <pre>$ showmount --version</pre>
| |
| | |
| =='''Altri strumenti'''==
| |
| | |
| Ci sono pochi altri programmi che sono strettamente legati alla versione del kernel. Di solito questi programmi non sono necessari per far funzionare il kernel, ma rendono possibile l'accesso a tipi di hardware e di funzioni differenti.
| |
| | |
| ==='''udev'''===
| |
| | |
| ''udev'' � un programma che permette a Linux di fornire uno schema persistemte di attribuzione dei nomi dei device nella directory ''/dev''. Inoltre fornisce una ''/dev'' dinamica, molto simile a quella fornita dal pi� vecchio (ed ora non pi� utilizzato) filesystem ''devfs''. Quasi tutte le distribuzioni Linux usano ''udev'' per gestire la directory ''/dev'', per cui risulta necessario per eseguire correttamente il boot del sistema.
| |
| | |
| Sfortunatamente ''udev'' si appoggia alla struttura della directory ''/sys'', che � nota per cambiare continuamente con le release del kernel. Alcuni di questi cambiamenti in passato sono stati responsabili del malfunzionamento di ''udev'', cosicch� il sistema non era pi� in grado di fare il boot correttamente. Se ''udev'' non funziona correttamente nonostante abbiate l'ultima versione raccomandata per il vostro kernel, contattate gli sviluppatori tramite la mailing list [mailto:linux-hotplug-devel@list.sourceforge.net].
| |
| | |
| È fortemente consigliato utilizzare l'ultima release di ''udev'' fornita con la vostra distribuzione, dato che � profondamente legata al processo di boot specifico della distribuzione stessa. In ogni caso, chi volesse aggiornare ''udev'' per conto proprio pu� trovarlo all'indirizzo: http:www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html.
| |
| | |
| La versione pi� vecchia di ''udev'' funzionante con il kernel 2.6.18 � la 0.81; � consigliabile usare la versione pi� recente, in quanto funziona meglio con i nuovi kernel, a causa del modo in cui ''udev'' e il kernel comunicano tra di loro.
| |
| | |
| Per conoscere quale versione di udev � installata nel sistema il comando �:
| |
| | |
| <pre>$ udevinfo -V</pre>
| |
| | |
| ==='''Strumenti di analisi dei processi'''===
| |
| | |
| Il pacchetto ''procps'' contiene i programmi di uso comune ''ps'' e ''top'', come anche molti altri strumenti per gestire e tenere sotto controllo i processi in esecuzione nel sistema.
| |
| Se preferite scaricare ed installare da soli questo pacchetto potete trovarlo all'indirizzo
| |
| http://procps.sourceforge.net.
| |
| La versione 3.2.0 � la pi� vecchia compatibile con il kernel 2.6.18; per determinare quale versione � installata si usa il comando:
| |
| | |
| <pre>$ ps --version</pre>
| |
| | |
| ==='''Strumenti per periferiche PCMCIA'''===
| |
| | |
| Per poter utilizzare correttamente le periferiche PCMCIA � necessario un programma a livello utente che permetta di configurarle. Per i kernel pi� vecchi questo programma si chiamava ''pcmcia-cs'', ma � stato sostituito con un sistema pi� semplice chiamato ''pcmciautils''. Se volete utilizzare periferiche PCMCIA dovete avere installato questo pacchetto.
| |
| | |
| Se preferite scaricare ed installare da soli questo pacchetto potete trovarlo all'indirizzo ftp://ftp.kernel.org/pub/utils/kernel/pcmcia.
| |
| | |
| La versione pi� vecchia di ''pcmciautils'' funzionante con il kernel 2.6.18 � la 004, ma � consigliabile installare la versione pi� recente, per poter sfruttare tutte le nuove funzioni del sottosistema PCMCIA, come ad esempio la possibilit� di caricare automaticamente i driver quando viene rilevata una nuova periferica. Il comando per scoprire quale versione di pcmciautils � installata �:
| |
| | |
| <pre>$ pccardctl -V</pre>
| |
|
| |
|
|
| |
|
Riga 172: |
Riga 87: |
| ---- | | ---- |
|
| |
|
| [http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch02.pdf ''Capitolo originale''] | | [http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch03.pdf ''Capitolo originale''] |
| [[Categoria:Kernel]] | | [[Categoria:Kernel]] |