Por que o grub é incompatível com o raspberry pi?

10

Eu já li várias vezes que o raspberry pi não suporta grub. Não consegui encontrar detalhes específicos sobre a incompatibilidade. Eu encontrei apenas declarações bastante contundentes do formulário "não é suportado".

Gostaria de entender exatamente qual é o problema e o que precisaria ser reescrito para fazê-lo funcionar.

O que eu descobri até agora é que o carregador de inicialização do estágio 3 lê start.elf, que por sua vez lê a imagem do kernel. Na minha opinião, se o grub funcionasse, substituiria (inteiramente) o start.elf. Examinei o formato dos gerenciadores de inicialização UEFI e descobri que eles usam um executável no formato PE . Portanto, minha primeira hipótese é que a incompatibilidade é (apenas) que o grub seja compilado como um PE e o estágio 3 leia apenas ELF .

Perdi alguma outra grande incompatibilidade? start.elfPerdi alguma outra tarefa importante que seria perdida se fosse substituída pelo grub?

Philip Couling
fonte
Não estou 100% nisso, mas acho que o problema é o processador ARM. AFAIK, grubfunciona apenas para arquiteturas Intel.
Seamus
@ Seamus Obrigado pelo pensamento. A existência do pacote Debian grub-efi-arm sugere que o grub pode ser usado no ARM.
Philip Couling
Consulte raspberrypi.org/documentation/configuration/boot_folder.md re funcionalidade do start.elf.
Dirk
Não sabia disso - obrigado! Você já experimentou a versão ARM do GRUB?
Seamus
4
Eu gostaria de receber um comentário de pessoas que votaram no fechamento desta pergunta como "não específico ao Raspberry Pi". Como o problema de algo não ser compatível com um Raspberry Pi não é específico?
Dmitry Grigoryev

Respostas:

5

Na verdade, se você deseja instalar o Ubuntu com um kernel genérico em seu Raspberry Pi, você tem que usar grub2, como descrito aqui .

A única peculiaridade de compatibilidade é que o grub2 pode definir o sinalizador EFI na partição de inicialização e o carregador de inicialização RPi se recusará a inicializar uma partição com um conjunto de sinalizadores EFI. O sinalizador pode ser limpo manualmente por qualquer editor de partição, fazendo com que o RPi bootloader e o grub2 reconheçam a partição corretamente.

Dmitry Grigoryev
fonte
Esse é um link brilhante que eu não encontrei. Gostaria de saber se a verificação EFI pode ser desativada.
Philip Couling 13/06/19
@PhilipCouling Acho que não, no meu entendimento a verificação é feita na parte de código fechado da cadeia do carregador de inicialização.
Dmitry Grigoryev
2

O Raspberry Pi é especial: o primário (ROM no chip), o secundário (bootcode.bin) e o terceiro gerenciador de inicialização (start.elf) são executados em sua GPU , um carregando em cadeia o outro. O conjunto de instruções não está devidamente documentado e inicia-se extremamente secreto.

O que pode ser feito (como o SuSE e a Microsoft demonstraram) é substituir o kernel.img à vontade - mesmo com uma versão personalizada do TianoCore (uma implementação UEFI de código aberto) ou com o U-Boot. Isso pode ser usado para iniciar um binário GRUB2 ou BOOTMGR compatível com UEFI.

flocos de neve
fonte
De fato. O Raspberry Pi 3 atualmente possui um firmware UEFI maduro, e o trabalho está em andamento para trazer o mesmo para o Pi 4. Com isso, você pode instalar facilmente distribuições vanilla Linux e usar o GRUB como seu gerenciador de inicialização. Um exemplo de instalação básica do Debian com o GRUB pode ser encontrado aqui, por exemplo.
Akeo 14/01