如何启用 TTY 控制台?

如何启用 TTY 控制台?

我在 Chromebook (Eve) 上运行 Linux (Debian 10),使用库存 Chrome OS 内核 (4.4.x) 并进行少量修改。一切运行(大部分)都很好,除了 TTY 控制台无法通过Ctrl+ Alt+访问Fn,它确实按预期切换帧缓冲区(IE Ctrl+F1切换到 DM,Crtl+F2切换到桌面),但似乎没有任何用于 TTY 模拟显示的帧缓冲区(屏幕只是在Ctrl+上冻结F3,但可以通过Crtl+恢复桌面F2)。鉴于启动时没有显示日志,我猜测这是内核配置问题。与 TTY、控制台和帧缓冲区相关的驱动选项已在内核配置中启用,并且tty设备在/dev.我尝试使用现有的 Debian 10 配置(对于那些没有的重叠和默认配置)编译 Chrome OS 内核,并且 TTY 控制台确实可用(但显然一堆其他东西不起作用),所以它不是不是从 Chrome 操作系统内核中编写的东西。

我比较了 Eve 和 Debian 之间的库存配置,并注意到在相同的配置项上选择了不同的选项(其中有 532 个),并指出了以下差异:

CONFIG_ITEM                         Debian      Eve
CONFIG_AGP_AMD64                    y           is not set
CONFIG_AGP_SIS                      y           is not set
CONFIG_AGP_VIA                      y           is not set
CONFIG_VGA_SWITCHEROO               y           is not set
CONFIG_DRM_FBDEV_EMULATION          y           is not set
CONFIG_DRM_LOAD_EDID_FIRMWARE       y           is not set
CONFIG_DRM_DP_CEC                   y           is not set
CONFIG_DRM_VGEM                     is not set  y
CONFIG_DRM_UDL                      is not set  y
CONFIG_DRM_CIRRUS_QEMU              is not set  m
CONFIG_FIRMWARE_EDID                y           is not set
CONFIG_FB_BOOT_VESA_SUPPORT         y           is not set
CONFIG_FB_CFB_FILLRECT              y           is not set
CONFIG_FB_CFB_COPYAREA              y           is not set
CONFIG_FB_CFB_IMAGEBLIT             y           is not set
CONFIG_FB_SYS_FILLRECT              y           is not set
CONFIG_FB_SYS_COPYAREA              y           is not set
CONFIG_FB_SYS_IMAGEBLIT             y           is not set
CONFIG_FB_SYS_FOPS                  y           is not set
CONFIG_FB_TILEBLITTING              y           is not set
CONFIG_FB_VESA                      y           is not set
CONFIG_FB_EFI                       y           is not set
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION y           is not set

但是,在我使用从 Debian 复制到 Eve 库存配置的这些设置来编译内核后,没有任何变化。还有其他问题,感谢帮助。

答案1

根据Chromebook 开发者文档,前夕是英特尔 x86_64 Kabylake-Y硬件。因此它可能使用i915显示驱动程序,该驱动程序使用内核模式设置。

我不太确定 Chromebook 使用哪种固件;如果它使用 Coreboot,则显示硬件可能会保持完全未初始化状态,直到i915驱动程序控制它。如果它使用 UEFI,您可能需要CONFIG_FB_EFI早期启动消息。

来自内核配置选项的帮助文本CONFIG_DRM_FBDEV_EMULATION(强调我的):

CONFIG_DRM_FBDEV_EMULATION:

如果您需要旧版 fbdev 支持,请选择此选项。请注意,此支持还在模式设置驱动程序之上提供 Linux 控制台支持

如果有疑问,请说“Y”。

还要检查该CONFIG_FRAMEBUFFER_CONSOLE选项;这绝对也是必要的。

如果驱动程序正常,您还需要[email protected]自动启动Ctrl+ Alt+ F3。如果存在的话通常systemd会自动执行此操作/dev/tty0(即内核虚拟控制台子系统已成功激活 - 它实际上是可选的,这可能会让习惯 x86 PC 硬件的人感到惊讶)并且没有其他系统接管这些/dev/tty[1-6]设备。

我怀疑您的问题可能是您没有CONFIG_DRM_FBDEV_EMULATION,因此不会有/dev/tty0,因此getty文本控制台的进程不会由 启动systemd

由于 Chromebook 显然没有 PC 风格的 BIOS,因此也不会有 VGA 文本控制台,因此CONFIG_VGA_CONSOLE绝对不会执行任何操作。

答案2

尽管已经加载了帧缓冲设备模块,但注意到 /dev/fb0 并不存在后fbcon,我明白了:

  1. 构建i915为可加载模块而不是内置模块,并确保fbdev启用旧版支持。 (将其构建为可加载模块可能是不必要的,我这样做只是为了确保我可以将其列入黑名单/卸载i915,但关键是选择遗留fbdev支持。)
  2. 启用帧缓冲区控制台 ( fbcon) 并将其构建为模块。
  3. 确保 tty 也已启用。
  4. 编辑/src/kernel/drivers/gpu/drm/i915/i915_drv.c并删除或注释掉所有if涉及冲突帧缓冲区模块的循环(只需搜索“冲突”,在 4.4.250-R89 内核源代码上有 3 个这样的循环),否则您可能会在 make 期间遇到错误。显然i915ChromeOS 的驱动程序不希望您拥有帧缓冲区控制台。
  5. 构建内核和模块。安装到Linux。
  6. 添加fbcon/etc/initramfs-tools/modules以在启动时加载它们(默认情况下不加载)。或者,当您需要使用 TTY 模拟时,您可以手动加载它。
  7. 更新 initramfs 和 grub。重启。您应该能够看到内核启动消息并使用Ctrl+Fn访问 TTYn。

相关内容