为什么grub与树莓派不兼容?


10

我已经读过很多遍了,树莓派不支持grub。我无法找到有关不兼容的任何细节。我只发现“不支持”形式的直言不讳的声明。

我想确切地了解问题所在,以及需要重新编写才能使其正常工作。

到目前为止,我发现第3阶段的引导程序读取了start.elf,而该文件又读取了内核映像。在我看来,如果grub可以工作,它将(完全)替换start.elf。我查看了UEFI引导加载程序的格式,发现它们使用PE格式的可执行文件。因此,我的第一个假设是,不兼容是(仅)grub被编译为PE,并且阶段3仅读取ELF

我是否错过了其他一些重大不兼容之处?我是否错过了其他一些主要任务,start.elf如果将其替换为grub ,这些任务将会丢失吗?


我不是100%,但是我认为问题是ARM处理器。AFAIK,grub仅适用于英特尔架构。
Seamus

@Seamus谢谢您的想法。Debian软件包grub-efi-arm的存在表明grub可以在ARM上使用。
菲利普·库林


不知道-谢谢!您是否尝试过ARM版本的GRUB?
Seamus

4
我想从投票决定关闭此问题的人员(“不是特定于Raspberry Pi”)中获得评论。与Raspberry Pi不兼容的问题怎么解决?
德米特里·格里戈里耶夫

Answers:


5

其实,如果你想与你的树莓派一个通用的内核安装Ubuntu,你必须使用GRUB2,描述在这里

唯一的兼容性问题是grub2可以在引导分区上设置EFI标志,而RPi引导加载程序将拒绝从设置了EFI标志的分区引导。可以通过任何分区编辑器手动清除该标志,从而使RPi引导加载程序和grub2都能正确识别分区。


那是我找不到的闪亮链接。我想知道是否可以关闭EFI检查。
菲利普·库林

@PhilipCouling我不这样认为,据我了解,检查是在引导加载程序链的闭源部分中进行的。
德米特里·格里戈里耶夫

2

Raspberry Pi的特殊之处在于,主(片上ROM),辅助(bootcode.bin)和第三个引导加载程序(start.elf)在其GPU上执行,一个加载另一个。指令集未正确记录,start.elf本身是绝密的。

可以做的事情(如SuSE和Microsoft所展示的)是随意替换kernel.img-甚至使用TianoCore(开源UEFI实现)或U-Boot的自定义版本。然后可以使用它来启动与UEFI兼容的GRUB2或BOOTMGR二进制文件。


确实。Raspberry Pi 3实际上现在已经具有成熟的UEFI固件,并且正在进行将Pi 4引入该固件的工作。借助此工具,您可以轻松安装原始Linux发行版并将GRUB用作引导加载程序。例如,可以在此处找到使用GRUB进行Vanilla Debian安装的示例。
Akeo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.