User Tools

Site Tools


debian:linux-initramfs

LINUX: Initramfs

Au moment du démarrage, le chargeur de démarrage charge le noyau (vmlinuz) et l'image initrd (INITial RamDisk) dans la mémoire et démarre le noyau. Le noyau vérifie la présence d'un initramfs et, s'il le trouve, le monte sur / et lance /init. Le programme init est typiquement un script shell. Le processus de démarrage est plus long, même significativement plus long, si un initramfs est utilisé.

Vmlinuz:

Vmlinuz est un type de noyau Linux capable de charger en mémoire le système d’exploitation, de sorte que l’ordinateur devienne utilisable et que les programmes d’application puissent être exécutés.

  • Vmlinuz = Mémoire virtuelle LINUx gZip = Fichier exécutable du noyau Linux compressé
  • Vmlinux = Mémoire virtuelle LINUX = Fichier exécutable du noyau Linux non compressé

En tête de cette image du noyau (vmlinuz) se trouve une routine qui effectue une configuration minimale du matériel, puis décompresse le noyau contenu dans l'image du noyau et la place dans une mémoire vive. Si une image de disque RAM initiale (initrd) est présente, Cette routine le déplace en mémoire (ou nous pouvons dire extraire l'image compressée du disque mémoire dans la mémoire réelle) et le note pour une utilisation ultérieure. La routine appelle ensuite le noyau et le démarrage du noyau commence.

## Initrd

Le disque virtuel initial (initrd) est un système de fichiers racine initial monté avant la disponibilité du système de fichiers racine réel. Le initrd est lié au noyau et chargé dans le cadre de la procédure d’amorçage du noyau. Le noyau monte ensuite cet initrd en tant que Une partie du processus de démarrage en deux étapes permet de charger les modules pour rendre les systèmes de fichiers réels disponibles et accéder au système de fichiers racine réel.

Initrd contient un ensemble minimal de répertoires et d'exécutables, tels que l'outil insmod pour installer les modules du noyau dans le noyau.

Ce fichier utilise le système de fichier cramFS, squashfs ou plus généralement initramfs (système de fichier compressé au format gzip et archivé via l'utilitaire cpio).

Pour la plupart des distributions, les modules du noyau sont la plus importante raison d'avoir un initramfs. Dans une distribution générale, il y a beaucoup d'inconnues comme les types de systèmes de fichiers et les couches des disques.

Créer une image initramfs à partir de rien

Préparation de l'environnement

Pour commencer il faut créer la racine et les sous-répertoires requis.

mkdir -p rootfs
cd rootfs
mkdir -p bin dev etc lib mnt proc sbin sys tmp var
cd -

Construction du rootfs

Pour se connecter on aura besoin d'outils de base tels que sh et mount, mais on peut plus facilement utiliser busybox.

curl -L 'https://www.busybox.net/downloads/binaries/1.26.2-defconfig-multiarch/busybox-x86_64' >rootfs/bin/busybox
chmod +x root/bin/busybox

On aura également besoin d'un script d'initialisation pour monter les systèmes requis.

cat >>root/init << EOF
#!/bin/busybox sh

mount -t devtmpfs  devtmpfs  /dev
mount -t proc      proc      /proc
mount -t sysfs     sysfs     /sys
mount -t tmpfs     tmpfs     /tmp

sh
EOF

Création du fichier initramfs.

cd rootfs
find . | cpio -ov --format=newc | gzip -9 >../initramfz
cd -

Test dans qemu

Pour le tester dans qemu, on aura également besoin d'un noyau Linux; lorsqu'on utilisez déjà Linux, on peut simplement utiliser celui du système hôte, il se trouve probablement dans /boot/vmlinuz*, ou un nom similaire.

qemu-system-x86_64 -kernel /boot/vmlinuz -initrd initramfz

Pour l'exécuter dans le terminal actuel au lieu d'obtenir une nouvelle fenêtre qemu, ajouter -nographic et -append 'console=ttyS0 aux arguments qemu-system-*.

debian/linux-initramfs.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1