Notes

Programmes Projet Speedtouch Projet Snoopy Projet eciadsl La recette du pain Source Mage BeOS Mon CV Mon blog Notes On nous prend pour des cons! Don
Programmes
Projet Speedtouch
Projet Snoopy
Projet eciadsl
La recette du pain
Source Mage
BeOS
Mon CV
Mon blog
Notes
On nous prend pour des cons!
Don
en fr

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:
  1. 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.
  2. 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.
  3. 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:
Valid XHTML 1.0! CSS Valide !
Benoît Papillault Clé PGP