GRUB2 和内核 vga= 参数

0xC*_*22L 18 boot parameter grub2 linux-kernel

根据文档,vga=从 GRUB2 开始不推荐使用内核参数。某些较新的内核似乎不再在某些适配器上支持它这一事实无关紧要,因为我拥有的显卡已有七到八年的历史了。

现在的问题是我想使用更高分辨率的文本模式,例如 80x50 而不是默认的 80x25 字符。显然,该显卡 (ATI Rage XL) 的所有图形 (VBE/VESA) 模式都不存在 - 可用模式列表仅0通过6. 680x60但看起来很可怕,所以我想用1(80x50)。

在获取可用模式列表后,我已经看到 80x50 和 80x60 在不支持默认模式(默认已注释掉GRUB_TERMINAL=console)并且提示我选择时工作。

如果我不应该在内核命令行上设置模式并且每次使用GRUB_GFXMODE(有或没有预加载vbe模块)并且GRUB_GFXPAYLOAD_LINUX=keep失败,我该如何设置模式?失败:屏幕保持空白,因为它是我在这台机器上使用的卡的无效图形模式?

我的想法是nomodeset仍然传递给内核,但是引导加载程序仍然必须设置图形模式。除了vga=内核参数之外,我看不到任何其他选项。

注意: GRUB2 控制台上的vbetestvideotest命令会使屏幕变黑,然后在声称没有视频输入后屏幕会切换到睡眠模式。vbeinfovideoinfo显示除上述以外的一些可用模式,但没有提到应该在哪里设置。此外,当在内核命令行上传递vga=1(没有nomodeset)时,我看到一个关于它被弃用的非常简短的警告,但它太长而无法完全阅读 - 并且输出没有出现在dmesg.

ase*_*seq 12

也许它已被 grub2 弃用,但它应该仍然有效并且必须继续有效。它适用于我使用 grub2 和 debian wheezy 以及 rhel7.3(确认 01-2017)。另外根据官方文档,它没有被弃用:

https://www.kernel.org/doc/Documentation/x86/boot.txt

如果引导加载程序提供的命令行是由用户输入的,则用户可能希望以下命令行选项起作用。通常不应从内核命令行中删除它们,即使并非所有这些实际上对内核都有意义。

此处的 vga= 是整数(C 符号,十进制、八进制或十六进制)或字符串“normal”(表示 0xFFFF)、“ext”(表示 0xFFFE)或“ask”(表示 0xFFFD)之一。这个值应该被输入到 vid_mode 字段中,因为它在命令行被解析之前被内核使用。

https://www.kernel.org/doc/Documentation/svga.txt都会告诉你,你需要知道的。下面是我常用的几个分辨率示例:

vga=0x31b --> 1280x1024x32
vga=0x34d --> 1600x900x32
vga=0x31e --> 1600x1200x32
Run Code Online (Sandbox Code Playgroud)

要获取支持的模式列表,请使用:

vga=ask
Run Code Online (Sandbox Code Playgroud)

对于 1024×768x24 的屏幕,我发现它几乎适用于我使用的所有系统和显示器(这次是十进制和十六进制):

vga=792
vga=0x318
Run Code Online (Sandbox Code Playgroud)

  • 当我通过将 `vga=792` 附加到 `GRUB_CMDLINE_LINUX` 的现有值来编辑 `/etc/default/grub` 时,这对我有用 (2认同)

小智 2

linux16 和 initrd16 命令仍然支持 vga 参数,因此如果将“linux”更改为“linux16”或将“initrd”更改为“initrd16”,您可以获得旧的行为。我不确定这会导致什么其他变化,但它对我来说效果很好。:-)

  • 这是很好的建议!只需按 e 在 grub2 中进行编辑,然后向下导航到显示 linux 的位置并在末尾输入 16。然后您可以将 vga=ask 放在该行的末尾。如果内核中仍然启用帧缓冲区,它可能很快就会从快速 VGA 文本切换到该模式。 (2认同)