2

大家好。我正在尝试尽可能缩短 iMac 双启动 OS-X 和 Ubuntu 的启动过程。到目前为止,我设法通过 Apple 的 EFI 引导管理器直接引导 grub(以及之后的 Ubuntu)。我通过伪装(通过硬链接、别名、文件夹树等)grub 二进制文件来实现这一点,就像 Apple 的固件所期望的那样来引导 OsX 本身。(例子:

$>sudo ln EFI/ubuntu/grubx64.efi System/Library/CoreServices/boot.efi

)
现在我正在尝试更进一步,即消除 GRUB。我知道现代 Linux 发行版确实在内核中包含 EFI 存根,因此原则上,可以直接引导到内核(通过 EFI/UEFI 固件),而不需要(辅助)引导管理器,例如 GRUB2 , 例如。(像这样:

$>sudo ln vmlinuz System/Library/CoreSerivces/boot.efi

) Apple 的问题在于它的“特殊”EFI 实现。为了让 Linux 内核的 EFI 存根工作,必须能够将参数传递给它(根路径、初始 ram 磁盘等)。这很容易使用辅助引导管理器(GRUB、rEFInd、ELILO 等)完成。他们确实将命令行字符串传递给 EFI 二进制文件),但这正是我想要绕过的。有没有办法将参数传递给由 Apple 的 EFI 固件加载的任意 EFI 二进制文件?(我已经尝试使用 com.apple.Boot.plist 但无济于事。)或者,有没有办法在引导过程中在没有命令行的情况下将参数传递给 linux 内核(可能通过一些文本文件)?

4

2 回答 2

3

答对了!!!!Apple 的 EFI 正在运行,解决方案比预期的要简单。不需要复杂的文件夹层次结构。只需创建一个小型 HFS+ 分区,将 linux 内核 efi 存根(例如 vmlinuz-3.13.0-46-generic.efi.signed)复制到其中,重命名文件以使其以 .efi 结尾(Apple 的 EFI 拒绝启动任何不以 .efi 扩展名结尾),如 vmlinuz.efi,也复制初始 ram 磁盘(例如 initrd.img-3.13.0-46-generic),可能将其重命名为更简单的名称,如 initrd.img,然后使用 efibootmgr像这样创建一个新的启动项(假设 X 是您创建 HFS+ 分区的硬盘,Y 是分​​区本身的编号):

efibootmgr -d /dev/sdX -p Y -c -L "Ubuntu (EFI-Stub)" -l /vmlinuz.efi -u "root=UUID=b0c4efb9-95b0-4e5d-98e1-8beb43f413c2 ro rootflags=subvol=@  quiet splash initrd=\initrd.img"

或者,您还可以创建一个图标和一个标签,当您在按住“alt”键的同时打开系统电源时将显示该图标和标签。它工作得很好,也值得付出努力。显示驱动程序由 EFI 直接配置,如果通过 GRUB 引导,则显示不可见的详细信息!!!

更新

在 Ubuntu 版本高达 16.10 的情况下,事情不再起作用了。X 无法检测到 KMS 设置,因此在启动时失败。幸运的是,有了 Ubuntu 17.04,一切又恢复了。至于内置启动管理器中显示的图标,请执行以下操作:

1) 启动到 OSX。

2) 以您喜欢的任何方式挂载我们的 Linux 引导加载程序(在我们的示例中为 vmlinuz.efi)所在的 HFS+ 分区。

3) 从网上获取 .icns 格式的 Ubuntu 徽标(注意,其大小不得超过 512x512 像素)并将其放在我们的引导加载程序所在的同一文件夹中。它必须命名为 .VolumeIcon.icns

4)像这样祝福引导加载程序:

sudo bless --folder /Volumes/<MyBootPartitionMountPoint> --file /Volumes/<MyBootPartitionMountPoint>/vmlinuz.efi --label 'Ubuntu 17.10' 

完成的。

现在,在启动机器时按住 alt 键将启动内置的 EFI 引导管理器,Apple 旁边有一个漂亮的 Ubuntu 徽标。

最后两件事。

1) 为内置启动管理器设置图标的过程实际上是可选的。用处不大。实际上,如果您尝试通过单击启动管理器屏幕中的 Ubuntu 图标来启动 Ubuntu,则不会读取相关的 EFI 启动变量,因此 Linux 将无法启动。它只是漂亮的眼睛糖果。

2) 重要提示:不要忘记将 root=UUID=blahblah 替换为 /Linux 分区的真实UUID。示例代码中的这一个只是一个示例。

享受

于 2015-05-06T11:27:37.400 回答
0

Raffaele 的解决方案适用于在 MacBookPro12,1 上安装 Debian Buster,但有一个警告:我必须rootflags从额外的引导参数中删除参数,以便命令变为:

efibootmgr -d /dev/sdX -p Y -c -L "Debian (EFI-Stub)" -l /vmlinuz.efi -u "root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro quiet splash initrd=\initrd.img"
于 2020-09-04T03:18:49.117 回答