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