LKN: Installare ed Avviare con un Kernel: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
m (link)
 
(19 versioni intermedie di 6 utenti non mostrate)
Riga 1: Riga 1:
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 sarebbe molto difficile capire cosa.
{{LKN}}
__TOC__


'''Strumenti per Compilare il Kernel'''
I precedenti capitoli hanno mostrato come scaricare e compilare il kernel. Ora che si ha un file eseguibile -- con tutti i moduli compilati -- è ora di installare il kernel e provare a fare il boot. In questo capitolo, a differenza dei precedenti, tutti i comandi necessitano di essere eseguiti come utente root. Questo  può essere fatto anteponendo ad ogni comando ''sudo'', usando il comando ''su'' per diventare root, oppure accedendo come ''root''.


'''Compilatore'''
Per vedere se si ha ''sudo'' installato e gli appropriati diritti di accesso, lanciate:
<pre>
$ sudo ls ~/linux/linux-2.6.17.11/Makefile
Password:
Makefile
</pre>
Inserite la vostra password personale al prompt di password, o la password dell'amministratore di sistema (root). La scelta dipende da come il comando di ''sudo'' è stato impostato. Se non ci sono problemi, e si vede una riga che contiene:
<pre>Makefile</pre>
allora potete passare alla prossima sezione.


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.
Se ''sudo'' non è installato o non si hanno i diritti appropriati, si provi ad usare il comando ''su'':
La versione pi� vecchia di gcc che pu� essere utilizzata per compilare un kernel 2.6.18 funzionante � la 3.2. 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, � sconsigliato utilizzarle.
<pre>
Per scoprire che versione di gcc avete installata usate il seguente comando:
$ su
Password:
# exit
exit
$
</pre>
Al prompt della password, inserite la password dell'amministratore di sistema (''root''). Quando ''su'' accetta con successo la password, si è trasferiti ad eseguire ogni cosa con i pieni privilegi di root. State molto attenti mentre siete ''root'', e fate solo il minimo necessario; dopodiché uscite dal programma per tornare con il vostro utente normale.


<pre>$ gcc --version</pre>
== Usare uno script di installazione di una distribuzione ==
Quasi tutte le distribuzioni hanno uno script chiamato ''installkernel'' che può essere usato dal sistema di creazione del kernel per installarne uno pronto automaticamente nel giusto posto e per modificare il bootloader così che nulla di più debba essere fatto dallo sviluppatore<sup>*</sup>.


'''Linker'''
[[Image:Warning_65x68.jpg|left|caption]] Le distribuzioni offrono ''installkernel'' solitamente in un pacchetto chiamato ''mkinitrd'', provate ad installare questo pacchetto se non trovate lo script sulla vostra macchina. <br clear=all/>


Il compilatore C gcc non compie il lavoro di compilazione interamente da solo, ma ha bisogno di alcuni strumenti, chiamati binutils, per fare il linking e l'assembling dei sorgenti. Il pacchetto binutils contiene anche altre utili applicazioni che permettono di intervenire sui file in molti modi, ad esempio per vedere il contenuto di una libreria.
Se avete compilato qualsiasi modulo e volete usare questo metodo per installare un kernel, inserite:
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># make modules_install</pre>
La versione pi� vecchia di binutils che pu� essere utilizzata per il kernel 2.6.18 � la 2.12. Per scoprire quale versione avete installata nel vostro sistema, il comando � il seguente:
Questo installerà tutti i moduli che avete compilato e li metterà nelle appropriate locazioni del filesystem per farli trovare correttamente dal nuovo kernel. I moduli sono posti in ''/lib/modules/kernel_version'', dove per ''kernel_version'' si intende la versione del nuovo kernel che avete appena compilato.


