如何啟用 TTY 控制台?
我在 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
和幀緩衝設備模組不存在後,我想通了:
- 建構
i915
為可載入模組而不是內置模組,並確保fbdev
啟用舊版支持。(將其建構為可載入模組可能不是必需的,我這樣做只是為了確保我可以列入黑名單/解除安裝i915
,但關鍵是選擇舊版fbdev
支持。)- 啟用幀緩衝控制台 (
fbcon
) 並將其建構為模組。- 確保 tty 也已啟用。
- 編輯
/src/kernel/drivers/gpu/drm/i915/i915_drv.c
並刪除或註釋掉所有if
引用衝突幀緩衝區模組的循環(只需搜尋“conflict”,在 4.4.250-R89 核心原始碼中有 3 個這樣的循環),否則您可能會在 make 過程中遇到錯誤。顯然i915
ChromeOS 的驅動程序不希望您擁有幀緩衝區控制台。- 建構核心和模組。安裝到 Linux。
- 添加
fbcon
以/etc/initramfs-tools/modules
在啟動時載入它們(預設情況下不載入)。或者,您可以在需要使用 TTY 仿真時手動載入它。- 更新 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/tty0
的getty
程序不會由systemd
.由於 Chromebook 顯然沒有 PC 風格的 BIOS,因此也不會有 VGA 文本控制台,因此
CONFIG_VGA_CONSOLE
絕對不會做任何事情。