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

Vai alla navigazione Vai alla ricerca
nessun oggetto della modifica
Nessun oggetto della modifica
Riga 1: Riga 1:
Ora che avete scaricato i sorgenti della versione del kernel che avete scelto e che li avete installati in una cartella locale, � giunto il momento di compilare il codice. Il primo passo � di configurare il kernel con le opzioni appropriate; in seguito il kernel potr� essere compilato. Entrambe le operazioni sono portate a termine attraverso lo strumento standard ''make''.
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''.


== '''Creare una Configurazione''' ==
Per vedere se si ha ''sudo'' installato e gli appropriati diritti di accesso, lanciate:


La configurazione del kernel risiede in un file chiamato ''.config'' nella cartella principale dell'albero dei sorgenti del kernel. Se avete appena estratto il codice sorgente del kernel, non vi sar� alcun file ''.config'', dovr� quindi essere creato. Pu� essere creato dall'inizio, creato sulla "configurazione predefinita", preso da una versione funzionante del kernel, o preso da quello rilasciato da una distribuzione. Copriremo i primi due metodi adesso, gli ultimi due metodi nel Capitolo 7.
<pre>
  '''$sudo ls ~/linux/linux-2.6.17.11/Makefile'''
  Password:
  Makefile
</pre>


==='''Configurare dall'inizio'''===
Inserite la vostra password personale al prompt di password, o la password del system administrator (root). La scelta dipende da come il comando di ''sudo'' e' stato impostato. Se non ci sono problemi, e si vede una linea che contiene:
Il modo pi� semplice per configurare un kernel � usare il metodo ''make config'':
<pre>$ '''cd linux-2.6.17.10'''
'''$ make config'''
make config
scripts/kconfig/conf arch/i386/Kconfig
*
* Linux Kernel Configuration
*
*
* Code maturity level option
*
Prompt for development and/or incomplete code/drivers (EXPERIMENTAL) [Y/n/?]
'''Y'''


*
<pre> Makefile </pre>
* General setup
*
Local version - append to kernel release (LOCALVERSION) []
Automatically append version information to the version string
(LOCALVERSION_AUTO) [Y/n/?] '''Y'''
...</pre>
Il programma di configurazione del kernel proceder� attraverso ogni opzione di configurazione e vi chieder� se la si vuole abilitare o meno. Tipicamente, le possibilit� per ogni opzione sono presentate nella forma <tt>[Y/m/n/?]</tt>. La lettera maiuscola � la scelta predefinita, e pu� essere selezionata semplicemente premendo il tasto Invio. Le quattro scelte sono:
* <tt>Y</tt>  Compilare direttamente nel kernel.
* <tt>n</tt>  Lasciare completamente al di fuori del kernel.
* <tt>m</tt>  Compilare come modulo, da caricare se necessario.
* <tt>?</tt>  Stampare un breve messaggio descrittivo e ripropone il quesito.
Il kernel contiene quasi duemila opzioni di configurazioni differenti, quindi rispondere a una domanda su ognuna di esse richiede un notevole dispendio di tempo. Fortunatamente, vi � un modo pi� facile di configurare un kernel: basare la configurazione su una configurazione pre-costruita.


==='''Opzioni della Configurazione predefinita'''===
allora potete passare alla prossima sezione.
Ogni versione del kernel ha una configurazione "predefinita". Questa configurazione � in parte basata sulle scelte che il responsabile di quella architettura crede siano le opzioni migliori da essere usate. In alcuni casi, � la configurazione usata dal responsabile stesso sulle proprie macchine. Questo � vero per l'architettura i386, dove la configurazione predefinita corrisponde strettamente a quella che Linus Torvalds usa per la sua macchina di sviluppo principale.


Per creare questa configurazione predefinita, eseguite:
Se ''sudo'' non � installato o non si hanno i diritti appropriati, si provi ad usare il comando ''su'':
<pre>$ '''cd linux-2.6.17.10'''
$ '''make defconfig'''</pre>
Una grande quantit� di configurazioni scorrer� velocemente sullo schermo, e un file ''.config'' sar� creato e piazzato nella cartella del kernel. Il kernel � ora correttamente configurato, ma dovrebbe essere adattato alla vostra macchina per assicurarsi che funzioni correttamente.


=='''Modificare la configurazione'''==
<pre>
Ora che abbiamo un file di configurazione di base, dovrebbe essere modificato per supportare l'hardware presente nel vostro sistema. Per ulteriori dettagli su come individuare quali opzioni vi siano necessarie per ottenere ci�, potete leggere il Capitolo 7. Qui mostreremo come selezionare le opzioni che potete voler cambiare.
  $ '''su'''
  Password:
  # exit
  exit
  $
</pre>


Ci sono tre differenti strumenti interattivi per la configurazione del kernel: uno basato su terminale chiamato ''menuconfig'', uno grafico basato sulle GTK+ chiamato ''gconfig'', e un altro grafico basato sulle QT chiamato ''xconfig''.
Al prompt della password, inserite la password del system administrator (''root''). Quando ''su'' accetta con successo la password, si � trasferiti ad eseguire ognicosa 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 *.
 
1. Il sistema di creazione del kernel verificher� che il kernel sia stato correttamente costruito.
 
2. Il sistema di creazione 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 sar� avviata.
 
5. Dopo che 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 boot time.
 
* 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 kernels da solo. Questi tipi di distribuzoni 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 semplicemnete fare il lavoro a mano per capire i passi che servono, eccoli qua:
 
I moduli devono esser installati:
 
<pre>  # '''make modules_install''' </pre>
 
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>
 
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>
 
Modificate il bootloader in modo che sappia del nuovo kernel. Questo implica modificare il file di configurazione per il bootloader che si usa, che � 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 scripts 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 agevole 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
 
  # 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"
</pre>
 
 
==  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 � tuttora anch'esso utilizzato. Li vedremo entrambi in questa sezione.
 
Per determinare quale bootloader il vostro sistema usa, guardate nella directory ''/boot/''. Se esiste una sottodirectory ''grub'':
 
<pre>
  $ '''ls -F /boot | grep grub'''
  grub/
</pre>
 
allora si sta utilizzando il 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.
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:
 
<pre>
  $ '''info grub'''
</pre>
 
Il metodo pi� veloce 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:
 
<pre>
  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
</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>
 
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, dal momento che � unico, ma � visualizzato nel menu di boot, per si dovreste 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
 
  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
</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.
128

contributi

Menu di navigazione