<pre>$ ld -v</pre>
Dopo che i moduli sono stati installati con successo, l'immagine principale del kernel deve essere installata:
<pre># make install</pre>
Ciò farà partire il seguente processo:
# Il sistema di compilazione del kernel verificherà che il kernel sia stato correttamente compilato.
# Il sistema di compilazione copierà la parte statica nella directory ''/boot'' e rinominerà l'eseguibile sulla base della versione del kernel.
# Qualsiasi immagine di ramdisk iniziale necessaria verrà creata automaticamente, usando i moduli che sono appena stati installati durante la fase di ''modules_install''.
# Al programma di bootloader verrà correttamente notificato che un nuovo kernel è presente, e verrà aggiunto nel giusto menu così che l'utente possa selezionarlo la prossima volta che la macchina verrà avviata.
# Dopo questo ha finito, il kernel è installato con successo, si può tranquillamente riavviare e provare la nuova immagine di kernel. Notare che questa installazione non sovrascrive nessuna vecchia immagine dei kernel, così se c'è un problema con la vostra nuova immagine del kernel, il vecchio kernel potrà essere selezionato al tempo d'avvio (''boot time'').


'''Make'''
<small>Nota ('''<sup>*</sup>'''): eccezioni da riportare a questa regola sono Gentoo e altre distribuzioni tipo "from scratch", le quali si
aspettano che l'utente sappia come installare i kernel da solo. Questi tipi di distribuzioni includono la
documentazione su come installare un nuovo kernel, si consulti quest'ultima per l'esatto metodo richiesto.</small>


make � uno strumento che cerca nei sorgenti del kernel quali file devono essere compilati e successivamente lancia il compilatore e altri strumenti per creare il kernel. Il kernel necessita della versione GNU di make, che solitamente si trova in ogni distribuzione in un pacchetto chiamato make.
== Installazione manuale ==
Se volete scaricare e installare make da soli potete trovarlo all'indirizzo:
Se la distribuzione non è provvista del comando ''installkernel'', o si desidera semplicemente fare il lavoro a mano per capire i passi che servono, eccoli qua:
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� nuove lavorano pi� velocemente nel processare i file build.
Per verificare quale versione di make avete installata usate il comando:


<pre>$ make --version</pre>
I moduli devono essere installati:
<pre># make modules_install</pre>


'''Strumenti per Usare il Kernel'''
L'immagine statica del kernel deve essere copiata nella directory ''/boot''. Per un kernel basato su piattaforma i386, fare:
<pre> 
# make kernelversion
2.6.17.11
</pre>


Anche se solitamente la versione del kernel che gira 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.
Notare che la versione del kernel probabilmente sarà differente da quella del vostro. Usate questo valore al posto del testo KERNEL_VERSION nei seguenti passaggi:
<pre>
# cp arch/i386/boot/bzImage /boot/bzImage-KERNEL_VERSION
# cp System.map /boot/System.map-KERNEL_VERSION
</pre>


'''util-linux'''
Modificare il bootloader in modo che conosca il nuovo kernel. Questo implica modificare il file di configurazione per il bootloader che si usa, è spiegato più avanti in "Modificare il bootloader per il nuovo kernel" in GRUB e LILO.


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 dell'orologio di sistema.
Se il processo di avvio non funziona, solitamente è perché una immagine iniziale di ramdisk (initial ramdisk) è necessaria. Per crearla correttamente, si usino i passi all'inizio di questo capitolo per installare un kernel automaticamente, poich&eacute; lo script di installazione della distribuzione sa come creare adeguatamente il ramdisk usando gli script e gli strumenti necessari. Dato che ogni distribuzione fa questo in maniera differente, è oltre lo scopo di questo libro ricoprire tutti i differenti metodi di costruzione dell'immagine di ramdisk.
Se volete scaricare ed installare questo pacchetto da soli lo trovate al seguente indirizzo:
http://www.kernel.org/pub/linux/utils/util-linux.
La versione pi� vecchia di util-linux compatibile con il kernel 2.6.18 � la 2.10. &Egrave; consigliabile installare la versione pi� recente di questo pacchetto, perch� le ultime versioni supportano le nuove caratteristiche implementate nel kernel. Ad esempio bind mounts � un'opzione inclusa nei kernel pi� nuovi che necessita della versione pi� recente di util-linux per poter funzionare correttamente.
Per scoprire che versione di util-linux avete installata nel vostro sistema usate il seguente comando:


<pre>$ fdformat --version</pre>
Qui c'è uno script comodo che può essere usato per installare un kernel automaticamente invece di dover digitare tutti i precedenti comandi ogni volta:
<pre>
#!/bin/sh
#
# installs a kernel
#
make modules_install


'''module-init-tools'''
# find out what kernel version this is
for TAG in VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION ; do
  eval `sed -ne "/^$TAG/s/ //gp" Makefile`
done
SRC_RELEASE=$VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION


Per poter utilizzare i moduli nel kernel � necessario installare il pacchetto module-init-tools. Un modulo del kernel � un pezzetto di codice caricabile che pu� essere aggiunto o rimosso dal kernel anche mentre questo sta girando. &Egrave; comodo compilare i driver dei device come moduli per poter caricare solo quelli relativi all'hardware presente, invece di essere costretti ad inserire staticamente nel kernel tutti i driver e le opzioni possibili. L'uso dei moduli permette di risparmiare memoria, caricando solo le parti di codice necessarie per far funzionare correttamente il sistema.
# figure out the architecture
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 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, e che non funziona correttamente con il kernel 2.6. Per lavorare correttamente con i moduli con un kernel 2.6 � necessario il pacchetto module-init-tools.
ARCH=`grep "CONFIG_ARCH " include/linux/autoconf.h | cut -f 2 -d "\""`
Chi volesse scaricare e installare da solo questo pacchetto, pu� trovarlo all'indirizzo:
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. &Egrave; consigliabile installare l'ultima release, 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 di queste opzioni che sono presenti solo nelle versioni pi� recenti di module-init-tools.
Per scoprire quale versione avete installata nel vostro sistema usate il comando:


<pre>$ depmod -V</pre>
# copy the kernel image
cp arch/$ARCH/boot/bzImage /boot/bzImage-"$SRC_RELEASE"


'''Strumenti Relativi ai Filesystem'''
# copy the System.map file
cp System.map /boot/System.map-"$SRC_RELEASE"


Per creare, formattare e riparare le partizioni dei dischi sono necessari molti strumenti specifici per i vari filesystem; il pacchetto utils-linux ne contiene alcuni, ma molti dei pi� diffusi filesystem hanno dei pacchetti a s� stanti che contengono le utilit� necessarie.
echo "Installed $SRC_RELEASE for $ARCH"
</pre>


'''ext2/ext3/ext4'''
==  Modificare il bootloader per il nuovo kernel ==
Esistono due bootloader comuni per i kernel Linux: GRUB e LILO. GRUB è quello maggiormente usato nelle distribuzioni moderne, e fa alcune cose un po' più facilmente di LILO, ma LILO è ancora utilizzato. Li vedremo entrambi in questa sezione.


I filesystem tipo ext3 e quello in fase di sviluppo ext4 sono un'evoluzione dell'ext2 e possono essere gestiti con gli stessi strumenti; le versioni pi� recenti di ogni applicazione basata su ext2 possono essere impiegate anche sugli altri due tipi.
Per determinare quale bootloader il vostro sistema usa, guardate nella directory ''/boot/''. Se esiste una sottodirectory ''grub'':
Per utilizzare questi filesystems dovete avere il pacchetto e2fsprogs; l'indirizzo a cui trovarlo per scaricarlo e installarlo da soli �:
<pre>
http://e2fsprogs.sourceforge.net.
$ ls -F /boot | grep grub
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 filesystems ext3 e ext4. Per scoprire quale versione di e2fsprogs � installata nel vostro sistema il comando �:
grub/
</pre>
allora si sta utilizzando GRUB come programma per fare il boot. Se questa directory non è presente, si guardi se è presente il file ''/etc/lilo.conf'':
<pre>
$ ls /etc/lilo.conf
/etc/lilo.conf
</pre>
se è presente, state usando LILO come programma per fare il boot.


<pre>$ tune2fs</pre>
I passi che implicano l'aggiunta del nuovo kernel a ognuno di questi programmi sono differenti, per cui si segua solo la sezione che corrisponde al programma che si sta usando.


'''JFS'''
==='''GRUB'''===
Per fare in modo che GRUB sappia che un nuovo kernel è presente, tutto ciò che dovete fare è modificare il file ''/boot/grub/menu.lst''. Per i dettagli completi della struttura di questo file, e tutte le differenti opzioni disponibili, consultate le pagine di info di GRUB:
<pre>$ info grub</pre>


Per usare il filesystem JFS di IBM � necessario avere il pacchetto jfsutils; se volete scaricarlo e installarlo da soli lo trovate all'indirizzo:
Il metodo più facile per aggiungere una nuova voce kernel a ''/boot/grub/menu.lst'' è quello di copiare una voce già esistente. Per esempio, considerate il seguente ''menu.lst'' da un sistema Gentoo:
http://jfs.sourceforge.net.
<pre>
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:
timeout 300
default 0


<pre>$ fsck.jfs -V</pre>
splashimage=(hd0,0)/grub/splash.xpm.gz


'''ReiserFS'''
title 2.6.16.11
  root (hd0,0)
  kernel /bzImage-2.6.16.11 root=/dev/sda2 vga=0x0305


Per usare il filesystem ReiserFS � necessario il pacchetto reiserfsprogs. Per scaricarlo e installarlo da soli l'indirizzo �:
title 2.6.16
http://www.nemesys.com/download.html.
  root (hd0,0)
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 �:
  kernel /bzImage-2.6.16 root=/dev/sda2 vga=0x0305
</pre>


<pre>$ reiserfsck -V</pre>
La linea che comincia con la parola title definisce una nuova voce di kernel, in questo modo questo file contiene due voci. Copiate semplicemente un blocco di linee che cominciano con la linea title, come:
<pre>
title 2.6.16.11
  root (hd0,0)
  kernel /bzImage-2.6.16.11 root=/dev/sda2 vga=0x0305
</pre>


'''XFS'''
Dopodiché aggiungete il blocco alla fine del file, e modificate il numero di versione con la nuova versione del nuovo kernel che si è appena installato. Il titolo non ha alcuna importanza, purché unico, ma visualizzato nel menu di boot, per cui si dovrebbe dargli qualcosa che abbia un significato. Nel nostro esempio, abbiamo installato il kernel 2.6.17.11, per tanto la copia finale del file assomiglierà a:
<pre>
timeout 300
default 0


Per usare il filesystem XFS di SGI � necessario avere il pacchetto xfsprogs; � possibile scaricare il pacchetto da installare all'indirizzo:
splashimage=(hd0,0)/grub/splash.xpm.gz
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>
title 2.6.16.11
  root (hd0,0)
  kernel /bzImage-2.6.16.11 root=/dev/sda2 vga=0x0305


'''Quota'''
title 2.6.16
  root (hd0,0)
  kernel /bzImage-2.6.16 root=/dev/sda2 vga=0x0305


Per usufruire della funzione quota del kernel � necessario avere installato il pacchetto quota-tools;* <pre>nota a pi� di pagina: scoprire come si fa</pre> questo pacchetto contiene delle applicazioni che permettono di fissare le quote a disposizione di ogni utente, forniscono statistiche sull'uso delle quote dei vari utenti e dirama degli avvertimenti quando questi stanno per esaurire la loro parte di filesystem.
title 2.6.17.11
Per scaricare e installare questo pacchetto da soli l'indirizzo �:
  root (hd0,0)
http://sourceforge.net/projects/quota.
  kernel /bzImage-2.6.17.11 root=/dev/sda2 vga=0x0305
La versione pi� vecchia utilizzabile con il kernel 2.6.18 � la 3.0.9; � possibile visualizzare la versione installata con il comando:
</pre>


<pre>$ quota -V</pre>
Dopo che si è salvato il file, riavviate il sistema e assicuratevi che il titolo della nuova immagine del kernel sia presente nel menu di boot. Usate la freccia verso il basso per evidenziare la versione del nuovo kernel, e premete enter per avviare la nuova immagine.


'''NFS'''
==='''LILO'''===
Per fare in modo che LILO sappia che un nuovo kernel è presente, dovete modificare il file di configurazione ''/etc/lilo.conf'' ed eseguire il comando ''lilo'' per applicare le modifiche fatte al file di configurazione. Per i dettagli completi sulla struttura del file di configurazione di LILO, consultate la manpage di LILO:
<pre>$ man lilo</pre>


