J'essaie de comprendre le processus de démarrage d'une machine dans son ensemble à partir du moment où vous appuyez sur le bouton d'alimentation. Il y a ce morceau du chargeur de démarrage à l'étape initramfs que je ne comprends pas très bien parmi d'autres petits bits.
Compte tenu de cette configuration Grub pour une entrée, tirée d'une récente installation par défaut d'Ubuntu:
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 96fb7310-5adb-4f66-bf59-04acd08d76a3
echo 'Loading Linux x.y.z ...'
linux /vmlinuz-x.y.z root=/dev/mapper/some-device-name ro nomodeset
echo 'Loading initial ramdisk ...'
initrd /initrd.img-x.y.z
Qu'est-ce que cela fait réellement en termes d'état du système et de mémoire? Je comprends que la tâche de Grub est de "charger et exécuter le noyau" et qu'il possède son propre ensemble de modules pour accéder aux fichiers sur les périphériques (ou réseau) pour y accéder. Dans l'exemple ici insmod
s, set root
et search
- mais c'est juste du point de vue de Grub, et non partagé avec le noyau, non?
Je suppose également que Grub charge (une copie?) Du noyau dans la mémoire ( linux
commande ) et le lance pour démarrer l'exécution. (deux étapes différentes apparemment - alors, comment?) Les paramètres donnés peuvent être lus dans le noyau et interprétés (est-ce une grosse chaîne mappée en mémoire quelque part?) et fournir les options pour organiser les choses demandées.
Je vois également cette initrd
option. Cela pointe vers mes initramfs compressés par gzip, nécessaires pour démarrer le périphérique racine réel spécifié par root=
. Mais comment ces initramfs sont-ils fournis au noyau? Il ne reçoit aucune adresse mémoire à l'endroit où il peut le charger, ni ne peut y accéder lui-même, car il est déjà chargé avant le démarrage du noyau. Certaines documentations du noyau indiquent que ce «périphérique» du système de fichiers initramfs est accessible via /dev/ram0
, mais je ne vois pas comment il devient un fichier de périphérique accessible pour commencer. Il se passe quelque chose sous l'eau que je ne vois pas, je suppose.
Je ne vois pas non plus comment cela se rapporte aux autres chargeurs de démarrage, y compris les plates-formes intégrées, par exemple en utilisant U-boot / Coreboot. Est-ce que cela fait la même chose que Grub (mêmes adresses mémoire standard?) Et dans quelle mesure cela se compare-t-il à Grub en ce qui concerne le chargement du noyau / initrd?
Juste pour être clair sur mes questions, je pense que je comprends pourquoi les différentes étapes de démarrage existent et quelles transitions ont lieu, mais je ne vois pas comment elles se déroulent et quelles sont les responsabilités exactes de chacune des étapes. J'ai l'impression de manquer une "norme" à laquelle tout se résume.
J'apprécierais quelques explications à ce sujet.
boot
commande implicite à la fin de la séquence. Je ne sais pas exactement ce qu'il fait dans Grub, mais si vous utilisez la ligne de commande Grub pour entrer ces commandes manuellement, vous devezboot
ou il restera assis pour toujoursgrub>
(ou du moins, jusqu'à ce que vous vous ennuyiez et éteignez l'ordinateur ). Les commandes précédentes configurent "simplement" un environnement.