|
|
Conception du démarrage du CD Source Mage
Benoît Papillault, 05/10/2004
Présentation
On souhaite construire un CD-ROM bootable (sur plateformes x86 et ppc
au moins). Pour cela, on va utiliser syslinux (x86) et yaboot
(ppc). Ces deux outils permettent de charger un noyau linux ainsi
qu'un ramdisk initial. Cet article va présenter les objectifs de ce
CD-ROM (à quoi il peut servir) et une description générale des moyens
mis en oeuvre pour y parvenir avec quelques explications concernant
des points techniques
Objectifs
On se fixe trois objectifs:
- L'objectif premier est d'utiliser le CD-ROM pour installer une
distribution SourceMage. Cela signifie que le CD-ROM va être utilisé
comme système de fichiers racine.
- Le second objectif est d'utiliser le CD-ROM comme CD-ROM de
secours pour démarrer une distribution déjà installée sur le
disque. L'emplacement de cette distribution sera précisé par le
paramètre
root= sur la ligne de démarrage.
- Le troisième objectif est une variante du second. Dans certains
cas, il se peut que le noyau utilise nécessite des modules
additionnels pour pouvoir monter le système de fichiers racine. Pour
cela, on utilisera alors un ramdisk initial.
Le fonctionnement d'un ramdisk initial
Le fonctionnement d'un ramdisk initial est fort simple, mais quelques
détails importants sont à préciser. Tout d'abord, un ramdisk est un
fichier (compressé ou non avec gzip ) qui contient un
système de fichiers (ext3, ...). L'intérêt d'un ramdisk initial est
qu'il est chargé en mémoire directement par le bootloader et non par
le noyau linux. Un tel fichier peut être utilisé de deux façons:
- Si la ligne de démarrage comporte
root=/dev/ram0 .
Dans ce cas, le ramdisk est utilisé exactement comme un système de
fichier racine et l'exécutable /sbin/init présent dans
le ramdisk sera lancé en tant que processus numéro 1 (PID). Cette
propriété permet de monter un autre système de fichier, puis de
basculer vers ce nouveau système de fichiers comme si le
nouveau système de fichiers était le système de fichiers racine.
mount /dev/hda2 /mnt
cd /mnt
pivot_root . initrd
# mount /dev if needed
exec chroot . /sbin/init "$@" < /dev/console > /dev/console 2>&1
- Si la ligne de démarrage ne comporte pas
root=/dev/ram0 .
Dans ce cas, le ramdisk est utilisé temporairement comme un
système de fichiers racine et l'exécutable /linuxrc
présent dans le ramdisk sera lancé. Son numéro de processus (PID)
sera différent de 1. Lorsque l'exécution de /linuxrc se
termine, le vrai système de fichiers racine est monté et
/sbin/init est lancé.
Implémentation
Afin de réaliser ces objectifs, le bootloader comportera trois entrées :
- install
Ceci correspond au premier objectif. Le ramdisk sera chargé avec
root=/dev/ram0 . Grâce à devfs , nous
aurions pu utilisé root=/dev/cdroms/cdrom0 , mais ceci
ne fonctionnera pas dans un système comportant plusieurs CD-ROM
puisque seul le premier sera utilisé. Ainsi, le ramdisk s'occupera
de scanner tout les CD-ROM présent et détectera le CD-ROM SourceMage
grâce à la présence du fichier /etc/sourcemage_version .
- linux root=/dev/hda1
Ceci correspond au second objectif. Aucun ramdisk n'est
chargé. L'utilisateur doit obligatoirement ajouté root=
sur la ligne de commande.
- initrd root=/dev/hda1
Ceci correspond au troisième objectif. Le ramdisk est ici utilisé
uniquement pour charger les modules nécessaires pour accéder
au système de fichiers racine. Tout comme pour la seconde entrée,
l'utilisateur doit obligatoirement ajouté root= .
Documentations
Voici quelques sources d'informations pour aller plus loin:
|
|