3. Le chargeur aboot

Contenu de cette section

Si vous utilisez le firmware SRM, aboot est la meilleure façon de démarrer Linux. Il supporte :

3.1 Se procurer et installer aboot

Les codes sources les plus récents d'aboot sont disponibles à l'adresse ftp://ftp.azstarnet.com/pub/linux/axp/aboot . La description de ce manuel s'applique à aboot pour les versions 0.5 et suivantes.

Une fois que vous avez téléchargé et extrait l'archive tar, jetez un oeil aux fichiers README et INSTALL pour lire les directives d'installation. En particulier, assurez vous que les variables, dans les fichiers Makefile et include/config.h sont correctes vis-à-vis de votre environnement . Normalement, vous ne devriez pas avoir à changer quoi que ce soit pour compiler sous Linux, mais c'est toujours une bonne chose de vérifier. Si la configuration vous convient, tapez simplement make pour lancer la compilation (si vous n'effectuez pas cette opération sous Linux, sachez que aboot requiert GNU make).

Après l'exécution de make, le répertoire aboot devrait contenir les fichiers suivants :

aboot

L'exécutable réel (fichier objet ECOFF ou ELF),

bootlx

Comme ci-dessus, mais ce fichier ne contient que les segments text, data et bss (ce fichier n'est pas un fichier objet),

sdisklabel/writeboot

Un utilitaire pour installer aboot sur un disque dur,

tools/e2writeboot

Un utilitaire pour installer aboot sur un système de fichiers ext2 (n'est en général utilisé que pour les disquettes),

tools/isomarkboot

Un utilitaire pour installer aboot sur un système de fichiers iso9660 (utilisé par les distributeurs de CD-ROM),

tools/abootconf

Un utilitaire pour configurer aboot s'il est installé.

3.2 Installation sur disquette

Le lanceur peut être installé sur une disquette en utilisant la commande e2writeboot (note : ceci ne peut se faire sur un Jensen car son firmware n'implante pas le démarrage depuis une disquette). Cette commande nécessite que le disque ne soit pas trop fragmenté car elle a besoin de trouver suffisament de secteurs contigus pour stocker l'image entière de aboot (actuellement, environ 90Ko). Si e2writeboot échoue à cause de ça, reformatez la disquette et réessayez (par ex., avec fdformat(1)). Par exemple, la procédure suivante installe aboot sur une disquette en supposant que la disquette est dans le lecteur correspondant à /dev/fd0 :

fdformat /dev/fd0
mke2fs /dev/fd0
e2writeboot /dev/fd0 bootlx

3.3 Installation sur disque dur

Sachant que la commande e2writeboot peut échouer sur un disque hautement fragmenté et comme le reformattage d'un disque dur ne se fait pas sans peine, il est généralement plus sûr d'installer aboot sur un disque dur en utilisant la commande swriteboot. swriteboot nécessite que les premiers secteurs soient réservés aux procédures de démarrage. Nous suggérons que le disque soit partitionné de manière à ce que la première partition commence à une adresse correspondant à 2048 secteurs. Cela laisse 1Mo d'espace ibre pour stocker aboot. Sur un disque partitionné de cette façon , il est alors possible d'installer aboot comme décrit ci-dessous (en supposant que le disque correspond à /dev/sda.) :

swriteboot /dev/sda bootlx

Sur un Jensen, vous devrez laisser un peu plus d'espace, sachant que vous devrez également stocker le noyau à cet endroit - 2Mo devraient suffire en utilisant une image compressée. Utilisez swriteboot comme décrit à la section booting pour écrire bootlx avec le noyau Linux.

3.4 Installation sur CD-ROM

Pour construire un CD-ROM amorçable avec SRM, construisez simplement aboot comme décrit ci-dessus. Assurez-vous ensuite que le fichier bootlx est présent sur le système de fichiers iso9660 (e.g., copiez bootlx dans le répertoire où est monté le système de fichiers) , et lancez mkisofs sur ce répertoire). Après cela, la seule chose restant à faire est de marquer le système de fichiers comme amorçable avec SRM. Cela est réalisé grâce à une commande de la forme :

isomarkboot filesystem bootlx

La commande ci-dessus nécessite que filesystem est un fichier contenant le système de fichiers iso9660 et que bootlx a été copié dans la racine de ce système de fichiers. C'est tout !

3.5 Construire un noyau Linux

Un noyau Linux amorçable peut être construit par les étapes suivantes. Durant le make config, assurez-vous de répondre "oui" ("yes") à la question concernant le lancement du noyau par SRM.

cd /usr/src/linux
make config
make dep
make boot

La dernière commande construira le fichier arch/alpha/boot/vmlinux.gz qui peut alors être copié sur le disque à partir duquel vous désirez démarrer. Dans notre exemple précédent concernant la disquette, cela donnerai :

mount /dev/fd0 /mnt
cp arch/alpha/boot/vmlinux.gz /mnt
umount /mnt

3.6 Démarrer Linux

Avec le firmware SRM et aboot installé, le démarrage de Linux s'effectue généralement avec une commande de la forme :

boot devicename -fi filename -fl flags

Les arguments filename et flags sont optionels. S'ils ne sont pas spécifiés, SRM utilise les valeurs par défaut contenues dans les variables d'environnement BOOT_OSFILE et BOOT_OSFLAGS. La syntaxe et la signification de ces deux arguments est décrite plus en détail ci-dessous.

Nom du fichier boot

L'argument filename est de la forme :

[n/]filename

n est un simple nombre dans l'intervalle 1..8 qui donne le numéro de la partition de démarrage. filename est le chemin d'accés au fichier à lancer. Par exemple, pour démarrer depuis la deuxième partition du sixième disque SCSI, vous entreriez :

boot dka600 -file 2/vmlinux.gz

Ou, pour démarrer depuis le premier lecteur de disquette :

boot dva0 -file vmlinux.gz

Si un disque n'a pas de table des partitions, aboot considère que le disque contient une partition ext2 commençant au premier bloc du disque. Cela permet de démarrer depuis une disquette.

Le numéro de partition 0 est utilisé pour demander le démarrage depuis un disque qui ne contient pas (encore) de système de fichiers. Si l'on spécifie le numéro de "partition" 0, aboot considère que le noyau Linux suit directement l'image de aboot. Une telle chose peut être réalisée avec la commande swriteboot. Par exemple, pour configurer un démarrage sans système de fichiers depuis /dev/sda, on pourrait utiliser la commande :

swriteboot /dev/sda bootlx vmlinux.gz

Démarrer un système de cette façon n'est pas obligatoirement nécessaire. La raison d'être de cette fonctionnalité est de permettre l'installation de Linux sur un système qui ne peut démarrer depuis une disquette (e.g., le Jensen).

Drapeaux de démarrage

Plusieurs drapeaux de démarrage peuvent être spécifiés. La syntaxe en est :

-flags "options..."

Où "options..." est une combinaison des options suivantes (séparées par des espace). Il y a encore plus d'options, en fonction des pilotes que le noyau a installé. Les options listées ci-après ne sont là que pour illustrer l'idée générale :

load_ramdisk=1

Copie le système de fichiers racine depuis une disquette vers un disque virtuel en mémoire avant de lancer le système. Ce disque virtuel sera utilisé en lieu et place du périphérique racine. Ceci est utile pour démarrer Linux sur une machine qui ne possède qu'un lecteur de disquettes.

floppy=str

root=dev

Sélectionne le périphérique dev comme système de fichiers racine. Le périphérique peut être spécifié comme la combinaison des numéros major/minor du fichier de périphérique en hexadécimal (e.g., 0x802 pour /dev/sda2) ou un nom de fichier de périphérique (e.g.,/dev/fd0, /dev/sda2).

single

Lance le système en mode mono-utilisateur.

kgdb

Autorise kernel-gdb (ne fonctionne que si CONFIG_KGDB est activé ; un deuxième système Alpha doit être connecté par voie série pour que cela fonctionne).

Quelques implémentations de SRM (e.g., celle du Jensen) sont limitées et n'autorisent que les chaînes d'options de courte longueur (e.g., au plus 8 caractères). Dans ce cas là, aboot peut être démarré avec le drapeau de démarrage "i". Avec ce drapeau, aboot demandera à l'utilisateur d'entrer une chaîne d'options pouvant atteindre 256 caractères. Par exemple :

boot dka0 -fl i
aboot> 3/vmlinux.gz root=/dev/sda3 single

Comme démarrer de cette façon devient rapidement pénible , aboot autorise l'utilisateur à définir des raccourcis pour les lignes de commande fréquemment utilisées. En particulier, une option donnée par un chiffre -- option --> (0-9) demande à aboot d'utiliser l'option correspondante dans le fichier /etc/aboot.conf. Un exemple de fichier aboot.conf est donné ci-dessous :

#
# aboot default configurations
#
0:3/vmlinux.gz root=/dev/sda3
1:3/vmlinux.gz root=/dev/sda3 single
2:3/vmlinux.new.gz root=/dev/sda3
3:3/vmlinux root=/dev/sda3
8:- root=/dev/sda3            # fs-less boot of raw kernel
9:0/vmlinux.gz root=/dev/sda3 # fs-less boot of (compressed) ECOFF kernel
-

Avec ce fichier, la commande

boot dka0 -fl 1

correspond exactement à la commande de démarrage donnée ci-dessus. Il est cependant facile d'oublier la correspondance entre les numéros et les chaînes d'options. Pour éviter ce problème, démarrez avec l'option "h" et aboot affichera le contenu de /etc/aboot.conf avant d'afficher l'invite demandant la chaîne d'option entière.

En conclusion, même si aboot demande l'entrée d'une chaîne d'options, il est possible d'entrer un simple caractère ("i", "h", ou "0"-"9") pour obtenir le même résultat que si le drapeau avait été spécifié sur la ligne de commande de démarrage. Par exemple, vous pouvez démarrer avec le drapeau "i", taper ensuite "h" (suivi par entrée) pour vous rappeler le contenu de /etc/aboot.conf

Sélectionner la partition de /etc/aboot.conf

Quand aboot est installé sur un disque dur, il a besoin de savoir sur quel partition il lui faut chercher le fichier /etc/aboot.conf. Nouvellement compilé, aboot cherchera sur la deuxième partition (/dev/sda2). Comme il serait contraignant d'avoir à recompiler aboot uniquement pour changer le numéro de la partition, abootconf autorise à directement modifier aboot déjà installé. Par exemple, si vous désiriez changer aboot afin qu'il utilise la troisième partition du disque /dev/sda, vous utiliseriez la commande :

abootconf /dev/sda 3

Vous pouvez vérifier le réglage courant simplement en omettant le numéro de partition. Alors, abootconf /dev/sda affichera la partition actuellement sélectionnée. Notez que aboot être déjà installé pour que cette commande réussisse. Aussi, lors de l'installation d'un nouvel aboot, le numéro de partition redeviendra celui par défaut (i.e., il sera nécessaire de relancer abootconf).

Depuis la version 0.5 de aboot, il est également possible de sélectionner la partition contenant le fichier aboot.conf depuis la ligne de commande de démarrage. Cela peut être fait avec une ligne de commande de la forme a:ba est le numéro de la partition contenant /etc/aboot.conf et b est une option d'une lettre comme décrit plus haut (0-9, i, ou h). Par exemple, si vous tapez boot -fl "3:h" dka100 le système démarre depuis SCSI ID 1, charge /etc/aboot.conf depuis la troisième partition, affiche son contenu à l'écran et attend que vous entriez les options de démarrage.

3.7 Démarrage réseau

Deux étapes préliminaires sont nécessaires avant que Linux puisse démarrer par un réseau. Premièrement, vous devrez positionner les variables d'environnement de SRM pour permettre le démarrage via le protocole bootp et deuxièmement vous devrez configurer une autre machine comme serveur de démarrage. Reportez-vous à la documentation de SRM fournie avec votre machine pour toute information sur la mise en place de bootp. Configurer le serveur de démarrage dépend étroitement du système d'exploitation de cette machine, mais typiquement cela nécessite de lancer le programme bootpd en tâche de fond après avoir configuré le fichier /etc/bootptab. Le fichier bootptab possède une entrée par machine cliente autorisée à démarrer depuis le serveur. Par exemple, si vous voulez démarrer la machine myhost.cs.arizona.edu, une entrée de la forme suivante serait nécessaire :

myhost.cs.arizona.edu:\
        :hd=/remote/:bf=vmlinux.bootp:\
        :ht=ethernet:ha=08012B1C51F8:hn:vm=rfc1048:\
        :ip=192.12.69.254:bs=auto:

Cette entrée considère que l'adresse Ethernet de la machine est 08012B1C51F8 et que son adresse IP est 192.12.69.254. L'adresse Ethernet peut être trouvée grâce à la commande show device de la console SRM ou, si Linux est lancé, avec la commande ifconfig. L'entrée précise également que si le client ne déclare pas le contraire, le fichier qui sera lancé sera le fichier vmlinux.bootp du répertoire /remote. Pour plus d'informations sur la configuration de bootpd, reportez-vous à sa page de manuel.

Ensuite, construiser aboot grâce à la commande make netboot. Assurez-vous que le noyau que vous désirez lancer a déjà été construit. Par défaut, le Makefile du programme aboot utilise le noyau /usr/src/linux/arch/alpha/boot/vmlinux.gz (éditez le Makefile si vous désirez utiliser un autre chemin d'accés). Le résultat de make netboot est un fichier nommé vmlinux.bootp contenant aboot et le noyau Linux, prêt pour le démarrage par réseau.

Enfin, copiez vmlinux.bootp dans le répertoire du serveur de démarrage. Dans l'exemple plus haut, vous l'auriez copié dans le répertoire /remote/. Ensuite, allumez la machine client et démarrez la, en spécifiant l'adaptateur Ethernet comme périphérique de démarrage. SRM nomme typiquement le premier adaptateur Ethernet ewa0, donc, pour démarrer depuis ce périphérique, vous utiliserez la commande :

boot ewa0

Les options -fi et -fl sont utilisable comme d'habitude. En particulier, vous pouvez demander à aboot d'attendre l'entrée d'arguments pour le noyau Linux en spécifiant l'option -fl i.


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre