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

CMC*_*kai 6 bios linux graphics-card integrated-graphics uefi

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

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

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

Rod*_*ith 11

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

  • UGA vs. GOP——正如你所说,有两个 EFI 视频系统,UGA 和 GOP。后者是随 EFI 2.x(又名 UEFI)、IIRC 和 AFAIK 引入的,所有基于 UEFI 的系统都使用 GOP。原则上,所有 EFI 1.x 系统都应该使用 UGA;但是,Apple(即使在其最新产品中仍使用 EFI 1.x)已将 UGA 移植到其 EFI,因此某些(但不是全部)Mac 具有带有 GOP 的 EFI 1.x。可能还有其他奇怪的例外。正如 grawity 所说,这种区别在固件级别很重要,但在操作系统级别并不重要,至少不是 AFAIK。
  • Linux 帧缓冲设备——无论是 UGA 还是 GOP,固件都允许操作系统访问其视频硬件,Linux 通过帧缓冲设备公开——特别是efifb. 在基于 EFI 的系统上,这通常是文本模式操作的基础(如果您没有启动 X 或者您按 Ctrl+Alt+F1 到 Ctrl+Alt+F6)。OTOH,某些内核驱动程序还为特定视频芯片组提供了帧缓冲设备,因此您最终可能不会使用该efifb设备。我不知道 UGA 和 GOP 在向操作系统展示自己的方式上是否存在任何差异。当然,我知道在更高级别上没有区别,就像您在 Linux 中使用的命令一样。
  • X Window System 驱动程序——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
Run Code Online (Sandbox Code Playgroud)

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

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