david.rusling@reo.mts.dec.com
Ce document expose le fonctionnement du logiciel MILO (Miniloader) pour Alpha AXP. Ce logiciel de console a pour fonction d'initialiser le système Alpha AXP, de charger et démarrer Linux et, pour finir, il met un PALcode à disposition de Linux.
Ce document a été réalisé en 1995, 1996, 1997 par David A Rusling. (c) Copyright 1995, 1996, 1997.
Document traduit de l'anglais en 1997 par Frédéric Aime (fred@castor.unice.fr) et "Les Éditions du Soleil" (c) Copyright "Les Éditions du Soleil" 1997. Maintenance de la version SGML par Miodrag Vallat (miodrag@multimania.com).
Copyright. Comme il en est de tous les documents HOWTO pour Linux, cette documentation peut être reproduite, distribuée intégralement ou en partie seulement sur n'importe quel média, physique ou électronique, du moment que cet avertissement sur les droits d'auteur est présent sur toutes les copies. L'utilisation commerciale est autorisée et encouragée ; cependant l'auteur est désireux d'être averti de ces utilisations. Vous pouvez traduire ce document dans n'importe quelle langue à partir du moment où cette note ainsi que la décharge de responsabilité sont conservées intacte et qu'une notice présentant le traducteur y figure.
Décharge de responsabilité. Bien qu'ayant essayé d'inclure les informations les plus précises et correctes à ma disposition, je ne peux garantir que l'utilisation faite de ce document n'aboutisse pas à des pertes de données ou de matériels. Je n'apporte ABSOLUMENT AUCUNE GARANTIE quant aux informations contenues dans ce document ; de ce fait je ne pourrais être tenu, en aucun cas, pour responsable des conséquences de son utilisation.
La dernière version de ce document est disponible à l'adresse suivante : ftp://gatekeeper.dec.com/pub/Digital/Linux-Alpha/Miniloader/docs et David Mosberger-Tang a eu l'amabilité de l'inclure sous la forme d'une page Web sur l'excellent site Linux pour Alpha : http://www.azstarnet.com/axplinux.
Sur machines Intel, le BIOS configure le système et ensuite charge, depuis le secteur d'amorçage d'un disque DOS, une image à exécuter. Cela est en quelque sorte la fonction principale de MILO sur un système Alpha. Il existe toutefois un certain nombre de différences entre BIOS et MILO, notamment le fait que MILO intègre certains pilotes de périphériques Linux inchangés. MILO est un logiciel appelé FirmWare, à l'inverse de LILO qui dépend du logiciel FirmWare BIOS responsable de son chargement et de son exécution en mémoire centrale. Les principales fonctions de MILO sont :
Les paragraphes suivants décrivent ces fonctionnalités plus en détail.
Le PALcode peut être perçu comme une minuscule couche logicielle qui prépare le processeur Alpha en vue de l'utilisation d'un système d'exploitation spécifique. Il fonctionne dans un mode spécial du processeur (PALmode) qui a certaines limitations mais utilise les instructions standard des processeurs Alpha, plus cinq instructions supplémentaires. De cette manière le processeur Alpha peut exécuter une grande diversité de systèmes d'exploitation tels que Windows NT, OpenVMS, Digital Unix et bien sûr Linux. Le PALcode que MILO utilise (et in extenso Linux lui-même) est, comme le reste de MILO un freeware. Il est inspiré d'un exemple de PALcode pour Digital Unix que Digital fournissait avec ses premières cartes d'évaluation. Les différences entre les PALcode sont dues à des différences qui existent dans la cartographie de la mémoire, dans la gestion des interruptions entre les différentes versions du processeur Alpha (par exemple le 21066 possède une cartographie des entrées-sorties différente de l'association du 21064 avec les contrôleurs E/S de la famille 2107x, en effet le 21066 intègre un équivalent de ce contrôleur sur son support).
Pour que MILO fonctionne correctement il lui faut savoir quelle est la
quantité de mémoire disponible, à quel endroit Linux peut
éventuellement être chargé en mémoire, et il doit, de
plus, être capable d'allouer temporairement de la mémoire pour les
pilotes de périphériques Linux. Le code contient une cartographie
de la mémoire qui comporte des espaces disponibles pour une allocation
de pages mémoire permanentes ou temporaires. Lorsqu'il démarre,
MILO se décompresse à l'emplacement mémoire
adéquat. Lorsqu'il transfère le contrôle au noyau Linux, il
réserve un espace pour une instance compressée de
lui-même, pour le PALcode (indispensable au fonctionnement du noyau)
ainsi que quelques structures de données. Cela laisse la
quasi-totalité
de la mémoire centrale libre pour Linux.
L'opération finale du gestionnaire mémoire est de configurer et d'activer l'adressage virtuel afin que les structures de données attendues par Linux soient à leur place en mémoire virtuelle.
MILO contient du code d'initialisation de l'affichage qui prépare le système graphique à l'utilisation de Linux. Il détectera et utilisera un adaptateur VGA s'il est présent, sinon il essaiera d'utiliser le pilote TGA (21030). S'il y a échec de cette initialisation, MILO considèrera qu'il n'y a aucun périphérique graphique sur le système. L'émulation BIOS incluse dans MILO est en fait celle de Digital qui est capable de supporter la plupart, voire la totalité, des cartes graphiques disponibles.
Les pilotes de périphériques de Linux résident dans le noyau dont ils attendent un certain nombre de services. Certains de ces services sont directement fournis par le code du noyau Linux inclus dans MILO. Par exemple la gestion des interruptions est réalisée par un ensemble de fonctions similaires à celles du vrai noyau Linux.
La fonctionnalité la plus puissante de MILO est de permettre l'inclusion de n'importe quel pilote Linux sans apporter de modifications. Cela lui offre la possibilité d'être compatible avec n'importe quel périphérique compatible avec Linux. MILO contient, en standard, tous les pilotes de périphériques en mode bloc du noyau Linux.
MILO charge le noyau Linux depuis un vrai système de fichiers plutôt que depuis un secteur d'amorçage ou d'autres emplacements étranges. Il supporte les systèmes de fichiers MSDOS, EXT2 et ISO9660. Les fichiers GZIPpés sont également reconnus et recommandés, en particulier lors d'un chargement à partir d'une disquette qui reste un support relativement lent. MILO les reconnaît grâce à leur suffixe .gz.
Un gestionnaire de clavier rudimentaire est inclus dans MILO si bien qu'avec un pilote de périphérique vidéo d'une simplicité égale il dispose d'une interface utilisateur simple. Cette interface permet de lister les systèmes de fichiers disponibles par le biais de pilotes de périphériques configurés, de démarrer Linux ou des utilitaires de mises à jour de la mémoire flash, de définir des variables d'environnement agissant sur le démarrage du système. Comme avec LILO vous pouvez transmettre des arguments au noyau.
MILO doit renseigner le noyau Linux sur la nature du matériel sous-jacent (type de carte mère, quantité de mémoire RAM totale et quantité libre). Il effectue cela en utilisant les informations contenues dans le HWRPB. Celles-ci sont disposées aux emplacements appropriés en mémoire virtuelle juste avant que le contrôle du système ne soit transféré au noyau Linux.
Si vous envisagez d'utiliser Linux sur un système Alpha standard, un ensemble d'images précompilées "standard" est à votre disposition. Celles-ci ainsi que leurs sources et bien d'autres choses intéressantes sont disponibles à l'adresse suivante : ftp://gatekeeper.dec.com/pub/Digital/Linux-Alpha/Miniloader.
Le sous-répertoire images contient un répertoire par type de système standard (ex : AlphaPC64) adoptant les conventions de nomenclatures suivantes :
MILO
- Image de MILO, celle-ci peut être
démarrée de diverses manières ;fmu.gz
- Utilitaire de gestion de la mémoire flash ;MILO.dd
- Image d'une disquette bootable de MILO, pouvant
être reproduite grâce à rawrite.exe sous DOS ou dd
sous Linux.Le sous-répertoire test-images
contient un ensemble d'images
expérimentales sous la même forme que les
précédentes. Bien qu'expérimentales, ces images tendent
à contenir les dernières fonctionnalités.
La compilation de MILO s'effectue de manière indépendante du
noyau. Étant donné qu'il requiert des parties du noyau pour
fonctionner, vous devrez, en premier lieu, configurer un noyau qui corresponde
au système auquel MILO est destiné. Cela correspond à
attribuer le même numéro de version à MILO que celui du
noyau utilisé pour le construire. Ainsi MILO-2.0.25.tar.gz sera
compilé à l'aide de linux-2.0.25.tar.gz. MILO peut
être
compilé correctement avec une version plus récente du noyau, mais
avec celle-ci ce ne sera pas le cas. Étant donné que les
librairies dynamiques sont complètement fonctionnelles, il existe deux
versions des sources de MILO. Pour effectuer la compilation de MILO dans sa
version ELF vous devez premièrement extraire les sources standard puis
appliquer un patch à ces dernières, correspondant au
numéro de version du patch ELF. Je considérerai, dans la suite
de ce document, que les sources et les fichiers objets du noyau sont
situés dans le répertoire /usr/src/linux
, et que le
noyau a été correctement compilé à l'aide de la
commande make boot
.
Pour compiler MILO, allez dans le répertoire contenant les sources de
MILO et faites appel à la commande make
de la manière
suivante :
$ make KSRC=/usr/src/linux config
De même que pour la compilation du noyau, le système vous posera un certain nombre de questions.
Echo output to the serial port (MINI_SERIAL_ECHO) [y]
Il est utile d'utiliser le port série comme redirection de la fonction
du noyau printk ; celle-ci est effectuée vers le port
/dev/ttyS0
. Si vous pouvez (et souhaitez) le faire, entrez 'y', sinon
'n'. Toutes les versions précompilées de MILO utilisent le port
COM1 comme écho.
Use Digital's BIOS emulation code (not free) \
(MINI_DIGITAL_BIOS_EMU) [y]
Ce code est inclus en tant que bibliothèque de fonctions dont la
distribution est gratuite si elle est utilisée sur une machine à
base de processeur Alpha. Les sources n'en sont pas disponibles. Si vous
répondez 'n'
, l'émulation BIOS équivalente
freeware sera compilée. Sachez que vous ne pouvez pas encore choisir le
système de Digital utilisant le système ELF (la
bibliothèque n'est pas encore prête). Vous devrez donc
répondre 'n' à cette question.
Build PALcode from sources (Warning this is dangerous) \
(MINI_BUILD_PALCODE_FROM_SOURCES) [n]
Vous ne devrez utiliser cette option que si vous avez changé les sources du PALcode ; dans tous les autres cas, utilisez la version standard précompilée du PALcode fourni avec MILO.
Tout est désormais prêt, vous pouvez lancer la compilation :
$ make KSRC=/usr/src/linux
Lorsque la compilation s'est achevée avec succès, l'image de
MILO est écrite dans le fichier milo
. Il y a un grand nombre de
fichiers appelés milo.*
, ceux-ci devront être ignorés.
La manière la plus courante et la plus simple pour charger MILO est de le faire à partir de la console ARC. Cependant il est possible de réaliser cette opération de diverses manières :
La plupart, sinon la totalité, des systèmes à base d'Alpha AXP intègrent le firmware ARC pour Windows NT et cela est la méthode recommandée pour démarrer MILO et de surcroît Linux. Une fois que vous disposez de ce firmware et de la version adéquate de MILO, la méthode est complètement générique.
Le firmware ARC pour Windows NT offre un environnement dans lequel les programmes peuvent demander à celui-ci d'effectuer des opérations. Le programme OSLoader de Windows NT réalise exactement cela. Linload.exe est comparable mais beaucoup plus simple, il fait juste ce qui est nécessaire au chargement et à l'exécution de MILO. Il charge le fichier image adéquat en mémoire à l'adresse 0x00000000 puis il exécute les deux instructions swap-PAL puis PALcall à cette adresse. MILO, comme Linux, utilise un PALcode différent de celui utilisé par Windows NT, cela expliquant pourquoi l'instruction swap est nécessaire. MILO se reloge lui-même à l'adresse 0x200000 puis poursuit la réinitialisation du PALcode à cette nouvelle adresse.
Avant d'ajouter des options de démarrage pour Linux, vous devrez copier linload.exe et MILO à un endroit que la console ARC pourra lire. Dans l'exemple suivant on suppose que le démarrage s'effectue à partir d'une disquette au format DOS.
"Supplementary menu..."
"Supplementary menu"
choisissez "Set up the system..."
"Setup menu"
choisissez "Manage boot selection menu..."
"Boot selections menu"
choisissez "Add a boot selection"
"Floppy Disk 0"
"linload.exe"
dans la rubrique OSLOADERLinux
par exemple !)"Boot selections
menu"
: choisissez "Change a boot selection option"
et sélectionnez
le nom que vous avez choisi ci-dessus dans le but de l'éditer."OSLOADFILENAME"
puis
saisissez le nom de l'image MILO que vous souhaitez utiliser. Par exemple
noname.arc
ou milo
suivi de Entrée."Boot Selections menu"
à
l'aide de la touche Esc"Supplementary menu,
and save changes"
"Boot menu"
et vous pouvez alors essayer de
démarrer MILO.Après avoir réalisé cela, vous devriez avoir un 'boot selection' de la forme :
LOADIDENTIFIER=Linux
SYSTEMPARTITION=multi(0)disk(0)fdisk(0)
OSLOADER=multi(0)disk(0)fdisk(0)\linload.exe
OSLOADPARTITION=multi(0)disk(0)fdisk(0)
OSLOADFILENAME=\noname.arc
OSLOADOPTIONS=
Vous pouvez désormais démarrer MILO (puis Linux). Vous pouvez aussi charger linload.exe et MILO depuis un système de fichiers que Windows NT comprend. Par exemple NTFS ou DOS sur un disque dur.
Le contenu de la variable OSLOADOPTIONS
est passé à MILO
qui l'interprète comme une commande. Donc, pour démarrer Linux
sans attente, il faudra fournir une valeur du type :
boot sda2:vmlinux.gz root=/dev/sda2
Reportez-vous à la section L'interface utilisateur de MILO pour de plus amples renseignements sur les commandes disponibles.
Une autre méthode de démarrage de MILO via la console ARC (bien
que tortueuse) est d'appeler MILO fwupdate.exe
puis de choisir
l'option 'Upgrade Firmware'.
Avec l'apparition des machines de la série XLT, Digital a changé la console ARC pour ses systèmes Windows NT et l'a remplacée par l'AlphaBIOS. Cette nouvelle console offre l'avantage d'une plus grande convivialité. Ce changement d'interface implique un changement de procédure de configuration pour ceux qui souhaitent démarrer Linux pour Alpha dans ce contexte.
La première chose à faire est d'installer la dernière version de l'AlphaBIOS sur votre système. Celle-ci est disponible à l'adresse suivante : http://www.windows.digital.com/support/sysoft.htp.
Téléchargez le fichier ZIP, décompactez-le et installez-le comme suit :
"Upgrade AlphaBIOS"
;Une fois que l'AlphaBIOS est mis à jour, vous pouvez démarrer votre machine comme suit :
"Utilities->OS Selection Setup"
;"Boot Name"
entrez un nom de votre choix (ici Linux) puis
pressez Tab pour changer de champ ;"Boot File
is"
, passez au champ suivant ;"OS Path load file"
;À ce moment l'AlphaBIOS devrait afficher une boîte de dialogue angoissante indiquant : "Warning: Operating System Selection not valid!". Ne tenez pas compte de cette erreur (cela ne pose de problème qu'à NT), pressez Entrée pour valider.
Si la première partition de votre disque dur est un système de fichiers DOS de petite taille destiné au démarrage (ainsi que la procédure d'installation le recommande), lorsque Linux sera installé, vous devrez y copier linload.exe et MILO. Au démarrage suivant, vous devrez configurer votre firmware de telle sorte qu'il aille chercher ces programmes à l'emplacement voulu. Pour ce faire je vous recommande d'utiliser la démarche suivante :
"Utilities->OS Selection setup"
;"Boot File"
(device
pour les
versions en Anglais). Avec les flèches, choisissez la partition sur
laquelle résident linload.exe et MILO. Appuyez sur Entrée pour
valider."OS Options"
puis
spécifiez ici quelle est la ligne de commande à fournir à
MILO, par exemple : "boot sda2:vmlinux.gz". Pressez Entrée pour valider ;Cela fait que l'utilisation de Linux sur une plate-forme utilisant AlphaBIOS devient quasiment identique à celles utilisant la console ARC.
Les cartes d'évaluation (et souvent les cartes conçues à partir de leur exemple) proposent un logiciel appelé "debug monitor". Reportez-vous à la documentation de votre système avant d'envisager cette possibilité. Les systèmes suivants proposent cette fonctionnalité :
Sachez avant toute chose que, sur certaines anciennes versions, ce logiciel
n'inclut pas de gestionnaire écran / clavier. Vous devrez donc vous
préparer à connecter un terminal série à votre
système. Son interface est très simple et une commande d'aide
(help) documente une grande quantité de commandes. Les plus
intéressantes de ces commandes incluent les mots boot
et load
.
Le debug monitor peut charger une image à partir du réseau
(netboot) ou d'une disquette (flboot). Dans tous les cas, l'image doit
être chargée à l'adresse 0x200000 (utilisez la commande
bootadr 200000
).
Si l'image se trouve sur une disquette (notez que le seul format de disquette reconnu est DOS) vous devrez utiliser la commande suivante :
AlphaPC64> flboot <MILO-image-name>
D'après les informations dont je dispose, seul l'AXPpci33 propose la reconnaissance de secteur d'amorçage de type failsafe floppy (Section AXPpci33 (Noname)).
Si vous ne disposez pas d'une image MILO standard précompilée, vous devrez confectionner une disquette au format SRM. Une fois MILO compilé, vous devrez exécuter les instructions suivantes sous Digital Unix :
fddisk -fmt /dev/rfd0a
cat mboot bootm > /dev/rfd0a
disklabel -rw rfd0a lrx231 mboot bootm
Ou bien les commandes suivantes sous Linux :
cat mboot bootm > /dev/fd0
Si vous disposez d'une image MILO précompilée vous pourrez construire la disquette de la manière suivante :
dd if=MILO.dd of=/dev/fd0
Il existe certains systèmes qui permettent d'intégrer MILO directement dans la PROM Flash, permettant ainsi le démarrage direct de Linux (sans avoir à utiliser de console du type ARC) :
La console SRM (abréviation de System Reference
Manual) ne reconnaît aucun système de fichiers ni même
aucune partition disque. Elle s'attend tout simplement à trouver le
logiciel d'amorçage à une position physique démarrant
à un emplacement donné (il s'agit d'un offset ou position
relative). L'information décrivant ce logiciel d'amorçage (sa
taille et sa position relative) est décrite dans le premier bloc de 512
octets du disque. Pour charger MILO depuis la SRM vous devez
générer cette structure de données en bonne et due forme
sur un support que la console peut atteindre. Cela explique l'existence des
fichiers mboot
et bootm
.
Pour charger MILO depuis un périphérique de démarrage,
compilez mboot
et bootm
puis écrivez-les sur disque à
l'aide de la commande suivante :
$ cat mboot bootm > /dev/fd0
ou bien téléchargez une image appropriée de MILO
à partir d'un site Web, puis utilisez soit RAWRITE.EXE
soit
dd
pour l'inscrire sur disque.
Cela fait, vous pouvez envisager de démarrer MILO depuis la console SRM, puis d'utiliser une de ses nombreuses commandes pour démarrer. Par exemple, pour démarrer depuis une disquette, vous devrez effectuer l'opération suivante :
>>>boot dva0
(boot dva0.0.0.0.1 -flags 0)
block 0 of dva0.0.0.0.1 is a valid boot block
reading 621 blocks from dva0.0.0.0.1
bootstrap code read in
base = 112000, image-start = 0, image-bytes 4da00
initializing HWRPB at 2000
initializing page table at 104000
initializing machine state
setting affinity to the primary CPU
jumping to bootstrap code
MILO Stub: V1.1
Unzipping MILO into position
Allocating memory for unzip
####...
Les systèmes suivants sont compatibles avec la console SRM :
La carte Noname est capable de charger MILO depuis une console ARC ou SRM ou depuis une disquette failsafe. Un utilitaire de gestion de la mémoire PROM flash, exécutable depuis MILO permet de copier ce dernier en mémoire flash. En revanche, nous tenons à vous avertir que cette manipulation est très périlleuse car la Noname ne comportant que 256 Ko de mémoire flash, elle ne peut contenir qu'une image en PROM. Si l'image que vous copiez en flash est corrompue, votre système ne démarrera plus.
La méthode de démarrage des cartes Noname est contrôlée par les jumpers J29 et J28. Ils sont disposés comme suit :
Numéro de broche 4
J29 2 x x x 6
1 x x x 5
J28 2 x x x 6
1 x x x 5
3
Les deux options de configuration qui nous intéressent sont sur J28, dont les plots 1-3, qui démarrent la console depuis la flash et J29, dont les plots 1-3 permettent de démarrer la console depuis une disquette. La seconde option est celle dont vous avez besoin pour démarrer MILO la première fois. Une fois que les jumpers auront été configurés pour l'utilisation d'une disquette de démarrage, insérez la disquette contenant MILO en version bootable dans le lecteur puis relancez l'ordinateur. En l'espace de quelques secondes (après l'extinction de la lumière du lecteur), vous devrez constater que l'écran passe du noir au blanc et y lire les informations relatives à l'exécution de MILO. Si les aspects techniques vous intéressent, sachez que la carte Noname charge le contenu de la disquette à l'adresse 0x104000 et les images provenant de la mémoire flash en 0x100000. Pour cette raison, MILO intègre son PALcode à l'adresse 0x200000. Lors de son démarrage, il se reloge lui-même à l'adresse correcte.
L'AlphaPC64 est doté, en standard, du Firmware Windows NT (Section Chargement de MILO depuis la console ARC pour Windows NT), de la console SRM (Section Démarrage de MILO par le biais de la console SRM) et du Debug Monitor (Section Démarrage de MILO depuis le debug monitor des cartes d'évaluation). Ces images sont en flash et il reste de la place dans cette mémoire pour ajouter l'image de MILO de manière à pouvoir démarrer MILO directement depuis la PROM. Un utilitaire de gestion de la mémoire flash est disponible sous MILO, ainsi il est possible d'intégrer MILO à la mémoire flash lorsque celui-ci s'exécute (Section Exécution du gestionnaire de mémoire flash). Ce procédé accepte l'utilisation de variables d'environnement MILO.
Il est possible de choisir parmi les options de démarrage (ARC, SRM, MILO) en utilisant une combinaison de jumpers et de définir des options de démarrage qui seront sauvegardées dans la NVRAM de l'horloge TOY ("CMOS").
Il s'agit du jumper J2 ; les bits 6 et 7 ont la fonction suivante :
Donc, si le SP Bit 7 est ouvert, le Debug Monitor sera
exécuté car il est toujours
positionné en
première place dans la PROM. Et si le SP Bit 7 est fermé, l'image
exécutée sera celle définie dans l'horloge système
(TOY). L'ARC, le Debug Monitor et MILO acceptent cette option ; il faut,
cependant, être très prudent lors de son utilisation. Par exemple,
vous ne pouvez pas définir d'option qui vous permettra de
démarrer MILO au démarrage suivant : lors de l'utilisation de la
console ARC, cette dernière vous permet de passer en mode Debug
Monitor ou ARC lors du démarrage, mais elle ne permet pas de passer
en mode MILO.
Pour inclure MILO dans la mémoire flash via le Debug Monitor, vous aurez besoin d'une image adéquate (dite flashable). La commande de compilation est : make MILO.rom, mais vous pouvez aussi construire une image rom à l'aide de l'outil makerom du Debug Monitor.
> makerom -v -i7 -1200000 MILO -o mini.flash
(tapez makerom pour comprendre ce que signifient les paramètres, '7' représente un identificateur d'image flash utilisé par la SROM et -l200000 indique l'adresse de chargement de cette image).
Pour charger cette image en mémoire, utilisez une des commandes flload, netload, ... à l'adresse 0x200000, puis insérez l'image en mémoire flash de la manière suivante :
AlphaPC64> flash 200000 8
200000 est l'adresse de chargement et 8 est le numéro du segment de mémoire à utiliser. Il y a 16 segments de 64 Ko (soit 512 Ko) dans la SROM. (Le Debug Monitor est au segment 0 et l'ARC au segment 4).
Définissez l'image que la SROM va exécuter au démarrage en donnant une valeur à la variable TOY bootopt :
AlphaPC64> bootopt 131
(131 indique la 3ème image, 129 la 1ère image, 130 la 2ème, etc...)
Éteignez la machine, mettez le jumper 7 en place et redémarrez la machine. Vous devrez alors pouvoir observer MILO s'exécuter. Félicitations ! Vous pouvez remonter la machine (enfin !). Si ce n'est pas le cas, conservez le tournevis pour plus tard, et enlevez à nouveau le jumper 7 pour redémarrer en mode Debug Monitor, reprenez les étapes les unes à la suite des autres, méthodiquement, en prenant garde de ne rien oublier.
La carte EB66+, comme toutes les cartes d'évaluation de Digital, contient le Debug Monitor, et de ce fait celui-ci va nous permettre de charger MILO. Souvent (mais pas toujours), les cartes dérivées des cartes d'évaluation possèdent ce logiciel. Habituellement, ces cartes contiennent la console ARC. Un utilitaire de gestion de la mémoire flash est disponible sous MILO, ainsi il est possible d'intégrer MILO à la mémoire flash lorsque celui-ci s'exécute (Section Exécution du gestionnaire de mémoire flash). Ce système accepte les variables d'environnement MILO.
Ces cartes disposent de plusieurs images en mémoire flash contrôlées par jumper. Les deux bancs de jumpers sont J18 et J16 et se situent au centre bas de la carte (considérant que le processeur Alpha se situe en haut de la carte). Vous pouvez choisir l'option de démarrage par ces jumpers (et MILO lorsqu'il est chargé) ainsi qu'une variable d'environnement sauvegardée dans la mémoire non volatile (NVRAM TOY).
jumper 7-8 Fermé signifie qu'il faut utiliser l'image désignée par la variable bootopt, lorsqu'il est ouvert le Debug Monitor est exécuté.
Pour le reste de la configuration, reportez vous au paragraphe précédent traitant de l'AlphaPC64 (Section AlphaPC64 (Cabriolet)).
Cette carte est très similaire à l'AlphaPC64 excepté qu'elle ne contient pas de mémoire flash utilisable par MILO. Cette carte possède deux ROMS, l'une contenant l'ARC, l'autre contenant le Debug Monitor.
L'Aspen Alpine, quant à elle, ne contient qu'une ROM où est gravée la console ARC.
C'est une station ultra compacte à base d'AXP 21066 qui intègre un sous-système graphique TGA (21030). De plus il n'y a de place que pour une carte graphique PCI demi-hauteur. Elle utilise la console ARC (Windows NT) et il est donc recommandé de l'utiliser pour le démarrage de MILO (Section Chargement de MILO depuis la console ARC pour Windows NT).
La carte EB164, comme toutes les cartes d'évaluation de Digital, contient le Debug Monitor, et de ce fait celui-ci va nous permettre de charger MILO. Souvent (mais pas toujours) les cartes dérivées des cartes d'évaluation possèdent ce logiciel. Habituellement, ces cartes contiennent la console ARC. Un utilitaire de gestion de la mémoire flash est disponible sous MILO, ainsi il est possible d'intégrer MILO à la mémoire flash lorsque celui-ci s'exécute (Section Exécution du gestionnaire de mémoire flash). Ce système accepte les variables d'environnement MILO. La console SRM est, de plus, disponible (Section Démarrage de MILO par le biais de la console SRM).
Ces cartes disposent de plusieurs images en mémoire flash contrôlées par jumper. Le banc de deux jumpers s'appelle J1 et se situe en bas à gauche de la carte (considérant que le processeur Alpha se situe en haut de la carte). Vous pouvez choisir l'option de démarrage par ces jumpers (et MILO lorsqu'il est chargé) ainsi qu'une variable d'environnement sauvegardée dans la mémoire non volatile (NVRAM TOY).
jumper SP-11 de J1 fermé signifie qu'il faut utiliser l'image désignée par la variable bootopt ; lorsqu'il est ouvert le Debug Monitor est exécuté.
Pour le reste de la configuration, reportez-vous au paragraphe précédent traitant de l'AlphaPC64 (Section AlphaPC64 (Cabriolet)).
La carte PC164, comme toutes les cartes d'évaluation de Digital, contient le Debug Monitor, et de ce fait celui-ci va nous permettre de charger MILO. Souvent (mais pas toujours) les cartes dérivées des cartes d'évaluation possèdent ce logiciel. Habituellement, ces cartes contiennent la console ARC. Un utilitaire de gestion de la mémoire flash est disponible sous MILO, ainsi il est possible d'intégrer MILO à la mémoire flash lorsque celui-ci s'exécute (Section Exécution du gestionnaire de mémoire flash). Ce système accepte les variables d'environnement MILO. La console SRM est, de plus, disponible (Section Démarrage de MILO par le biais de la console SRM).
Ces cartes disposent de plusieurs images en mémoire flash contrôlées par jumpers. Le banc principal de jumpers s'appelle J30, il contient les jumpers de configuration. Le jumper CF6 fermé signifie que le système démarrera le Debug Monitor, il est par défaut ouvert.
Pour le reste de la configuration, reportez-vous au paragraphe précédent traitant de l'AlphaPC64(Section AlphaPC64 (Cabriolet)).
Le XL266 est un des systèmes connus sous le nom d'Avanti. Il possède une carte fille sur laquelle résident le processeur Alpha et le cache qui se connecte à la carte mère. Cette carte remplace une carte fille Pentium équivalente.
Certains de ces systèmes sont vendus avec la console SRM, mais certains autres ne sont livrés qu'avec la console ARC (Section Chargement de MILO depuis la console ARC pour Windows NT).
Voici une liste compatible avec cette série :
Note : Le système que j'utilise pour développer et tester MILO est un XL266 ; de ce fait, c'est le seul sur lequel je peux garantir un fonctionnement correct. Cela dit les autres systèmes sont, techniquement, équivalents. Ils possèdent les mêmes chipsets et les mêmes mécanismes d'interruptions.
Il s'agit d'un système à base de processeur 21066 à 233 Mhz.
Après avoir correctement installé MILO (Abrév. de MIniLOader) vous devrez obtenir l'invite de commande de MILO. Il y a une interface de commandes très simple que vous pouvez utiliser dans le but de démarrer une image Linux particulière. Utilisez la commande help pour obtenir une description sommaire des commandes.
Probablement la commande la plus utile de MILO.
MILO> help
MILO command summary:
ls [-t fs] [dev:[dir]]
- List files in directory on device
boot [-t fs] [dev:file] [boot string]
- Boot Linux from the specified device and file
run [-t fs] dev:file
- Run the standalone program dev:file
show - Display all known devices and file systems
set VAR VALUE - Set the variable VAR to the specified VALUE
unset VAR - Delete the specified variable
reset - Delete all variables
print - Display current variable settings
help [var] - Print this help text
Devices are specified as: fd0, hda1, hda2, sda1...
Use the '-t filesystem-name' option if you want to use
anything but the default filesystem ('ext2').
Use the 'show' command to show known devices and filesystems.
Type 'help var' for a list of variables.
Note : la commande bootopt
n'apparaît que pour les
systèmes AlphaPC64 (et équivalents).
Périphériques. Jusqu'à ce que vous utilisiez
une commande qui nécessite l'utilisation d'un des
périphériques, aucune initialisation n'est réalisée
sur ces derniers. La première commande show
, ls
, boot
ou
run
provoquera l'initialisation des périphériques. Les
pilotes de périphériques portent exactement les mêmes noms
que ceux de Linux. Donc le premier disque IDE sera appelé hda et la
première partition sera hda1. Utilisez la commande show
pour
obtenir une liste des périphériques disponibles.
Systèmes de fichiers. MILO est compatible avec trois
différents types de systèmes de fichiers : MSDOS, EXT2 et
ISO9660. À partir du moment oû un périphérique est
disponible pour lui, MILO est à même de charger et
d'exécuter n'importe quelle image disponible. Le système de
fichiers par défaut est EXT2
. Toutes les commandes utilisant les
systèmes de fichiers permettent d'en préciser le type par le
biais de l'option -t filesystem. Donc si vous souhaitez obtenir une liste du
contenu d'un CDROM il suffit d'entrer la commande :
MILO> ls -t iso9660 scd0:
Variables. MILO contient quelques variables qui aident au processus de démarrage. Si vous démarrez à partir de la console ARC, MILO utilisera les variables d'environnement définies par ce firmware. Pour certains systèmes (tels que l'AlphaPC64), MILO dispose de son propre jeu de variables qui ne changent pas d'un démarrage à l'autre. Ces variables sont :
MILO> help var
Variables that MILO cares about:
MEMORY_SIZE - System memory size in megabytes
BOOT_DEV - Specifies the default boot device
BOOT_FILE - Specifies the default boot file
BOOT_STRING - Specifies the boot string to pass to the kernel
SCSIn_HOSTID - Specifies the host id of the n-th SCSI controller.
PCI_LATENCY - Specifies the PCI master device latency
AUTOBOOT - If set, MILO attempts to boot on powerup
and enters command loop only on failure.
AUTOBOOT_TIMEOUT - Seconds to wait before auto-booting on powerup.
ATTENTION à l'utilisation de la variable AUTOBOOT sans définir de valeur délai (AUTOBOOT_TIMEOUT) car MILO démarrera après avoir attendu 0 seconde. Ce n'est peut-être pas ce que vous souhaitez.
PCI_LATENCY représente le nombre de cycles PCI qu'un périphérique fonctionnant en bus master se réserve lorsqu'il acquiert le contrôle du bus. La valeur par défaut est de 32 et la maximum de 255. Définir une valeur élevée revient à dire que chaque fois qu'un périphérique prend le contrôle du bus PCI, il transfèrera plus de données. Cependant cela signifie aussi qu'un périphérique devra attendre plus longtemps pour obtenir le contrôle du bus.
La commande boot
charge et démarre un noyau Linux à
partir d'un périphérique. Vous aurez besoin d'avoir un disque
contenant ce noyau (SCSI, IDE, disquette dans un format reconnu par MILO). Ces
images peuvent être compressées à l'aide de gzip ; les
premières versions de MILO reconnaissaient ces fichiers à l'aide
de leur extension '.gz', tandis que les plus récentes font appel
à la signature du fichier.
Il est important de retenir que la version de MILO ne nécessite pas de correspondance avec celle du noyau Linux que vous souhaitez charger. Vous démarrez Linux avec la commande suivante :
MILO> boot [-t file-system] device-name:file-name \
[[boot-option] [boot-option]...]
device-name
représente le nom du périphérique que
vous souhaitez utiliser, file-name
le nom de fichier de l'image à
charger en mémoire. Tous les arguments spécifiés par la
suite sont directement transmis au programme exécuté (ici le
noyau Linux).
Si vous installez Linux Red Hat pour Alpha vous devrez spécifier un périphérique racine (root device) et autres options :
MILO> boot fd0:vmlinux.gz root=/dev/fd0 load_ramdisk=1
MILO contient automatiquement les périphériques en mode bloc
configurés dans vmlinux. J'ai testé le pilote de disquette, de
disque IDE ainsi qu'un certain nombre de pilotes SCSI (par exemple le NCR810),
et ceux-ci fonctionnent bien. Il est de même important d'attribuer un ID
SCSI raisonnable à votre contrôleur SCSI. Par défaut MILO
l'initialisera à la valeur maximale (7) qui, en principe, devrait
fonctionner correctement. Néanmoins, si vous le souhaitez, vous pouvez
spécifier l'ID SCSI de votre N-ième contrôleur SCSI en
définissant la variable SCSI
n_HOSTID
; par exemple pour
préciser que l'ID SCSI du contrôleur numéro 0 est 7
utilisez la commande suivante :
setenv SCSI0_HOSTID 7
Vous pouvez vouloir redémarrer Linux à l'aide de la commande
shutdown -r now
. Dans ce cas, le noyau Linux repasse le contrôle
à MILO (par une instruction HALT CallPAL entrypoint). MILO laisse une
version de lui-même compressée en mémoire pour cette seule
raison et détecte que le système est redémarré par
le biais du HWRPB (Hardware Restart Parameter Block). Dans ce cas vous pouvez
edémarrer à l'aide de la même commande qui vous a
servi au démarrage précédent. Il y a un
délai de 30 secondes qui vous permet d'interrompre ce processus et de
démarrer n'importe quel autre noyau de n'importe quelle autre
manière.
Pour les systèmes utilisant la mémoire flash comme les
AlphaPC64, EB164 et EB66+, il existe différentes options de
démarrage. Celles-ci sont modifiables à l'aide de la commande
bootopt
. Cette commande a un unique argument : il s'agit d'un nombre
décimal qui représente le type d'image à exécuter
au prochain redémarrage de la machine (Allumage / Extinction ou Reset).
La valeur 0 active le Debug Monitor, 1 active la console ARC.
Ce chiffre correspond en fait à la N-ième image présente
dans la PROM. Afin d'indiquer que l'action à effectuer est le
démarrage, il faut ajouter 128 à ce chiffre pour obtenir la
valeur à transmettre à bootopt
. Vous aurez donc la commande
suivante (sachant que MILO est la 3ème image en PROM) :
MILO> bootopt 131
Note :
Soyez très vigilant avec cette commande, une bonne
règle est de ne jamais utiliser la valeur 0 (Debug Monitor), mais
utilisez plutôt le système des jumpers pour obtenir ce
résultat.
La commande run
est utilisée pour exécuter le
gestionnaire de mémoire flash. Avant de démarrer, vous devrez
disposer d'un périphérique accessible par MILO contenant le
programme updateflash. Celui-ci (comme vmlinux) peut être
compressé avec gzip. Vous devez exécuter ce programme
à l'aide de la commande suivante :
MILO> run fd0:fmu.gz
Une fois chargé et initialisé, le gestionnaire de
mémoire flash vous donnera quelques informations concernant le
périphérique flash, et vous proposera une invite de
commandes. À nouveau la commande help
est salvatrice.
Linux MILO Flash Management Utility V1.0
Flash device is an Intel 28f008SA
16 segments, each of 0x10000 (65536) bytes
Scanning Flash blocks for usage
Block 12 contains the environment variables
FMU>
Notez
que sur les systèmes qui permettent la sauvegarde de
variables d'environnement et qui disposent de plus d'un bloc de mémoire
flash (par exemple l'AlphaPC64), le gestionnaire de mémoire
flash cherchera un bloc disponible pour la sauvegarde des variables
d'environnement de MILO. Si un tel bloc existe, le gestionnaire de
mémoire flash vous indiquera son emplacement. Dans le cas
contraire, vous devrez utiliser la commande environment
pour
définir un bloc et l'initialiser. Dans l'exemple ci-dessus le bloc
numéro 12 de la mémoire flash renferme les variables
d'environnement de MILO.
FMU> help
FMU command summary:
list - List the contents of flash
program - program an image into flash
quit - Quit
environment - Set which block should contain the environment variables
bootopt num - Select firmware type to use on next power up
help - Print this help text
FMU>
Note : les commandes environment
et bootopt
ne sont
disponibles que sur les systèmes EB66+, EB164, PC164 et AlphaPC64
(ainsi que leur clones).
La commande ''list'' affiche les informations sur l'utilisation de la mémoire flash. Pour les systèmes disposant de plus d'un bloc, l'usage de chaque bloc est affiché.
FMU> list
Flash blocks: 0:DBM 1:DBM 2:DBM 3:WNT 4:WNT 5:WNT 6:WNT 7:WNT 8:MILO
9:MILO 10:MILO 11:MILO 12:MILO 13:U 14:U 15:WNT
Listing flash Images
Flash image starting at block 0:
Firmware Id: 0 (Alpha Evaluation Board Debug Monitor)
Image size is 191248 bytes (3 blocks)
Executing at 0x300000
Flash image starting at block 3:
Firmware Id: 1 (Windows NT ARC)
Image size is 277664 bytes (5 blocks)
Executing at 0x300000
Flash image starting at block 8:
Firmware Id: 7 (MILO/Linux)
Image size is 217896 bytes (4 blocks)
Executing at 0x200000
FMU>
Le gestionnaire de mémoire flash contient une copie compressée d'une image flash de MILO. Cette commande vous permet de sauvegarder cette image dans la PROM. La commande vous permet de revenir en arrière, mais avant de l'utiliser vous devriez utiliser la commande list pour définir où il faut mettre MILO. Si MILO est déjà dans la mémoire flash, le gestionnaire de mémoire flash vous demandera si vous souhaitez remplacer la version actuellement en PROM.
FMU> program
Image is:
Firmware Id: 7 (MILO/Linux)
Image size is 217896 bytes (4 blocks)
Executing at 0x200000
Found existing image at block 8
Overwrite existing image? (N/y)? y
Do you really want to do this (y/N)? y
Deleting blocks ready to program: 8 9 10 11
Programming image into flash
Scanning Flash blocks for usage
FMU>
!!! IMPORTANT !!! Attendez que cela soit fini avant d'éteindre votre ordinateur.
!!! IMPORTANT !!! Je n'insisterai jamais assez sur le fait que vous devez être extrêmement prudent lorsque vous effectuez ce genre de manipulation. Une très bonne règle à respecter est de ne jamais effacer le Debug Monitor.
Cette commande détermine quel est le bloc qui recevra les variables d'environnement.
Il s'agit de la même commande que celle de MILO (Section La commande ''bootopt'').
Cette commande n'a que peu de sens, car la seule manière possible pour se retrouver sous MILO est de redémarrer le système.
Malheureusement la perfection n'étant pas de ce monde, il existe des restrictions auxquelles il faut se plier.
MILO n'est pas conçu pour charger d'autres systèmes d'exploitation que Linux, cependant il peut charger et exécuter des images dont l'exécution est possible au même emplacement mémoire que Linux (c'est à dire : 0xFFFFFC0000310000). C'est ce qui permet au gestionnaire de mémoire flash de fonctionner.
Les sources du PALcode contenues dans miniboot/palcode/
toto
sont correctes, mais ce PALcode est problématique lorsqu'il est
compilé avec la dernière version de gas
.
Problème qui n'existe pas avec l'ancien exécutable gas fourni
avec les cartes d'évaluation. J'essaie actuellement de trouver
quelqu'un capable de résoudre ce problème. Pour l'instant, j'ai
fourni un PALcode précompilé pour les cartes supportant MILO et
David Mosberger-Tang a une version de gas corrigée sur son site ftp.
Voici un ensemble de problèmes courants que certaines personnes ont rencontrés ; vous trouverez, ensuite, leur solution.
Lecture de disques DOS depuis le Debug Monitor.
Quelques versions du Debug Monitor (pré-version 2.0) ont
un problème avec le gestionnaire DOS généré
à partir de Linux. Ce problème se manifeste de la manière
suivante : le Debug Monitor semble lire correctement les premiers
secteurs de la disquette, puis affiche, en boucle, le message "Bad Sectors".
Cela vient apparemment du fait qu'il existe une différence entre le
système de fichiers DOS tel que l'attend le Debug Monitor et
l'implémentation de DOSFS sous Linux. Afin de résoudre ce
problème, utilisez un PC sous DOS pour confectionner la disquette (et
non pas Linux). Par exemple, si le chargement du fichier MILO.cab
ne
fonctionne pas, effectuez les opérations suivantes sur une machine DOS :
copy a:MILO.cab c:
copy c:MILO.cab a:
del c:MILO.cab
Et réessayez de démarrer depuis cette disquette. Cela devrait résoudre le problème.
Milo affiche une série de O>
et n'accepte pas de
commandes.
Ceci arrive quand MILO a été compilé pour utiliser
COM1 comme console secondaire. Dans ce cas, MILO reproduit l'affichage sur COM1
et accepte des saisies depuis ce dernier. C'est excellent pour
déboguer, mais pas tant que ça si vous avez un
périphérique autre qu'un terminal série connecté.
Si cela arrive, déconnectez le périphérique attaché
au port COM1 ou mettez-le hors tension jusqu'à ce que le noyau Linux ait
démarré. À ce stade tout devrait fonctionner correctement.
MILO se plaint de ce que l'image du noyau possède un mauvais 'magic number'.
Les anciennes versions de MILO ne sont pas compatibles avec les fichiers objets de type ELF. Cela pourrait être la source de vos ennuis. Si c'était le cas, passez à la version la plus récente que vous pourrez trouver. Toutes les versions à partir de la 2.0.20 sont compatibles avec les objets ELF. D'autre part il se pourrait que l'image de MILO soit corrompue, ou qu'il faille ajouter l'extension '.gz' au nom du fichier noyau.
MILO affiche "...turning on virtual addressing and jumping to the Linux Kernel" puis rien ne se passe.
Une des causes possibles est que l'image du noyau est configurée de manière incorrecte ou qu'elle a été produite pour un autre type de machine Alpha. Une autre possibilité est que la carte vidéo est une TGA (ZLXp) et que le noyau est configuré pour utiliser le VGA (ou l'inverse). Il est utile de compiler le noyau pour qu'il affiche sa console sur COM1 (echo console) et donc de pouvoir, dans ce cas, connecter un terminal série ou alors d'essayer le noyau qui était livré avec votre distribution Linux.
MILO ne reconnaît pas les périphériques SCSI.
L'image standard de MILO comporte autant de pilotes de
périphériques qu'il en existe de stables pour Alpha (au moment de
la rédaction de ce manuel il contient les pilotes pour : NCR810, QLOGIC
ISP, Buslogic et Adaptec 294x/394x). Si votre carte n'est pas supportée
c'est peut-être que le pilote n'est pas encore suffisamment stable sur
plate-forme Alpha. Vous pouvez obtenir la liste des périphériques
SCSI supportés par une image MILO avec la commande show
.
Je souhaiterais remercier :
Beaucoup de choses restent à faire sous MILO ; s'il y a quelque chose que vous souhaitez faire ou ajouter vous-même, faites-le moi savoir : david.rusling@reo.mts.dec.com, afin de ne pas développer deux fois la même chose.
Pour finir, un grand merci à Digital pour le développement d'un si merveilleux processeur (et pour le salaire qu'ils me versent afin de le faire).