Per utilizzare correttamente il filesystem NFS � necessario il pacchetto nfs-utils. ** <pre>nota a pi� di pagina: scoprire come si fa</pre> Questo pacchetto contiene dei programmi con cui � possibile montare delle partizioni NFS come client e far girare un server NFS.
Il modo pi&ugrave; facile per aggiungere una nuova voce di kernel nel file ''/etc/lilo.conf'' è copiare una voce esistente. Per esempio, considerate il seguente file di configurazione di LILO di un sistema Gentoo:
L'indirizzo da cui prelevare questo pacchetto per installarlo da soli �:
<pre>
http://nfs.sf.net.
boot=/dev/hda
La versione pi� vecchia funzionante con il kernel 2.6.18 � la 1.0.5; il comando per determinare la versione installata �:
prompt
timeout=50
default=2.6.12


<pre>$ showmount --version</pre>
image=/boot/bzImage-2.6.15
  label=2.6.15
  read-only
  root=/dev/hda2


'''Altri Strumenti'''
image=/boot/bzImage-2.6.12
  label=2.6.12
  read-only
  root=/dev/hda2
</pre>


Ci sono alcuni 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 diversi tipi di funzioni dell'hardware.
La linea che comincia con la parola image= definisce una nuova voce kernel, quindi questo file contiene due voci. Copiate semplicemente un blocco di linee che cominciano con image=, come:
<pre>
image=/boot/bzImage-2.6.15
  label=2.6.15
  read-only
  root=/dev/hda2
</pre>


'''udev'''
Aggiungete dopo il blocco alla fine del file, e modificate il numero di versione per contenere quella del nuovo kernel appena installato. La label non ha alcuna importanza, purché unica, ma è visualizzata nel menu di boot, per cui dovreste dargli qualcosa di sensato. Nel nostro esempio, abbiamo installato il kernel 2.6.17.11, per cui la copia finale del file sarà:
<pre>
boot=/dev/hda
prompt
timeout=50
default=2.6.12


udev � un programma che permette a Linux di fornire un sistema di attribuzione dei nomi dei device nella directory /dev. Inoltre fornisce una gestione dinamica di /dev, 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.
image=/boot/bzImage-2.6.15
Sfortunatamente udev si appoggia alla struttura di /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. 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].
  label=2.6.15
E' 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:
  read-only
http:www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html.
  root=/dev/hda2
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 di come udev e il kernel comunicano tra di loro.
Per conoscere quale versione di udev � installata nel sistema il comando �:


<pre>$ udevinfo -V</pre>
image=/boot/bzImage-2.6.12
  label=2.6.12
  read-only
  root=/dev/hda2


'''Strumenti di analisi dei processi'''
image=/boot/bzImage-2.6.17
  label=2.6.17
  read-only
  root=/dev/hda2
</pre>
Dopo aver salvato il file, lanciate il programma ''/sbin/lilo'' per salvare i cambiamenti del file di configurazione nella sezione di boot del disco:
<pre># /sbin/lilo</pre>
Ora il sistema può essere riavviato in sicurezza. La scelta del nuovo kernel si può vedere tra le scelte disponibili al momento del boot. Usate la freccia verso il basso per evidenziare la versione del nuovo kernel, premete Invio per avviare la nuova immagine.


Il pacchetto procps contiene i programmi di uso comune ps e top e molti altri strumenti per gestire e tenere sotto controllo i processi che girano nel sistema.
Il pacchetto da installare scaricabile 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>
----
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].
----


'''Strumenti per periferiche PCMCIA'''


