[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 16.   Caricamento di GNU/Linux

Il caricamento di un sistema operativo avviene perché, all'atto dell'accensione di un elaboratore, il firmware (il BIOS degli elaboratori i386) si occupa di leggere ed eseguire un piccolo programma residente all'inizio del disco fisso o di un dischetto. Negli elaboratori i386 questa parte iniziale del disco fisso è l'MBR, o il Master boot record, costituito da un solo settore (512 byte). Quando si fa riferimento a un dischetto, si parla di settore di avvio o di boot. Questo piccolo programma iniziale si occupa a sua volta di avviare il kernel.

Nei sistemi con architettura i386 esistono almeno cinque modi per effettuare il caricamento di GNU/Linux: un dischetto di avvio, GRUB, LILO, Loadlin e SYSLINUX. In questo capitolo si trattano i metodi di avvio più facili da comprendere; in capitoli separati viene descritto l'uso di GRUB e di LILO, che sono invece i sistemi di avvio più importanti per un sistema GNU/Linux.

16.1   Kernel in un dischetto

Dal punto di vista tecnico, il modo più semplice di avviare GNU/Linux è quello di creare un disco di avvio contenente solo il kernel. Nell'esempio seguente si copia il kernel vmlinuz nel dischetto contenuto della prima unità.(1)

cp vmlinuz /dev/fd0

La copia fatta in questo modo non è la copia di un file in un dischetto che contiene un file system: il dischetto diventa il file stesso e questo tipo di dischetto non può contenere più di un file. Questo particolare è molto importante e deve essere compreso necessariamente.

Il file del kernel Linux è qualcosa di molto raffinato: contiene il codice necessario per autoavviarsi dopo essersi decompresso. Infatti, la parte più consistente del kernel viene compressa alla fine del procedimento di compilazione. Naturalmente, il kernel non ha sempre la necessità di autoavviarsi, ma questa possibilità è importante per facilitare ancora di più l'avvio del sistema.

Il kernel è così in grado di avviarsi da solo, ma può non essere stato predisposto per utilizzare esattamente il file system principale desiderato, così come altri elementi predefiniti potrebbero non corrispondere alla realtà. Si utilizza il programma rdev per alterare questi elementi direttamente nel file del kernel o nell'immagine copiata nel dischetto.

16.1.1   # rdev

rdev [opzioni] [immagine [altre_opzioni]]

Legge o imposta i parametri di un'immagine di un kernel. L'immagine in questione può essere indicata come un nome di file, o un nome di dispositivo (tipicamente /dev/fd0).

Scomposizione della sintassi in base ad alcune opzioni

rdev immagine

Visualizza il nome di dispositivo corrispondente al file system principale (root) indicato attualmente nell'immagine. Si tratta di visualizzare il nome della partizione che verrà utilizzata per montare la directory radice del file system.

rdev immagine dispositivo

Specifica un nuovo nome di dispositivo da utilizzare come partizione da montare nella directory radice.

rdev -R immagine 1

Indica di attivare inizialmente in sola lettura il dispositivo da montare nella directory radice.

rdev -R immagine 0

Indica di attivare inizialmente in lettura e scrittura il dispositivo da montare nella directory radice.

rdev -s immagine dispositivo

Indica di utilizzare il dispositivo indicato come area di scambio per la memoria virtuale (swap).

Esempi

rdev /dev/fd0 /dev/hdb1

Configura l'immagine contenuta nel dischetto inserito nella prima unità, definendo che la partizione da montare nella directory radice è la prima del secondo disco fisso.

rdev -R /dev/fd0 1

Definisce che al momento dell'avvio del kernel la partizione principale sia montata in sola lettura in modo che il file system possa essere controllato.

16.2   Loadlin

Se si utilizza ancora il Dos, si può avviare un kernel Linux attraverso il programma Loadlin, (2) quando è in funzione il Dos. Loadlin è quindi un programma Dos, che deve poter raggiungere il file del kernel all'interno di una partizione Dos.

Per conoscere i dettagli sul funzionamento di Loadlin conviene consultare la documentazione allegata al programma.

Prima di poter utilizzare Loadlin occorre almeno avere avviato una volta il sistema GNU/Linux, allo scopo di trasferire un kernel nella partizione Dos. Se in principio è stato deciso di non utilizzare sistemi come GRUB o LILO per l'avvio, l'unica possibiltà per avviare GNU/Linux è data da un dischetto di avvio, magari uno di quelli che contiene solo il kernel.

Attraverso GNU/Linux si deve copiare il programma LOADLIN.EXE nel disco Dos e con esso anche il file del kernel. Quindi si può arrestare il sistema nel modo tradizionale e riavviare l'elaboratore facendo in modo di mettere in funzione il sistema operativo Dos.

Una volta riavviato il sistema operativo Dos si dovrebbero trovare i due file copiati poco prima attraverso GNU/Linux: VMLINUZ (o qualunque altro nome riferito al file del kernel) e LOADLIN.EXE.

16.2.1   Avvio di GNU/Linux

Per avviare in modo semplice il sistema GNU/Linux mentre è in funzione il Dos, dovrebbe bastare il comando seguente. Si suppone che la partizione dedicata a GNU/Linux sia la seconda del primo disco fisso ATA.

C:\> LOADLIN C:\VMLINUZ root=/dev/hda2 ro

In pratica, si dice a LOADLIN.EXE di caricare il file del kernel C:\VMLINUZ in modo da utilizzare la seconda partizione del primo disco fisso (/dev/hda2) cominciando con un accesso in sola lettura (in modo da permetterne il controllo prima che il sistema sia messo completamente in funzione).

Prima di avviare LOADLIN.EXE, vale forse la pena di disattivare gli eventuali sistemi di memoria cache del disco fisso. Se si usa SMARTDRV.EXE conviene scaricare la memoria cache nel modo seguente:

C:\> SMARTDRV /C

In generale, la cosa migliore dovrebbe essere l'inserimento della chiamata a LOADLIN.EXE all'interno di un sistema di file AUTOEXEC.BAT e CONFIG.SYS che permetta l'avvio di configurazioni multiple.

16.2.2   Avvio del sistema GNU/Linux su un file system UMSDOS

L'utilizzo del programma LOADLIN.EXE è il modo più ragionevole di avviare un sistema GNU/Linux installato in un file system UMSDOS. Ciò proprio perché un file system UMSDOS si trova nella stessa partizione utilizzata per il Dos.

C:\> LOADLIN C:\VMLINUZ root=/dev/hda1 rw

In questo caso, si dice a LOADLIN.EXE di caricare il file del kernel C:\VMLINUZ in modo da utilizzare la prima partizione del primo disco fisso (/dev/hda1) cominciando con un accesso sia in lettura che in scrittura.

Con un file system UMSDOS non è possibile iniziare in sola lettura perché non c'è un programma in grado di eseguire il controllo e la correzione di questo tipo di file system. Di conseguenza, l'unico modo per controllare e correggere eventuali errori in un file system UMSDOS è l'uso di programmi Dos quali CHKDSK.EXE, SCANDISK.EXE e simili.

16.3   SYSLINUX

SYSLINUX (3) è un sistema di avvio di GNU/Linux basato fondamentalmente su dischetti con file system Dos-FAT. A prima vista può sembrare qualcosa di superfluo, come una sorta di tentativo ulteriore di far convivere Dos e GNU/Linux in un uno stesso disco. In realtà non è così: si tratta di un sistema che facilita notevolmente la realizzazione di dischetti di avvio, tanto che quasi tutte le distribuzioni di GNU/Linux utilizzano dischetti di questo tipo.

SYSLINUX mette a disposizione un programma Dos, SYSLINUX.EXE, e un programma per GNU/Linux, syslinux, che predispone un dischetto, inizializzato precedentemente, con un file system Dos-FAT in modo che questo possa avviare un kernel Linux. Si procede nel modo seguente per creare un dischetto di avvio nella prima unità a dischetti:

C:\> SYSLINUX A:

oppure

syslinux /dev/fd0

Quello che si ottiene è l'inserimento nel dischetto del programma LDLINUX.SYS e la creazione di un settore di avvio opportuno, che si occupa di avviarlo. Il minimo indispensabile per avviare il sistema è l'aggiunta nel dischetto (nella directory radice) di un kernel Linux denominato convenzionalmente LINUX. Tuttavia, è conveniente predisporre un file di configurazione, SYSLINUX.CFG, in modo da poter sfruttare effettivamente i vantaggi di questo sistema di avvio.

Una volta creato il dischetto, il kernel può essere sostituito quanto si vuole e così anche la configurazione nel file SYSLINUX.CFG. Il settore di avvio del dischetto si limita ad avviare il programma LDLINUX.SYS, il quale provvede poi a leggere la configurazione e ad avviare il kernel.

16.3.1   Configurazione

Il file SYSLINUX.CFG, che serve alla configurazione di questo sistema di avvio, è un file di testo normale, in cui le righe sono terminate indifferentemente con il carattere <LF> o con la sequenza <CR><LF> (in pratica, si può creare sia utilizzando strumenti Dos che Unix).

Concettualmente assomiglia al file /etc/lilo.conf di LILO, con il vantaggio, rispetto a questo, di non dover creare un collegamento tra: settore di avvio, configurazione e kernel. Qui tutto viene gestito dal programma LDLINUX.SYS che si occupa di leggere la configurazione all'avvio e di agire di conseguenza.

L'esempio seguente mostra le caratteristiche principali di questo file di configurazione. In particolare permette di avviare il kernel contenuto nel file LINUX, con diversi comandi di avvio.

DEFAULT linux
TIMEOUT 0
DISPLAY INTRO.TXT
PROMPT 1

F1 INTRO.TXT
F2 VARIE.TXT
 
LABEL linux
        KERNEL LINUX

LABEL floppy
        KERNEL LINUX
        APPEND "ramdisk_start=0 load_ramdisk=1 prompt_ramdisk=1"

LABEL hda1
        KERNEL LINUX
        APPEND "root=/dev/hda1 ro"

Segue la descrizione delle direttive che appaiono nell'esempio.

16.3.2   File di aiuto

SYSLINUX ha una caratteristica importante: consente di predisporre diversi file di aiuto selezionabili dall'utente, prima dell'avvio del kernel. Questi file possono essere visualizzati premendo i tasti funzionali, secondo quanto definito all'interno del file di configurazione.

Dal momento che SYSLINUX non visualizza l'elenco dei tasti utilizzabili, è opportuno che uno di questi file sia visualizzato inizialmente, attraverso l'istruzione DISPLAY; inoltre è opportuno che in tutti questi file ci sia il riepilogo dei vari tasti che possono essere premuti.

Dischetto di avvio multiuso.

        "linux"  avvia il kernel nel modo predefinito
        "floppy" avvia un dischetto come ramdisk
        "hda1"   avvia il filesystem contenuto nella partizione /dev/hda1

Per ulteriori informazioni si può leggere la guida abbinata al tasto F2.

F1=INTRO  F2=VARIE

16.4   Parametri di avvio

Il kernel non è sempre in grado di individuare da solo tutti i dispositivi fisici installati e a volte si desidera comunque di potergli dare delle istruzioni prima del suo avvio. Si tratta di parametri che gli possono essere passati in vari modi:

Questi parametri, quando sono forniti, vengono indicati tutti insieme, separati tra loro da uno spazio. Ogni parametro non può contenere spazi.

Nella sezione seguente vengono indicati solo alcuni tipi di questi parametri. In particolare, non vengono descritti quelli specifici per i vari tipi di hardware. Il capitolo 30 raccoglie più dettagli sui parametri di avvio.

16.4.1   Opzioni generali di avvio ed esempi

Si tratta di indicazioni date al kernel senza riferimenti a tipi particolari di hardware.

File system principale

root=dispositivo

Permette di indicare un dispositivo differente da quello predefinito per montare il file system principale.

ro

Permette di definire un accesso iniziale al file system principale in sola lettura. Questa è la condizione necessaria per poter eseguire un controllo dell'integrità del file system prima di passare alla gestione normale.

rw

Permette di definire un accesso iniziale al file system principale in lettura e scrittura.

Memoria

mem=dimensione

In caso di necessità, permette di definire la dimensione di memoria RAM che si ha a disposizione effettivamente. Si può indicare un numero esadecimale nella forma 0x..., oppure un numero decimale normale, seguito eventualmente dalla lettera k, che sta a indicare kibibyte (simbolo: Kibyte), oppure dalla lettera M, che sta a indicare mebibyte (simbolo: Mibyte).

Varie

init=programma_iniziale

Permette di definire il nome, completo di percorso, del programma che deve svolgere le funzioni di «processo iniziale» (Init). Il kernel provvede da solo a cercare /sbin/init e in alternativa /etc/init. Come ultima risorsa tenta di avviare /bin/sh. Se per qualunque motivo non funziona il programma Init standard, si può tentare di avviare il sistema facendo partire la shell al suo posto.

reserve=indirizzo_i/o,estensione[,indirizzo_i/o,estensione]...

Permette di isolare una o più zone di indirizzi di I/O in modo che il kernel non esegua alcun tentativo di identificazione di componenti in quella zona. Di solito, dopo un'opzione del genere, si inseriscono le dichiarazioni esplicite dei dispositivi che ci sono effettivamente. Il primo valore, quello che esprime l'indirizzo, viene espresso attraverso una notazione esadecimale del tipo consueto (0x...), mentre il secondo è un numero decimale.

Esempi

Come è stato accennato nella sezione 16.4, esistono diversi modi per fornire al kernel delle opzioni di avvio. Questi esempi dovrebbero chiarire le possibilità che ci sono a disposizione.

boot: linux1 root=/dev/hda1 ro

Attraverso la riga di comando di avvio di LILO, oppure di SYSLINUX, si avvia la configurazione identificata dal nome linux1, si indica la partizione che si vuole montare come file system principale e l'accesso iniziale in sola lettura.

grub> kernel (hd0,0)/boot/vmlinuz-2.4.2 root=/dev/hda1 ro[Invio]

Questo esempio riguarda il comando kernel di GRUB, con il quale si vuole avviare il kernel corrispondente al file /boot/vmlinuz-2.4.2 contenuto nella prima partizione del primo disco fisso, dando al kernel le stesse informazioni dell'esempio precedente.

C:\> LOADLIN C:\VMLINUZ root=/dev/hda1 ro

Come nell'esempio precedente, ma si avvia il sistema attraverso il programma Loadlin utilizzando il kernel C:\VMLINUZ.

append="reserve=0x300,64 ether=11,0x300,eth0 ether=12,0x320,eth1"

Attraverso l'istruzione append del file /etc/lilo.conf si riserva la zona di indirizzi I/O tra 30016 e 33F16 e di seguito si specificano due schede di rete Ethernet che utilizzano proprio quella zona di indirizzi.

APPEND "reserve=0x300,64 ether=11,0x300,eth0 ether=12,0x320,eth1"

Si tratta dello stesso esempio mostrato poco sopra, utilizzando però SYSLINUX e mettendo l'istruzione nel file SYSLINUX.CFG.

16.5   Riferimenti

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

1) Probabilmente, questa possibilità riguarda solo gli elaboratori i386.

2) Loadlin   GNU GPL

3) SYSLINUX   GNU GPL

4) Dal momento che in un file system Dos-FAT non conta la differenza tra maiuscole e minuscole tra i nomi dei file, in pratica si tratta del file LINUX.


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome caricamento_di_gnu_linux.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]