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.