Comment démarre Raspberry Pi?


57

J'ai un mini-ordinateur à la framboise et je me demande comment cette chose fait tout le processus de démarrage. Je peux compiler mon propre noyau et init ramdisk avec mes propres scripts et construire mon propre système Linux minimal sur PC, mais pour cela, je dois utiliser un chargeur de démarrage. Raspberry ne semble pas du tout supporter les bootloaders.

Il semble en quelque sorte démarrer en utilisant son GPU qui lit une partition sur la carte SD (probablement celle avec le drapeau amorçable) qui doit être formaté en FAT32, puis il lit certains fichiers à partir de là, qui sont fournis, par exemple par raspbian.

Mais comment pourrais-je démarrer mon propre noyau, avec mes propres personnalisations que j'ai moi-même compilées? Où devrais-je copier l'image du noyau / initrd (disque ram) pour que Raspberry la trouve et l'initialise? Je suis fondamentalement à la recherche d’une documentation technique très détaillée décrivant le processus de démarrage sous framboise ou simplement quelques explications à ce sujet.


Réponses:


59

De cet article du forum Raspberry Pi [édité pour refléter loader.binun anachronisme] :

  1. Lorsque le Raspberry Pi est allumé pour la première fois, le cœur ARM est désactivé et le cœur du processeur graphique est activé. À ce stade, la mémoire SDRAM est désactivée.
  2. Le processeur graphique commence à exécuter le chargeur de démarrage de la première étape, qui est stocké dans la ROM sur le SoC. Le chargeur de démarrage de la première étape lit la carte SD et charge le chargeur de démarrage de la deuxième étape ( bootcode.bin) dans le cache L2, puis l'exécute.
  3. bootcode.binactive la mémoire SDRAM et lit le programme d'amorçage de troisième étape (loader.bin) de la carte SD dans la RAM et l'exécute. [Les versions plus récentes n'utilisent pas de chargeur de démarrage de troisième étape. ]
  4. [Le cas échéant] loader.binlit le microprogramme du processeur graphique ( start.elf).
  5. start.elflit config.txt, cmdline.txtetkernel.img

loader.binne fait pas grand chose. Il peut gérer des .elffichiers et est donc nécessaire pour charger start.elfen haut de la mémoire (ARM utilise la mémoire SDRAM à partir de l'adresse zéro). Il est prévu d'ajouter le support de chargement elf bootcode.bin, ce qui rendrait loader.bininutile, mais c'est une priorité faible (je suppose que cela pourrait vous faire économiser 100 ms au démarrage). [Ce changement a depuis eu lieu. ]

Voici quelques ressources qui pourraient être utiles:


2
Le contenu de ces fichiers bin est-il un logiciel propriétaire?
Petr

3
@Petr Voici le Github du firmware de Raspberry Pi, je vais l'éditer dans ma réponse.
syb0rg

1
Dans la FAQ de Raspberry Pi , il est indiqué "Vous devez démarrer à partir d'une carte SD, mais un disque dur USB peut" prendre le relais "après le démarrage initial. Vous ne pouvez pas démarrer sans carte SD."
syb0rg

1
Cette partition, qui est lue en premier, est-elle une partition avec l'indicateur B ou doit-elle être la première partition? Et si je la faisais trop grande et que je voulais en créer une autre sur la carte SD qui serait plus petite
Petr

1
@Petr Vous devriez poser cette question comme autre question!
mardi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.