如何检测 UEFI 启动的 Linux 机器的视频模式是图形输出协议(GOP)还是通用图形适配器(UGA)?

如何检测 UEFI 启动的 Linux 机器的视频模式是图形输出协议(GOP)还是通用图形适配器(UGA)?

UEFI 固件似乎支持 GOP 或 UGA 图形协议。GOP 较新,已取代 UGA。在我的没有集成图形适配器(只有独立图形适配器 NVIDIA GTX 965m)的机器上,我发现在实时启动 Linux 安装 CD 时,没有内核模块驱动我的显卡(我检查了 lspci 和 X 日志)。

在对 UEFI 进行一些研究之后,我发现了这两种图形协议,我想知道是否有办法(命令行查询)找出正在使用哪一种,因为似乎是 UEFI 固件提供了驱动我的机器显示的能力(可能是通过我的“VGA 兼容”独立显卡)。

此外,在 BIOS 设置中(使用 UEFI 固件时它是否仍称为 BIOS 设置?),我还能够将我的视频 Op Rom 设置更改为“BIOS 兼容模式”。当我将其保留为“仅 UEFI”时,我在 BIOS 配置设置和 POST 显示以及引导加载程序显示中获得了全分辨率。当选择“BIOS 兼容模式”时,我得到的分辨率要小得多。这是否意味着固件能够改用 VGA 协议?

答案1

为了详细说明 grawity 的回答,有几个问题与您的问题有不同程度的相关性:

  • UGA 与共和党-- 正如您所说,有两种 EFI 视频系统,UGA 和 GOP。后者是随 EFI 2.x(又名 UEFI)引入的,如果我没记错的话,据我所知,所有基于 UEFI 的系统都使用 GOP。原则上,所有 EFI 1.x 系统都应该使用 UGA;但是,Apple(它仍在使用 EFI 1.x,甚至在其最新产品中也是如此)已将 UGA 移植到其 EFI,因此一些(但不是全部)Mac 具有带 GOP 的 EFI 1.x。可能还有其他奇怪的例外。正如 grawity 所说,这种区别在固件级别很重要,但在操作系统级别并不重要,至少据我所知不是。
  • Linux 帧缓冲设备-- 无论是 UGA 还是 GOP,固件都允许操作系统访问其视频硬件,Linux 通过帧缓冲设备-- 具体来说,efifb。在基于 EFI 的系统上,这通常是文本模式操作的基础(如果您不启动 X 或者按 Ctrl+Alt+F1 到 Ctrl+Alt+F6)。另一方面,一些内核驱动程序还为特定视频芯片组提供了帧缓冲设备,因此您可能最终不会使用该efifb设备。我不知道 UGA 和 GOP 在操作系统中呈现自己的方式是否存在任何差异。当然,我知道在更高级别上没有差异,就像您在 Linux 中使用的命令一样。
  • X Window 系统驱动程序-- X 驱动程序可以依赖内核视频驱动程序,也可以基本独立于它们。在大多数情况下,您使用的是为特定视频芯片组(ATI、Nvidia、Intel 等)编写的 X 驱动程序,这些驱动程序无法通过固件工作。因此,这些驱动程序不应受到 UGA 与 GOP(或 BIOS 与 EFI,尽管对此有一些警告)的影响。话虽如此,有一个 X 帧缓冲驱动程序可以通过任何处于活动状态的帧缓冲设备(包括该efifb设备)工作。因此,您可以通过 EFI 的 UGA 或 GOP 模式驱动显示器。但这绝对不是最佳方法,因为帧缓冲区驱动程序往往很慢。现代窗口环境(包括 Ubuntu 的 Unity)越来越依赖于无法通过帧缓冲区访问的视频加速功能。

您可以通过检查内核环形缓冲区来查看其中的一些工作原理dmesg,如下所示:

$ dmesg | grep fb
[    0.625015] efifb: probing for efifb
[    0.625207] efifb: framebuffer at 0xc0000000, mapped to 0xffffc90010880000, using 3072k, total 3072k
[    0.625208] efifb: mode is 1024x768x32, linelength=4096, pages=1
[    0.625209] efifb: scrolling: redraw
[    0.625210] efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
[    0.627994] fb0: EFI VGA frame buffer device
[    6.086695] fb: conflicting fb hw usage radeondrmfb vs EFI VGA - removing generic driver
[    6.689526] [drm] fb mappable at 0xC1488000
[    6.689531] [drm] fb depth is 24
[    6.689610] fbcon: radeondrmfb (fb0) is primary device
[    6.804904] radeon 0000:00:01.0: fb0: radeondrmfb frame buffer device

此示例显示了带有 AMD/ATI GPU 的系统上的许多与帧缓冲区相关的消息。您会注意到没有提到 UGA 与 GOP,但efifb引用了该设备,如fbcon(帧缓冲区控制台)和radeondrmfb(ATI/AMD Radeon 设备的帧缓冲区设备)。该消息表示从驱动程序到驱动程序的removing generic driver切换。您还可以检查与 X 服务器相关的消息。就我的系统而言,这些消息不太有趣,但如果您在启动 X 时遇到问题,可能会更让您感兴趣。efifbradeondrmfb/var/log/Xorg.0.logXorg.0.log

还有一点:在寻求硬件问题帮助时,通常重要的是要说明您的硬件是什么——在寻求视频问题帮助时,“独立图形适配器”不够具体。就此而言,不清楚您的问题是什么——或者您只是在寻找有关它们如何组合在一起的信息以进一步加深您的理解?

相关内容