如何检查GRUB是处于EFI模式还是BIOS模式?

有没有在grub shell中的命令可以指示机器是否使用EFI或BIOS固件?
我正在使用GRUB 2.00在一台2010年的Mac Pro上。这台电脑当然有EFI固件。但是我已经尝试了几天,想要以BIOS仿真模式启动Ubuntu,因为缺少NVIDIA显示驱动程序。据我了解,当GRUB运行时,使用EFI还是BIOS仿真的决定已经被做出。那么我怎么能从GRUB中检查呢?
2个回答

截至GRUB 2.00版本,假设GRUB能够正常工作并进入正常模式而不是救援模式,从GRUB shell中运行echo $grub_platform命令将显示在BIOS模式下为pc,在UEFI模式下为efi
BIOS版本对应于grub-pc软件包,而UEFI版本对应于grub-efi-amd64(或者较少见的grub-efi-ia32)软件包。

谢谢。我刚刚从Live CD(通过USB)尝试了一下,得到了"efi"。这是一个很好的诊断结果,因为根据我的理解,Ubuntu不会在BIOS模式下加载。现在要弄清楚如何获取"pc"...这里可能有一点余地。我看到grub_platform的文档说它指示了GRUB构建的平台。对我来说,这些概念似乎是等价的,但我在这方面并不是专家。我认为"efi"版本的GRUB甚至不能在BIOS模式下运行,对吗? - NoahR
每个GRUB版本都使用特定于平台固件类型的固件调用。要在BIOS模式下启动一个活动的USB驱动器,你需要寻找一个适合的固件级选项;在Mac上可能涉及到Boot Camp,但我已经很久没有看过那些了。请注意,在BIOS模式下启动一个活动的Ubuntu镜像(而不是已安装的系统),实际上会得到ISOLINUX而不是GRUB。 - Colin Watson
我该如何使用if语句来处理这个问题?我尝试过if [ ${$grub_platform} == "pc" ] { ... },但是它没有起作用 - 它总是被评估为真。 - starbeamrainbowlabs
那个语法有几个错误。if [ ${grub_platform} == "pc" ]; then ...; fi 更有可能起作用。 - Colin Watson

Grub2实现了类似于shell的语法。这样写是可以的:
if test "${grub_platform}" = "pc"; then
  menuentry 'XYZ' {
    linux ${linux_params}
    initrd ${initrd_params}
  }
else
  menuentry 'XYZ' {
    linuxefi ${linux_params}
    initrdefi ${initrd_params}
  }
fi

# as well as
if [ "${grub_platform}" = "pc" ] ; then
fi

# or
if [ "${grub_platform}" = "pc" ]
then
fi