2010-01-16 21 views
1

Le noyau linux utilise une sorte de disque ram pour accéder aux modules au début du processus. Par curiosité je veux comprendre J'ai une question: Le fichier contenant initramfs/initrd doit être accessible pour le noyau à ce stade. Cela signifie que le noyau doit supporter le système de fichiers approprié. Alors pourquoi le contenu de l'initramfs ne pourrait-il pas être dans le même système de fichiers que les fichiers simples?pourquoi ne pas simplement fichiers simples au lieu de initramfs ou initrd?

Répondre

1

Cela peut être. Une image initrd n'est pas nécessaire pour démarrer, mais la plupart l'utilisent. Ce que cela fait, cependant, vous permet d'avoir différentes configurations pour vos systèmes de fichiers. Par exemple, un initrd est généralement requis lors de l'utilisation d'un système de fichiers non-ext2 (NFS? XFS?), Lors de l'utilisation de RAID ou lors de l'hébergement du système de fichiers racine sur un périphérique inhabituel (lecteur CDROM avec unionfs?).

Cela peut être évité, bien sûr, en compilant le bon système de fichiers ou les pilotes RAID dans votre noyau, mais cela rendra votre noyau plus grand.

+0

Concis et bien dit! J'ai appris quelque chose. –

6

Le fichier contenant initramfs/initrd doit être accessible pour le noyau à ce stade.

Cela semble être le cœur de votre confusion: ce n'est pas le noyau qui lit le initramfs/initrd, c'est le bootloader! Le noyau n'a pas besoin de savoir comment accéder à l'initramfs/initrd. C'est tout le point de l'exercice!

Le bootloader charge les initramfs/initrd en mémoire, et il existe un protocole de communication bien définie qui permet au bootloader de dire le noyau à quelle adresse mémoire l'a chargé de initramfs/initrd. Dans le cas d'initramfs, les images initramfs peuvent également être ajoutées à l'image du noyau.

1

D'abord un bootloader (probablement LILO ou Grub) utilise les appels du BIOS pour lire l'image du noyau à partir de votre disque de démarrage. Ensuite, il passe le contrôle au noyau qu'il vient de placer dans la RAM système.

Le noyau n'utilise pas les appels BIOS pour accéder aux disques. Lorsque le noyau démarre, il analyse le système pour détecter les périphériques et charge les modules du pilote de périphérique pour chaque périphérique du système, monte le système de fichiers racine et lance le premier processus utilisateur.

Mais attendez: comment le noyau a-t-il chargé le module de pilote de périphérique pour que le sous-système de disque soit chargé? Il y a un problème de poule et d'oeuf ici, où vous devez accéder au disque pour obtenir le pilote de périphérique qui vous permet d'accéder au disque.

La solution consiste à placer tous ces pilotes dans le disque virtuel initial (initrd); cette image ramdisk est lue par le bootloader et placée en RAM à côté du noyau, ce qui donne au noyau l'ensemble des pilotes nécessaires pour accéder au système de fichiers racine. Sans cela, vous auriez besoin de tous les pilotes nécessaires pour accéder au système de fichiers racine intégré au noyau.