小编dei*_*tch的帖子

我可以在闪存驱动器上安装 grub2 以启动 BIOS 和 UEFI

嗯,显然我可以,因为所有 Linux 发行版都是作为混合 ISO 提供的,可以引导 BIOS 和 UEFI。

问题是如何?我以为我可以跑grub-install两次:

grub-install --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sdX
grub-install --target x86_64-efi --efi-directory /mnt --boot-directory=/mnt/boot --removable
Run Code Online (Sandbox Code Playgroud)

并且它会安装两者。然而,一个不会破坏另一个吗?

归根结底,我不太了解 grub 在 MBR(BIOS 或 UEFI 模式)中安装的内容。理论上,UEFI 不应该关心 MBR 本身,而只是不确定。

仅供参考,grub-install在 VirtualBox 中运行Ubuntu LiveCD,因为它在那里。

grub grub2 uefi

8
推荐指数
1
解决办法
1万
查看次数

引导加载程序如何实际移交给内核?

假设我有一个带有kernelinitrd线的引导程序。出于所有意图和目的,我现在有 2 或 3 个“内核”阶段:

  1. 固件
  2. grub(或其他引导加载程序)
  3. 真正的 linux 内核

以上将适用于 MBR。对于 EFI,引导加载程序(或引导管理器)只是一个 EFI 应用程序,它在固件是“内核”时运行:

  1. 固件,加载 EFI 应用程序
  2. 真正的 linux 内核

实际的内核切换过程是什么。从 2 到 3,或者 EFI 固件从 1 到 2,MBR grub 实际上做了什么?它类似于kexec?

其次,在 EFI 的情况下,一些钩子被传递给 EFI 应用程序,然后传递给 Linux 内核(所以我们可以做像 efibootmgr 之类的事情),它是如何传递的?

最后,是否有可能不止一次这样做?例如,如果我在加载“常规”操作系统之前需要做一些自定义工作,例如测量和验证 TPM 条目、解密等,也许使用 grub、rEFInd 或其他方法不容易完成的事情,我可以加载“临时”阶段内核和initrd,执行它们,然后移交?

boot kernel boot-loader grub2

6
推荐指数
1
解决办法
2417
查看次数

为什么我的自定义构建 iso 无法在 EFI 中启动?

我正在 mkisofs 模式下使用 xorriso 构建自定义 iso。构建似乎是正确的,之后检查 iso 显示 2 个引导映像(1 个 BIOS,2 个 UEFI),但使用 OVMF 固件从 qemu 引导到 ISO 无法找到任何可引导媒体。

如果我在 qemu 中尝试完全相同的启动,但使用干净下载的 ubuntu 16.04 服务器 iso,它可以毫无问题地启动。

如果我使用 BIOS(不是 UEFI),两者都可以正常启动。

xorriso 命令:

xorriso -as mkisofs \
   -l -J -R -V version \
   -no-emul-boot -boot-load-size 4 -boot-info-table \
   -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
   -isohybrid-mbr isohhdpfx.bin \
   -eltorito-alt-boot -e EFI/BOOT/BOOTX64.EFI -no-emul-boot \
   -isohybrid-gpt-basdat \
   -o testos.iso ./cddir/
Run Code Online (Sandbox Code Playgroud)

检查 2 个 iso(ubuntu 和我定制的一个)的详细信息xorriso -report_el_torito plaincmd以下要点https://gist.github.com/deitch/e069268f92402d6a2b1c7e060ddba622

boot mkisofs uefi

6
推荐指数
1
解决办法
9670
查看次数

标签 统计

boot ×2

grub2 ×2

uefi ×2

boot-loader ×1

grub ×1

kernel ×1

mkisofs ×1