更改控制台大小

更改控制台大小

我正在尝试从源代码编译的 iso 映像在 VMware 内运行 linux 内核。
目前我正在尝试启动 initramfs 但由于某些原因它崩溃了。我的问题是由于 TTY 的大小,我不知道为什么。
我在 .config 文件中将 CONFIG_DUMMY_CONSOLE_ROWS 从 25 更改为 60,但它没有进行任何更改。
我还可以做些什么?

答案1

在对 VMware 上的早期启动问题进行故障排除时,将内核配置为使用串行端口作为控制台可能会很有用。为此,您将需要内核启动选项:在您的情况下,指定它们的唯一方法可能是通过CONFIG_CMDLINE内核配置选项,或者FDARGS="..."在内核构建期间使用环境变量,类似于FDINITRD=在使用make isoimage.

在您的情况下,可能需要添加选项console=ttyS0,115200 console=tty0,然后配置 VMware 将虚拟 COM1 串行端口的任何输出保存到文件中。这样,您应该将 Linux 内核启动消息的完整列表放入文件中。

(该console=tty0部分确保您还将控制台输出发送到 VMware 控制台窗口;没有它,控制台输出将发送到串行端口仅有的,完全不使用 VGA 虚拟显示器。)

要成功使用这样的串行端口,您还需要内核配置选项CONFIG_SERIAL_8250=yCONFIG_SERIAL_8250_CONSOLE=y.


我认为CONFIG_DUMMY_CONSOLE_ROWS并且CONFIG_DUMMY_CONSOLE_COLUMNS只影响虚拟“虚拟”控制台设备,只有在真正的控制台设备驱动程序接管之前才有效。真正的控制台驱动程序将根据控制台上使用的显示模式设置行/列。

评论在开头drivers/video/console/dummycon.c似乎证实了这一点:

// SPDX-License-Identifier: GPL-2.0-only
/*
 *  linux/drivers/video/dummycon.c -- A dummy console driver
 *
 *  To be used if there's no other console driver (e.g. for plain VGA text)
 *  available, usually until fbcon takes console over.
 */

另外,drivers/video/console/vgacon.c(即实际的VGA控制台文本模式驱动程序)CONFIG_DUMMY_CONSOLE_ROWS根本不使用。

如果您使用经典的 VGA 文本控制台(vgacon.c上面提到的,配置为CONFIG_VGA_CONSOLE=y),则内核引导选项vga=ask(一旦您看到结果输出并选择合适的 (S)VGA 文本模式编号,vga=<mode number>),如 Artem S 所建议的塔什基诺夫在问题中的评论是适当的。

现代 Linux 发行版通常CONFIG_FRAMEBUFFER_CONSOLE=y会从 initramfs 加载适当的帧缓冲区设备驱动程序,因为它比普通的老式 VGA 具有更高分辨率的模式。但由于您正在解决早期启动问题,因此您需要将其放入内核中才能将输出输出到显示器(VMware 显示窗口)。如果您使用传统 BIOS 风格启动虚拟机(这make isoimage可能是这样做的),则有问题的驱动程序将是CONFIG_FB_VESA=y;如果您使用 UEFI 式引导,CONFIG_FB_EFI=y那将是一个好主意。

CONFIG_FB_VESA由于遗留原因,还使用引导vga=选项来设置初始控制台显示分辨率,但这些模式可能不会与vga=ask;一起列出。看文档/fb/vesafb.rst 在这里或者在内核源代码树中获取更多信息和可供选择的模式列表。

如果使用 UEFI(或基本上任何其他帧缓冲控制台驱动程序CONFIG_FB_VESA),则需要使用启动参数指定所需的显示模式video=;看Documentation/fb/modedb.rst在内核源代码树中了解完整详情。

简而言之,视频模式选择参数CONFIG_FB_EFI(实际上类似于任何非 VESA 帧缓冲控制台)可能如下所示:

video=efifb:1280x1024@60

这将自动为视频模式选择合适的文本分辨率。

相关内容