GNU/Linux >> Tutoriels Linux >  >> Linux

Est-il possible de démarrer le noyau Linux sans créer d'image initrd ?

initrd/initramfs est facultatif et non obligatoire. bzImage est l'image pure du noyau et peut être démarré directement par le chargeur de démarrage. Cependant, il peut être nécessaire d'exécuter certaines tâches (chargement de modules de système de fichiers, de pilotes pour l'accès au disque, montage du système de fichiers racine à partir d'un support échangeable sans nom/chemin fixe, etc.) qui nécessitent généralement l'accès à un système de fichiers et à des outils de l'espace utilisateur.

C'est ce que initramfs est pour :il s'agit d'une archive CPIO qui est attachée à l'image du noyau (l'image du noyau est le conteneur pour l'initramfs et non l'inverse) soit dans l'image du noyau elle-même, soit par le chargeur de démarrage au moment du démarrage.

Cette archive CPIO contient un rootfs initial avec les modules nécessaires pour configurer tous les périphériques pour accéder au système de fichiers racine approprié et certains programmes pour identifier ces périphériques, charger les modules, effectuer d'autres tâches de démarrage, remonter le système de fichiers racine approprié sur / et démarrer / sbin /init

initrd est similaire, à la différence principale qu'il s'agit d'une image de système de fichiers, qui peut être et est généralement compressée. Le noyau doit prendre en charge le système de fichiers utilisé et montera cette image en tant que /.

initial

Étant donné que CPIO est plus simple de plusieurs ordres de grandeur, initramfs est préféré à initrd, car cela évite à la fois l'exigence de tout module de système de fichiers intégré et facilite également la création d'initramfs. Au lieu d'avoir à créer une image ext2, à monter un périphérique en boucle et à la remplir, cela se résume à une simple création d'archive, un peu comme l'utilisation de tar.

Cependant, si vous compilez votre noyau avec tous les pilotes et modules requis intégrés dans l'image du noyau et que votre périphérique de système de fichiers racine a un nom fixe dans le système, vous n'avez pas besoin d'initramfs car le noyau peut alors faire les choses par lui-même.


Exemple minimal de QEMU + Buildroot

Voici un exemple concret minimal qui montre qu'initrd n'est pas obligatoire :https://github.com/cirosantilli/linux-kernel-module-cheat/tree/0b4f156b1b536a89c90882ed8ce551abcd3780af#initrd

Avec cette configuration, nous pouvons facilement exécuter deux commandes QEMU fonctionnelles de type :

qemu-system-x86_64 -drive file=rootfs.ext2

et :

qemu-system-x86_64 -initrd rootfs.cpio

Où :

  • rootfs.ext2 et rootfs.cpio sont fondamentalement le même système de fichiers racine, mais dans des formats différents
  • la première commande a un disque dur et pas de -initrd
  • la deuxième commande un -initrd mais pas de disque dur

Dans les deux cas, Linux démarre bien, sauf que dans le -initrd système, les écritures de fichiers ne sont pas persistantes puisque tout est en mémoire.


Linux
  1. Linux - Est-il possible de monter à distance une image qui peut démarrer et s'installer toute seule ?

  2. Linux - Participer à la liste de diffusion du noyau ?

  3. Est-il possible de développer un module de noyau Linux dans CLion ?

  4. Redimensionner la partition de démarrage

  5. Comment installer Linux aux côtés de Windows 8 sans corrompre la configuration de démarrage de Windows 8 ?

Comment vérifier la version du noyau sous Linux

Comment changer l'écran Linux Boot Splash

Historique des correctifs en direct du noyau Linux

Dans l'attente de la configuration du réseau Linux dans le disque virtuel initial (initrd)

Linux - L'en-tête Vmlinux contient-il la longueur de l'image du noyau ?

Comment Linux charge-t-il l'image 'initrd' ?