我尝试在 UEFI 模式下将 Ubuntu 安装到 VirtualBox。安装正常,但重新启动后,操作系统正确启动,而图形环境未启动。这个问题本身在论坛上被多次报告,我的问题不是解决这个问题。我开始对导致这种现象的原因感兴趣。
我认为,一旦操作系统从 UEFI 启动,操作系统的系统配置和驱动程序就与 BIOS 模式完全相同。如果是这样,Ubuntu 图形环境应该可以正常启动,但这似乎是错误的。我的问题是,操作系统启动完成后,BIOS 和 UEFI 之间有什么不同?操作系统使用的驱动程序和配置相同吗?UEFI 是否为操作系统提供图形驱动程序?如果是,Ubuntu 使用的是不同的图形驱动程序吗?
答案1
硬件(甚至虚拟硬件)通常由固件(BIOS、固件中的预 EFI 硬件初始化代码或设备本身内置的固件)初始化。对于视频硬件和主板内置的一些其他设备尤其如此。此外,EFI 提供了一个用于访问视频设备的帧缓冲区驱动程序,而 BIOS 不提供该驱动程序。这可能会影响 Linux 访问视频硬件的方式。
对于 VirtualBox,整个固件堆栈在 BIOS 和 EFI 模式下是不同的。这会影响 Linux 驱动程序与(虚拟)视频硬件的交互方式,因为它将以不同的方式初始化。FWIW,我运行Xorg -configure
创建一个新/root/xorg.conf-sample
文件(或任何名称),将其复制到/etc/X11/xorg.conf
,然后调整它以使用该fbdev
驱动程序。VirtualBox 客户机驱动程序有时现在也可以在 VirtualBox 下工作,但这是相对较新的,并不适用于所有客户机操作系统。
类似的事情也可能发生在真实硬件上,尽管在真实硬件上,BIOS/CSM/传统模式启动通常在 EFI 之上完成,因此启动模式之间的相似性可能比在 VirtualBox 下更大。尽管如此,BIOS/CSM/传统模式启动和 EFI/UEFI 模式启动之间可能存在差异。由于前者在历史上更为常见,因此后者平均会产生更多问题。使用专有视频驱动程序时尤其如此;无论出于何种原因,ATI 和 Nvidia 一直未能为其专有 Linux 驱动程序提供 EFI 支持。在我看来,这只是避免使用这些驱动程序的另一个原因。(我从来都不是它们的忠实粉丝,因为它们总是给我的使用带来比解决的问题更多的问题。)
BIOS 与 EFI 之间还有一些其他启动后差异。特别是,EFI 比 BIOS 更易于访问,因为它具有所谓的“运行时服务”。操作系统可以与 EFI 通信以设置 NVRAM 变量、使用 EFI 的帧缓冲区驱动程序等等。目前,您不太可能使用其中的大多数功能(EFI 帧缓冲区驱动程序除外),但它们将来可能会变得更加重要。一个重要的 EFI 功能是能够通过 Linux 实用程序设置启动选项efibootmgr
。大多数 Linux 发行版都透明地将此工具用作 GRUB 安装的一部分,但您可以手动使用它来更改引导加载程序、一次性直接重新启动到另一个操作系统等。