Pourquoi grub est-il incompatible avec le Raspberry Pi?

10

J'ai lu à plusieurs reprises que le raspberry pi ne prend pas en charge grub. Je n'ai pas pu trouver de détails sur l'incompatibilité. Je n'ai trouvé que des déclarations plutôt franches de la forme "ce n'est pas supporté".

Je voudrais comprendre exactement quel est le problème et ce qui devrait être réécrit pour le faire fonctionner.

Ce que j'ai trouvé jusqu'à présent, c'est que le chargeur de démarrage de l'étape 3 lit start.elf qui à son tour lit l'image du noyau. À mon avis, si grub devait fonctionner, il se remplacerait (entièrement) par lui-même. J'ai regardé le format des chargeurs de démarrage UEFI et découvert qu'ils utilisent un exécutable au format PE . Donc, ma première hypothèse est que l'incompatibilité est (seulement) que grub est compilé en tant que PE et l'étape 3 ne lit que ELF .

Ai-je manqué une autre incompatibilité majeure? Ai-je manqué une autre tâche majeure start.elfqui serait perdue si elle était remplacée par grub?

Philip Couling
la source
Je ne suis pas à 100% là-dessus, mais je pense que le problème est le processeur ARM. AFAIK, grubne fonctionne que pour les architectures Intel.
Seamus
@Seamus Merci pour la pensée. L'existence du paquet Debian grub-efi-arm suggère que grub peut être utilisé sur ARM.
Philip Couling
Voir raspberrypi.org/documentation/configuration/boot_folder.md concernant les fonctionnalités de start.elf.
Dirk
Je ne savais pas - merci! Avez-vous essayé la version ARM de GRUB?
Seamus
4
J'aimerais obtenir un commentaire des personnes qui ont voté pour fermer cette question comme "non spécifique au Raspberry Pi". Comment un problème de non compatibilité avec un Raspberry Pi ne lui est-il pas spécifique?
Dmitry Grigoryev

Réponses:

5

En fait, si vous souhaitez installer Ubuntu avec un noyau générique sur votre Raspberry Pi, vous devez utiliser grub2, comme décrit ici .

La seule bizarrerie de compatibilité est que grub2 peut définir l'indicateur EFI sur la partition de démarrage, et le chargeur de démarrage RPi refusera de démarrer une partition avec un ensemble d'indicateurs EFI. L'indicateur peut être effacé manuellement par n'importe quel éditeur de partition, ce qui permet au chargeur de démarrage RPi et à grub2 de reconnaître correctement la partition.

Dmitry Grigoryev
la source
C'est un lien brillant que je n'avais pas trouvé. Je me demande si le chèque EFI peut être désactivé.
Philip Couling
@PhilipCouling Je ne pense pas, à ma connaissance, la vérification est effectuée dans la partie source fermée de la chaîne du chargeur de démarrage.
Dmitry Grigoryev
2

Le Raspberry Pi a la particularité que le primaire (ROM sur puce), le secondaire (bootcode.bin) et le troisième chargeur de démarrage (start.elf) sont exécutés sur son GPU , l'un chargeant l'autre. Le jeu d'instructions n'est pas correctement documenté et start.elf lui-même top secret.

Ce qui peut être fait (comme SuSE et Microsoft l'ont démontré) est de remplacer kernel.img à volonté - même avec une version personnalisée de TianoCore (une implémentation UEFI open-source) ou U-Boot. Cela peut ensuite être utilisé pour démarrer un binaire GRUB2 ou BOOTMGR compatible UEFI.

flakeshake
la source
En effet. Le Raspberry Pi 3 a actuellement un firmware UEFI mature, et le travail est en cours pour apporter le même pour le Pi 4. Avec cela, vous pouvez facilement installer des distributions Linux vanille et utiliser GRUB comme chargeur de démarrage. Un exemple d'installation de Debian vanilla avec GRUB peut être trouvé ici par exemple.
Akeo