web-dev-qa-db-fra.com

Quelle est la différence entre un Bootrom et un chargeur de démarrage sur les systèmes ARM

Je viens principalement d'un arrière-plan du système x86 où le BIOS (micrologiciel) est responsable du chargement d'un chargeur de démarrage (comme GRUB) à partir de PowerON qui à son tour charge le système d'exploitation. J'ai maintenant lu la séquence de démarrage équivalente sur les systèmes ARM et il semble qu'il y ait des articles sur le Web faisant référence à deux termes: bootrom et bootloader.

Certains articles mentionnent que depuis PowerON le bootloader (comme u-boot) est la première chose qui est exécutée tandis que certains articles disent que depuis PowerON, un bootrom (généralement flashé sur la ROM interne du processeur) est exécuté en premier qui charge à son tour le bootloader (comme uboot) qui charge ensuite le système d'exploitation.

Quelqu'un peut-il fournir des éclaircissements sur bootrom vs bootloader? En outre, je voudrais connaître le nom d'un bootrom populaire qui est généralement utilisé dans les systèmes ARM.

20
modest

Voici comment je comprends les termes.

Bootrom

Bootrom (ou Boot ROM) est un petit morceau de masque ROM ou flash protégé en écriture intégré à la puce du processeur. Il contient le tout premier code qui est exécuté par le processeur lors de la mise sous tension ou En fonction de la configuration de certaines broches de sangle ou fusibles internes, il peut décider d'où charger la prochaine partie du code à exécuter et comment ou s'il doit vérifier l'exactitude ou la validité. Parfois, il peut contenir des fonctionnalités supplémentaires, éventuellement utilisables par code utilisateur pendant ou après le démarrage. Quelques exemples:

  • rOM de démarrage iPhone. Intégré dans le masque ROM et ne peut pas être modifié. Charge le chargeur de démarrage de l'étape suivante à partir du flash ou de l'USB (en mode DFU) et vérifie sa signature à l'aide de l'implémentation RSA intégrée. Fournit également accéléré fonctions de décryptage pour le chargeur de démarrage de l'étape suivante.

  • ROM de démarrage OMAP4 de TI. Peut charger le code utilisateur à partir du flash (NOR, NAND, OneNAND), de la mémoire externe, SD/MMC, USB ou UART. L'ordre de démarrage et les options sont définis par des broches de sangle (SYSBOOT). Fournit des fonctionnalités pour les étapes ultérieures (gestion du cache/TLB, etc.)

  • ROM de démarrage de la série LPCxxxx de NXP. Placé dans une partie cachée du flash interne qui est mappée à 0 à la mise sous tension. Implémente CRP (protection en lecture de code), ISP (programmation en système) qui permet de télécharger et de flasher un nouveau code sur UART. Si un code utilisateur valide est en flash (doit avoir la somme de contrôle appropriée), le mappe à 0 et y saute. Une partie de bootrom reste mappée pour fournir IAP (In-Application Programming) et certains autres services.

Bootloader

Bootloader est responsable de trouver et de charger le système d'exploitation ou le firmware final qui est censé fonctionner sur la puce. Une différence principale avec bootrom est qu'il est généralement en flash inscriptible et peut être remplacé ou mis à niveau.

Parfois, bootrom peut effectuer le travail du chargeur de démarrage. Par exemple, le bootrom d'OMAP est suffisamment complexe (il peut analyser FAT32!) Que vous pouvez probablement le charger et démarrer directement un noyau Linux.

Cependant, dans de nombreux cas, un chargeur de démarrage distinct est utilisé, soit parce que le bootrom n'est pas suffisamment capable (ou absent), soit parce qu'une flexibilité supplémentaire est nécessaire. Cela peut être très simple (charger le noyau à partir d'un emplacement flash fixe dans RAM et y accéder), ou peut être beaucoup plus compliqué. Par exemple, -Boot est comme un mini-OS en lui-même - il a une console, quelques commandes, vous permet d'interrompre le processus de démarrage et par exemple de modifier les arguments de la ligne de commande du noyau ou même de charger le noyau à partir d'un emplacement différent (SD/MMC ou USB), exécutez quelques tests et ainsi de suite.

Les chargeurs de démarrage sont généralement utilisés lorsque vous avez un système d'exploitation plus ou moins complexe qui peut nécessiter une configuration avant de pouvoir être démarré. Les microcontrôleurs plus petits comme la série LPC de NXP utilisent généralement un micrologiciel monolithique pour pouvoir s'en passer (cependant, il peut y avoir chargeurs de démarrage personnalisés pour eux aussi).

Sur les puces les plus simples, il peut ne pas y avoir de démarrage ROM ou chargeur de démarrage - ils essaient simplement de récupérer et d'exécuter des instructions à partir d'une adresse de démarrage fixe. En fait, la plupart des puces x86 fonctionnent à ce jour comme ça - ils commencent juste à exécuter du code à FFFFFFF0 avec l'espoir que le chipset y ait mappé la puce flash du BIOS. Ici, vous pouvez dire que le BIOS est le chargeur de démarrage (bien qu'il fournisse également des services au système d'exploitation, similaires au bootrom).

44
Igor Skochinsky