Per poter utilizzare correttamente le periferiche PCMCIA � necessario un programma a livello userspace 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 far funzionare periferiche PCMCIA dovete avere installato questo pacchetto, che � possibile trovare all'indirizzo:
[http://files.kroah.com/lkn/lkn_pdf/ch05.pdf ''Capitolo originale'']
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 possibili� di caricare automaticamente i driver quando viene rilevata una nuova periferica.
Il comando per scoprire quale versione di pcmciautils � installata �:


<pre>$ pccardctl -V</pre>
 
[[Categoria:Documentazione tecnica]]
[[Categoria:Linux Kernel in a Nutshell]]

Versione attuale delle 12:39, 14 mag 2016

Linux Kernel in a Nutshell

Sommario

Parte I
Compilare il kernel
  1. Introduzione
  2. Requisiti
  3. Procurarsi i sorgenti
  4. Configurazione e compilazione
  5. Installazione e avvio
  6. Aggiornare il kernel
Parte II
Personalizzazioni principali
  1. Personalizzare un kernel
  2. Ricette per configurare un kernel
Parte III
Guide di riferimento per il kernel
  1. Guida di riferimento dei parametri di boot del kernel - parte1
  2. Guida di riferimento dei parametri di boot del kernel - parte2
  3. Guida di riferimento dei parametri di compilazione del kernel
  4. Guida di riferimento delle opzioni di configurazione del kernel - parte1
  5. Guida di riferimento delle opzioni di configurazione del kernel - parte2
Parte IV
Informazioni aggiuntive
  1. Programmi utili
  2. Bibliografia

I precedenti capitoli hanno mostrato come scaricare e compilare il kernel. Ora che si ha un file eseguibile -- con tutti i moduli compilati -- è ora di installare il kernel e provare a fare il boot. In questo capitolo, a differenza dei precedenti, tutti i comandi necessitano di essere eseguiti come utente root. Questo può essere fatto anteponendo ad ogni comando sudo, usando il comando su per diventare root, oppure accedendo come root.

Per vedere se si ha sudo installato e gli appropriati diritti di accesso, lanciate:

$ sudo ls ~/linux/linux-2.6.17.11/Makefile
Password:
Makefile

Inserite la vostra password personale al prompt di password, o la password dell'amministratore di sistema (root). La scelta dipende da come il comando di sudo è stato impostato. Se non ci sono problemi, e si vede una riga che contiene:

Makefile

allora potete passare alla prossima sezione.

Se sudo non è installato o non si hanno i diritti appropriati, si provi ad usare il comando su:

$ su
Password:
# exit
exit
$

Al prompt della password, inserite la password dell'amministratore di sistema (root). Quando su accetta con successo la password, si è trasferiti ad eseguire ogni cosa con i pieni privilegi di root. State molto attenti mentre siete root, e fate solo il minimo necessario; dopodiché uscite dal programma per tornare con il vostro utente normale.

Usare uno script di installazione di una distribuzione

Quasi tutte le distribuzioni hanno uno script chiamato installkernel che può essere usato dal sistema di creazione del kernel per installarne uno pronto automaticamente nel giusto posto e per modificare il bootloader così che nulla di più debba essere fatto dallo sviluppatore*.

caption

Le distribuzioni offrono installkernel solitamente in un pacchetto chiamato mkinitrd, provate ad installare questo pacchetto se non trovate lo script sulla vostra macchina.

Se avete compilato qualsiasi modulo e volete usare questo metodo per installare un kernel, inserite:

# make modules_install

Questo installerà tutti i moduli che avete compilato e li metterà nelle appropriate locazioni del filesystem per farli trovare correttamente dal nuovo kernel. I moduli sono posti in /lib/modules/kernel_version, dove per kernel_version si intende la versione del nuovo kernel che avete appena compilato.

Dopo che i moduli sono stati installati con successo, l'immagine principale del kernel deve essere installata:

# make install

Ciò farà partire il seguente processo:

  1. Il sistema di compilazione del kernel verificherà che il kernel sia stato correttamente compilato.
  2. Il sistema di compilazione copierà la parte statica nella directory /boot e rinominerà l'eseguibile sulla base della versione del kernel.
  3. Qualsiasi immagine di ramdisk iniziale necessaria verrà creata automaticamente, usando i moduli che sono appena stati installati durante la fase di modules_install.
  4. Al programma di bootloader verrà correttamente notificato che un nuovo kernel è presente, e verrà aggiunto nel giusto menu così che l'utente possa selezionarlo la prossima volta che la macchina verrà avviata.
  5. Dopo questo ha finito, il kernel è installato con successo, si può tranquillamente riavviare e provare la nuova immagine di kernel. Notare che questa installazione non sovrascrive nessuna vecchia immagine dei kernel, così se c'è un problema con la vostra nuova immagine del kernel, il vecchio kernel potrà essere selezionato al tempo d'avvio (boot time).

Nota (*): eccezioni da riportare a questa regola sono Gentoo e altre distribuzioni tipo "from scratch", le quali si aspettano che l'utente sappia come installare i kernel da solo. Questi tipi di distribuzioni includono la documentazione su come installare un nuovo kernel, si consulti quest'ultima per l'esatto metodo richiesto.

Installazione manuale

Se la distribuzione non è provvista del comando installkernel, o si desidera semplicemente fare il lavoro a mano per capire i passi che servono, eccoli qua:

I moduli devono essere installati:

# make modules_install

L'immagine statica del kernel deve essere copiata nella directory /boot. Per un kernel basato su piattaforma i386, fare:

  
# make kernelversion 
2.6.17.11

Notare che la versione del kernel probabilmente sarà differente da quella del vostro. Usate questo valore al posto del testo KERNEL_VERSION nei seguenti passaggi:

# cp arch/i386/boot/bzImage /boot/bzImage-KERNEL_VERSION
# cp System.map /boot/System.map-KERNEL_VERSION

Modificare il bootloader in modo che conosca il nuovo kernel. Questo implica modificare il file di configurazione per il bootloader che si usa, è spiegato più avanti in "Modificare il bootloader per il nuovo kernel" in GRUB e LILO.

Se il processo di avvio non funziona, solitamente è perché una immagine iniziale di ramdisk (initial ramdisk) è necessaria. Per crearla correttamente, si usino i passi all'inizio di questo capitolo per installare un kernel automaticamente, poiché lo script di installazione della distribuzione sa come creare adeguatamente il ramdisk usando gli script e gli strumenti necessari. Dato che ogni distribuzione fa questo in maniera differente, è oltre lo scopo di questo libro ricoprire tutti i differenti metodi di costruzione dell'immagine di ramdisk.

Qui c'è uno script comodo che può essere usato per installare un kernel automaticamente invece di dover digitare tutti i precedenti comandi ogni volta:

#!/bin/sh
#
# installs a kernel
#
make modules_install

# find out what kernel version this is
for TAG in VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION ; do
  eval `sed -ne "/^$TAG/s/ //gp" Makefile`
done
SRC_RELEASE=$VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION

# figure out the architecture
ARCH=`grep "CONFIG_ARCH " include/linux/autoconf.h | cut -f 2 -d "\""`

# copy the kernel image
cp arch/$ARCH/boot/bzImage /boot/bzImage-"$SRC_RELEASE"

# copy the System.map file
cp System.map /boot/System.map-"$SRC_RELEASE"

echo "Installed $SRC_RELEASE for $ARCH"

Modificare il bootloader per il nuovo kernel

Esistono due bootloader comuni per i kernel Linux: GRUB e LILO. GRUB è quello maggiormente usato nelle distribuzioni moderne, e fa alcune cose un po' più facilmente di LILO, ma LILO è ancora utilizzato. Li vedremo entrambi in questa sezione.

Per determinare quale bootloader il vostro sistema usa, guardate nella directory /boot/. Se esiste una sottodirectory grub:

$ ls -F /boot | grep grub
grub/

allora si sta utilizzando GRUB come programma per fare il boot. Se questa directory non è presente, si guardi se è presente il file /etc/lilo.conf:

$ ls /etc/lilo.conf
/etc/lilo.conf

se è presente, state usando LILO come programma per fare il boot.

I passi che implicano l'aggiunta del nuovo kernel a ognuno di questi programmi sono differenti, per cui si segua solo la sezione che corrisponde al programma che si sta usando.

GRUB

Per fare in modo che GRUB sappia che un nuovo kernel è presente, tutto ciò che dovete fare è modificare il file /boot/grub/menu.lst. Per i dettagli completi della struttura di questo file, e tutte le differenti opzioni disponibili, consultate le pagine di info di GRUB:

$ info grub

Il metodo più facile per aggiungere una nuova voce kernel a /boot/grub/menu.lst è quello di copiare una voce già esistente. Per esempio, considerate il seguente menu.lst da un sistema Gentoo:

timeout 300
default 0

splashimage=(hd0,0)/grub/splash.xpm.gz

title 2.6.16.11
  root (hd0,0)
  kernel /bzImage-2.6.16.11 root=/dev/sda2 vga=0x0305

title 2.6.16
  root (hd0,0)
  kernel /bzImage-2.6.16 root=/dev/sda2 vga=0x0305

La linea che comincia con la parola title definisce una nuova voce di kernel, in questo modo questo file contiene due voci. Copiate semplicemente un blocco di linee che cominciano con la linea title, come:

title 2.6.16.11
  root (hd0,0)
  kernel /bzImage-2.6.16.11 root=/dev/sda2 vga=0x0305

Dopodiché aggiungete il blocco alla fine del file, e modificate il numero di versione con la nuova versione del nuovo kernel che si è appena installato. Il titolo non ha alcuna importanza, purché unico, ma visualizzato nel menu di boot, per cui si dovrebbe dargli qualcosa che abbia un significato. Nel nostro esempio, abbiamo installato il kernel 2.6.17.11, per tanto la copia finale del file assomiglierà a:

timeout 300
default 0

splashimage=(hd0,0)/grub/splash.xpm.gz

title 2.6.16.11
  root (hd0,0)
  kernel /bzImage-2.6.16.11 root=/dev/sda2 vga=0x0305

title 2.6.16
  root (hd0,0)
  kernel /bzImage-2.6.16 root=/dev/sda2 vga=0x0305

title 2.6.17.11
  root (hd0,0)
  kernel /bzImage-2.6.17.11 root=/dev/sda2 vga=0x0305

Dopo che si è salvato il file, riavviate il sistema e assicuratevi che il titolo della nuova immagine del kernel sia presente nel menu di boot. Usate la freccia verso il basso per evidenziare la versione del nuovo kernel, e premete enter per avviare la nuova immagine.

LILO

Per fare in modo che LILO sappia che un nuovo kernel è presente, dovete modificare il file di configurazione /etc/lilo.conf ed eseguire il comando lilo per applicare le modifiche fatte al file di configurazione. Per i dettagli completi sulla struttura del file di configurazione di LILO, consultate la manpage di LILO:

$ man lilo

Il modo più facile per aggiungere una nuova voce di kernel nel file /etc/lilo.conf è copiare una voce esistente. Per esempio, considerate il seguente file di configurazione di LILO di un sistema Gentoo:

boot=/dev/hda
prompt
timeout=50
default=2.6.12

image=/boot/bzImage-2.6.15
  label=2.6.15
  read-only
  root=/dev/hda2

image=/boot/bzImage-2.6.12
  label=2.6.12
  read-only
  root=/dev/hda2

La linea che comincia con la parola image= definisce una nuova voce kernel, quindi questo file contiene due voci. Copiate semplicemente un blocco di linee che cominciano con image=, come:

image=/boot/bzImage-2.6.15
  label=2.6.15
  read-only
  root=/dev/hda2

Aggiungete dopo il blocco alla fine del file, e modificate il numero di versione per contenere quella del nuovo kernel appena installato. La label non ha alcuna importanza, purché unica, ma è visualizzata nel menu di boot, per cui dovreste dargli qualcosa di sensato. Nel nostro esempio, abbiamo installato il kernel 2.6.17.11, per cui la copia finale del file sarà:

boot=/dev/hda
prompt
timeout=50
default=2.6.12

image=/boot/bzImage-2.6.15
  label=2.6.15
  read-only
  root=/dev/hda2

image=/boot/bzImage-2.6.12
  label=2.6.12
  read-only
  root=/dev/hda2

image=/boot/bzImage-2.6.17
  label=2.6.17
  read-only
  root=/dev/hda2

Dopo aver salvato il file, lanciate il programma /sbin/lilo per salvare i cambiamenti del file di configurazione nella sezione di boot del disco:

# /sbin/lilo

Ora il sistema può essere riavviato in sicurezza. La scelta del nuovo kernel si può vedere tra le scelte disponibili al momento del boot. Usate la freccia verso il basso per evidenziare la versione del nuovo kernel, premete Invio per avviare la nuova immagine.



This is an indipendent translation of the book Linux Kernel in a Nutshell by Greg Kroah-Hartman. This translation (like the original work) is available under the terms of Creative Commons Attribution-ShareAlike 2.5.



Capitolo originale