Lorsque vous allumez votre ordinateur, celui-ci se teste lui-même pour s'assurer que tous ses composants sont en état de marche. Cela s'appelle l'auto-test à l'allumage (Power On Self Test - POST). Ensuite, un programme nommé chargeur d'amorçage (bootstrap loader), situé dans le BIOS en ROM, recherche un secteur d'amorçage. Un secteur d'amorçage est le premier secteur d'un disque et contient un petit programme capable de charger un système d'exploitation. Les secteurs d'amorçage sont marqués par un nombre magique (i.e. une valeur fixe caractéristique) 0xAA55 = 43603 à l'octet 0x1FE = 510. Ce sont les deux derniers octets du secteur. C'est de cette façon que la partie matérielle peut déterminer s'il s'agit d'un secteur d'amorçage ou pas.
Le chargeur d'amorçage a une liste d'endroits où chercher un secteur d'amorçage. Ma vieille machine regarde d'abord sur le lecteur de disquette, puis sur le disque dur. Les machines modernes peuvent aussi rechercher un secteur d'amorçage sur un CD-ROM. S'il trouve un secteur d'amorçage, il le charge en mémoire et passe ainsi le contrôle au programme qui charge le système d'exploitation en mémoire. Sur un système Linux classique, ce programme sera la première étape du chargeur de Lilo. Il existe malgré tout plusieurs manières différentes de configurer l'amorçage de votre système. Voir le Guide de l'utilisateur de Lilo pour plus de détails. Voir la section liens sur Lilo pour l'url.
Évidement, il y a bien plus à dire sur ce que fait la partie matérielle du PC. Mais ce n'est pas l'objet de ce document. Lisez un des nombreux livres traitant de l'architecture matérielle des PC.
La machine stocke des informations sur son propre état dans son CMOS. Cela inclut la RAM et les types de disques installés dans le système. Le BIOS de la machine contient un programme de configuration, Setup, qui vous permet de modifier ces informations. Pour savoir comment y accéder, regardez attentivement les messages qui apparaissent sur votre écran lorsque vous mettez votre machine sous tension. Sur ma machine, il faut appuyer sur la touche Suppr avant qu'elle ne commence à charger le système d'exploitation.
Une bonne façon d'en apprendre plus sur la partie matérielle d'un PC est de monter une machine à partir de composants d'occasion. Prenez au moins un 386 pour pouvoir y installer Linux facilement. Cela ne vous coûtera pas très cher. Posez la question autour de vous, quelqu'un pourrait bien vous donner une partie des pièces qu'il vous faut.
Allez voir Unios, (ils avaient une page sur http://www.unios.org, mais elle a disparu) et téléchargez, compilez et fabriquez votre disquette amorçable. Ce n'est qu'un programme d'amorçage affichant « Hello World! », contenant à peine plus de 100 lignes d'assembleur. Il serait intéressant de le voir converti en un format exploitable par l'assembleur as de GNU.
Ouvrez l'image de la disquette d'amorçage pour Unios avec un éditeur hexadécimal. Cette image fait 512 octets de long. Exactement la longueur d'un secteur. Trouvez-y le nombre magique 0xAA55. Faites la même chose pour une disquette amorçable de votre propre ordinateur.
Vous pouvez utiliser la commande dd pour la copier dans un fichier : dd if=/dev/fd0 of=secteur.d.amorcage. Faites très attention à paramétrer if (fichier source) et of (fichier destination) comme il faut !
Essayez d'en extraire le code source du chargeur de Lilo.
Les notions fondamentales d'Unix et d'Internet, par Eric S. Raymond, et particulièrement la section 3, Que se passe-t-il lorsque vous allumez un ordinateur ?
Le premier chapitre du Guide de l'utilisateur de Lilo donne une excellente explication des partitions de disques sur PC et de l'amorçage. Voir la section liens sur Lilo pour l'url.
Peter Norton Programmer's Guide to the IBM PC & PS/2 (Guide Peter Norton du programmeur pour l'IBM PC et PS/2), par Peter Norton et Richard Wilton, Microsoft Press, 1988. Il existe un nouveau livre Norton, qui a l'air bien, mais que je ne peux m'offrir pour le moment.
Un des nombreux ouvrages disponibles sur la manière de faire évoluer son PC.