Linux

如何啟用 TTY 控制台?

  • February 6, 2021

我在 Chromebook (Eve) 上執行 Linux (Debian 10),使用普通的 Chrome OS 核心 (4.4.x) 並稍作修改。除了無法通過Ctrl++訪問 TTY 控制台之外,一切都執行良好(大部分情況下) ,這確實會按預期切換幀緩衝區(Alt+切換到 DM 和+切換到桌面)​​,但似乎沒有任何用於 TTY 仿真的幀緩衝區顯示(螢幕只是在+上凍結,但桌面可以通過+恢復)。鑑於啟動時沒有顯示日誌,我猜這是核心配置問題。與 TTY、控制台和幀緩衝區相關的驅動程序選項已在核心配置中啟用,設備列在Fn Ctrl``F1``Crtl``F2``Ctrl``F3``Crtl``F2``tty``/dev. 我嘗試使用股票 Debian 10 配置編譯 Chrome OS 核心(對於那些沒有的重疊和預設配置)並且 TTY 控制台確實可用(但顯然還有很多其他的東西不起作用),所以它是不是從 Chrome OS 核心中寫入的東西。

我比較了 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 配置的這些設置編譯核心後,沒有任何變化。還有其他問題,感謝您的幫助。

在註意到 /dev/fb0 儘管已經載入fbcon和幀緩衝設備模組不存在後,我想通了:

  1. 建構i915為可載入模組而不是內置模組,並確保fbdev啟用舊版支持。(將其建構為可載入模組可能不是必需的,我這樣做只是為了確保我可以列入黑名單/解除安裝i915,但關鍵是選擇舊版fbdev支持。)
  2. 啟用幀緩衝控制台 ( fbcon) 並將其建構為模組。
  3. 確保 tty 也已啟用。
  4. 編輯/src/kernel/drivers/gpu/drm/i915/i915_drv.c並刪除或註釋掉所有if引用衝突幀緩衝區模組的循環(只需搜尋“conflict”,在 4.4.250-R89 核心原始碼中有 3 個這樣的循環),否則您可能會在 make 過程中遇到錯誤。顯然i915ChromeOS 的驅動程序不希望您擁有幀緩衝區控制台。
  5. 建構核心和模組。安裝到 Linux。
  6. 添加fbcon/etc/initramfs-tools/modules在啟動時載入它們(預設情況下不載入)。或者,您可以在需要使用 TTY 仿真時手動載入它。
  7. 更新 initramfs 和 grub。重啟。您應該能夠看到核心啟動消息並使用Ctrl+Fn訪問 TTYn。

根據Chromebook 開發者文件,Eve 是Intel 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選項;這絕對是必要的。

如果驅動程序是有序的,您還需要getty@tty3.service自動啟動Ctrl++ 。如果存在,通常會自動執行此操作(即核心虛擬控制台子系統已成功啟動 - 它實際上是可選的,這可能會讓習慣 x86 PC 硬體的人感到驚訝)並且沒有其他系統接管這些設備。Alt``F3``systemd``/dev/tty0``/dev/tty[1-6]

我懷疑你的問題可能是你沒有CONFIG_DRM_FBDEV_EMULATION,所以不會有,所以文本控制台/dev/tty0getty程序不會由systemd.

由於 Chromebook 顯然沒有 PC 風格的 BIOS,因此也不會有 VGA 文本控制台,因此CONFIG_VGA_CONSOLE絕對不會做任何事情。

引用自:https://unix.stackexchange.com/questions/631224