[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
Di solito, 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 di un disco o di un altro tipo di unità di memorizzazione. Negli elaboratori i386 questa parte iniziale del disco è nota come MBR, ovvero Master boot record, costituito da un solo settore (512 byte). Eventualmente, quando si fa riferimento a un disco che non si suddivide in partizioni (come con i dischetti), si parla semplicemente di settore di avvio o di boot. Questo piccolo programma iniziale si occupa a sua volta di avviare il kernel (direttamente o attraverso un programma intermedio).
Nei sistemi con architettura i386 esistono diversi modi per effettuare il caricamento di GNU/Linux; in questo capitolo si trattano i metodi di avvio più facili da comprendere, mentre 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.
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
[Invio]
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 può utilizzare il programma rdev (2) per alterare questi elementi direttamente nel file del kernel o nell'immagine copiata nel dischetto:
rdev [opzioni] [immagine [altre_opzioni]] |
Il programma rdev 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
).
Segue la descrizione di alcuni esempi.
#
rdev /dev/fd0 /dev/hdb1
[Invio]
Configura l'immagine contenuta nel dischetto inserito nella prima unità (/dev/fd0
), definendo che la partizione da innestare nella directory radice è la prima del secondo disco fisso (/dev/hdb1
).
#
rdev -R /dev/fd0 1
[Invio]
Definisce che al momento dell'avvio del kernel la partizione principale sia innestata in sola lettura in modo che il file system possa essere controllato.
Un programma analogo per alterare queste informazioni nel file del kernel è knl (3) che forse è un po' più semplice da utilizzare:
knl [--kernel=]immagine [opzioni] |
Come già per rdev, l'immagine può essere costituita da un file su disco o dal nome di un file di dispositivo che la contiene (come nel caso di un dischetto).
|
Segue una sequenza di esempi, partendo da un kernel contenuto nel file vmlinuz-test
, contenuto nella directory corrente, nel quale si modificano alcune opzioni di funzionamento in fasi successive. Gli esempi non sono descritti, ma si mostra ogni volta l'esito del risultato attraverso knl, chiamandolo senza l'indicazione di altre opzioni oltre al kernel stesso:
#
knl vmlinuz-test
[Invio]
Kernel image configuration: Image: vmlinuz-test Root Dev: Swap Dev: Mode-0.0 Flags: RO Video Mode: VGA Ram Disk: No |
#
knl vmlinuz-test --root=/dev/hdb1
[Invio]
#
knl vmlinuz-test
[Invio]
Kernel image configuration: Image: vmlinuz-test Root Dev: Mode-3.65 Swap Dev: Mode-0.0 Flags: RO Video Mode: VGA Ram Disk: No |
#
knl vmlinuz-test --swap=/dev/hdb2
[Invio]
#
knl vmlinuz-test
[Invio]
Kernel image configuration: Image: vmlinuz-test Root Dev: Mode-3.65 Swap Dev: Mode-3.66 Flags: RO Video Mode: VGA Ram Disk: No |
#
knl vmlinuz-test --video=evga
[Invio]
#
knl vmlinuz-test
[Invio]
Kernel image configuration: Image: vmlinuz-test Root Dev: Mode-3.65 Swap Dev: Mode-3.66 Flags: RO Video Mode: XVGA Ram Disk: No |
Se si utilizza ancora il Dos, si può avviare un kernel Linux attraverso il programma Loadlin, (4) quando è in funzione il Dos. Loadlin è quindi un programma Dos, che deve poter raggiungere il file del kernel all'interno di una partizione Dos.(5)
Se il programma LOADLIN.EXE e il kernel si trovano nel sistema GNU/Linux appena installato, che però si vuole avviare tramite il sistema Dos per qualche motivo, è necessario mettere in funzione il sistema GNU/Linux, temporaneamente in qualche altro modo, allo scopo di trasferire il kernel e il programma di avvio nella partizione Dos. Probabilmente, il modo più semplice di avviare provvisoriamente il sistema GNU/Linux è dato da un'unità di memorizzazione esterna (un dischetto, un CD, una memoria solida), che in qualche modo contiene un kernel adatto.
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
.
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
[Invio]
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 eventuali sistemi di memoria cache del disco fisso. Se si usa SMARTDRV.EXE conviene scaricare la memoria cache nel modo seguente:
C:\>
SMARTDRV /C
[Invio]
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.
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.(6)
C:\>
LOADLIN C:\VMLINUZ root=/dev/hda1 rw
[Invio]
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. |
SYSLINUX (7) è 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ì, perché si tratta di un sistema che facilita notevolmente la realizzazione di dischetti di avvio.
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:
[Invio]
Oppure:
#
syslinux /dev/fd0
[Invio]
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.
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 il settore di avvio, la configurazione e il 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.
|
Segue la descrizione delle direttive che appaiono nell'esempio.
DEFAULT linux
Specifica di utilizzare in modo predefinito l'impostazione identificata dall'etichetta linux. Se questa non fosse stata specificata, significherebbe che si vuole avviare il kernel contenuto nel file linux
.
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 |
TIMEOUT 50
Dopo 50 decimi di secondo (cinque secondi), senza che sia stato selezionato alcunché, viene avviato il sistema predefinito (in questo caso linux). Volendo fare in modo che sia obbligatorio l'intervento dell'utente, si può porre questo valore a zero.
DISPLAY INTRO.TXT
Visualizza il contenuto del file INTRO.TXT
che si deve trovare nella directory radice del dischetto. Attraverso questo sistema, si possono dare delle istruzioni all'utente sulla scelta delle varie voci di avvio, o sul modo di comporre un comando per il kernel.
PROMPT 1
Fa in modo che venga visualizzato l'invito all'utente a inserire qualcosa: boot:. Se il valore abbinato fosse zero, questo invito non verrebbe visualizzato.
F1 INTRO.TXT
Abbina la visualizzazione del contenuto del file INTRO.TXT
attraverso la pressione del tasto [F1].
F2 VARIE.TXT
Abbina la visualizzazione del contenuto del file VARIE.TXT
attraverso la pressione del tasto [F2].
LABEL linux
Definisce il nome dell'etichetta linux utilizzata in questo caso per fare riferimento all'avvio predefinito.
KERNEL LINUX
Indica di utilizzare il file LINUX
, collocato nella directory radice del dischetto, quando si seleziona l'etichetta linux.
LABEL floppy
Definisce il nome dell'etichetta floppy utilizzata in questo caso per fare avviare un sistema a partire da un'immagine contenuta in un dischetto, caricandola in un disco RAM. Come è già stato visto, viene sempre utilizzato il kernel contenuto nel file LINUX
; ma qui si definiscono alcuni parametri di avvio, specifici per il caricamento in un disco RAM, attraverso l'istruzione APPEND.
LABEL hda1
Definisce il nome dell'etichetta hda1 utilizzata in questo caso per fare avviare un sistema a partire dalla prima partizione del primo disco fisso. Come è già stato visto, viene sempre utilizzato il kernel contenuto nel file LINUX
; ma qui si definiscono i parametri di avvio necessari al caricamento del file system principale da /dev/hda1
, in sola lettura.
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.
|
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, per esempio:
per mezzo dell'invito di avvio (boot prompt) quando si avvia attraverso LILO o SYSLINUX;
per mezzo di un'istruzione append, contenuta nel file /etc/lilo.conf
quando si avvia attraverso LILO, oppure nel file SYSLINUX.CFG
quando si avvia attraverso SYSLINUX;
attraverso l'aggiunta di argomenti finali nel comando kernel di GRUB.
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 50 raccoglie più dettagli sui parametri di avvio.
Si tratta di indicazioni date al kernel senza riferimenti a tipi particolari di hardware.
|
|
|
Come è accennato nella sezione 34.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
[Invio]
Attraverso la riga di comando (di un sistema come LILO o SYSLINUX) si avvia la configurazione identificata dal nome linux1, si indica la partizione che si vuole innestare 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
[Invio]
Come nell'esempio precedente, ma si avvia il sistema attraverso il programma Loadlin utilizzando il kernel C:\VMLINUZ
.
|
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.
|
Si tratta dello stesso esempio mostrato poco sopra, utilizzando però SYSLINUX e mettendo l'istruzione nel file SYSLINUX.CFG
.
Quando si utilizza l'architettura i386, il firmware, cioè il BIOS, potrebbe non essere in grado di accedere a settori oltre il 1 024-esimo cilindro (cioè oltre il cilindro numero 1 023). Di conseguenza, se il programma che si occupa di caricare il kernel (qualunque sia il sistema operativo) si deve avvalere delle funzioni del BIOS per questo, non può raggiungere file oltre quel limite dei 1 024 cilindri.
Generalmente, i sistemi di avvio installati nel disco fisso si avvalgono di porzioni di codice installato all'interno di settori che altrimenti sarebbero inutilizzati, con cui gestiscono in proprio il caricamento del kernel, senza dover utilizzare le funzioni limitate del BIOS. Tuttavia, anche così facendo, ci sono situazioni in cui il problema non viene aggirato in modo efficace, oppure si ripresenta benché con limiti meno stretti. |
Quando ci si trova in difficoltà la directory /boot/
di un sistema GNU/Linux, assieme a tutto il suo contenuto, e il kernel, devono trovarsi fisicamente entro il 1 024-esimo cilindro. In pratica, per essere certi che questo si avveri, si può utilizzare una partizione apposita per questi file, nella parte sicura del disco. È poi sufficiente innestare questa partizione nel file system generale, eventualmente riproducendo la directory /boot/
attraverso un semplice collegamento simbolico.
Paul Gortmaker, Linux BootPrompt HOWTO
<http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html>
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
1) Probabilmente, questa possibilità riguarda solo gli elaboratori i386.
2) util-linux: rdev GNU GPL
5) Per conoscere i dettagli sul funzionamento di Loadlin conviene consultare la documentazione allegata al programma.
6) Il file system UMSDOS utilizza un file system Dos-FAT attraverso degli artifici, in modo da mostrare a un sistema GNU/Linux un file system Unix. È importante osservare che questo tipo di file system è estremamente fragile ed è assolutamente sconsigliabile il suo utilizzo, salvo per scopi dimostrativi.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome caricamento_di_gnu_linux.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]