Почему личинка несовместима с малиновым пи?

10

Я много раз читал, что Raspberry Pi не поддерживает Grub. Я не смог найти каких-либо подробностей о несовместимости. Я только нашел довольно тупые заявления вида "это не поддерживается".

Я хотел бы точно понять, в чем проблема и что нужно переписать, чтобы она заработала.

До сих пор я обнаружил, что загрузчик стадии 3 читает start.elf, который, в свою очередь, читает образ ядра. На мой взгляд, если бы grub работал, он бы заменил (полностью) start.elf. Я посмотрел на формат загрузчиков UEFI и обнаружил, что они используют исполняемый файл формата PE . Итак, моя первая гипотеза заключается в том, что несовместимость заключается в том, что grub компилируется как PE, а на этапе 3 читается только ELF .

Я пропустил еще одну серьезную несовместимость? Я пропустил некоторые другие важные задачи, start.elfкоторые были бы потеряны, если бы они были заменены grub?

Филип Коуллинг
источник
Я не на 100% в этом, но я думаю, что проблема в процессоре ARM. AFAIK, grubработает только для архитектур Intel.
Симус
@ Симус Спасибо за мысль. Наличие пакета Debian grub-efi-arm предполагает, что grub можно использовать в ARM.
Филипп Коулинг
Смотрите raspberrypi.org/documentation/configuration/boot_folder.md, чтобы узнать о функциональности start.elf.
Дирк
Не знал что - спасибо! Вы пробовали версию GRUB для ARM?
Симус
4
Я хотел бы получить комментарий от людей, которые проголосовали за то, чтобы закрыть этот вопрос как "не относящийся к Raspberry Pi". Как проблема того, что что-то несовместимо с Raspberry Pi, не специфично для него?
Дмитрий Григорьев

Ответы:

5

На самом деле, если вы хотите установить Ubuntu с универсальным ядром на Raspberry Pi, вы должны использовать grub2, как описано здесь .

Единственный недостаток совместимости заключается в том, что grub2 может установить флаг EFI в загрузочном разделе, а загрузчик RPi откажется загружаться с раздела с установленным флагом EFI. Флаг может быть очищен вручную любым редактором разделов, благодаря чему загрузчик RPi и grub2 правильно распознают раздел.

Дмитрий Григорьев
источник
Это блестящая ссылка, которую я не нашел. Интересно, можно ли отключить проверку EFI?
Филипп Коулинг
@PhilipCouling Я так не думаю, в моем понимании проверка выполняется в закрытой части цепочки загрузчиков.
Дмитрий Григорьев
2

Raspberry Pi отличается тем, что основной (встроенный в ПЗУ), вторичный (bootcode.bin) и третий загрузчик (start.elf) выполняются на его графическом процессоре , одна загружая другую. Набор инструкций не документирован должным образом и сам по себе start.elf совершенно секретен.

Что можно сделать (как продемонстрировали SuSE и Microsoft) - это заменить kernel.img по своему желанию - даже с пользовательской версией TianoCore (реализация UEFI с открытым исходным кодом) или U-Boot. Затем его можно использовать для запуска двоичного файла GRUB2 или BOOTMGR, совместимого с UEFI.

flakeshake
источник
Верно. Raspberry Pi 3 на самом деле имеет зрелую прошивку UEFI, и продолжается работа над тем, чтобы сделать то же самое для Pi 4. Благодаря этому вы можете легко установить дистрибутивы vanilla Linux и использовать GRUB в качестве загрузчика. Пример ванильной установки Debian с GRUB можно найти здесь, например.
Акео