Всем здравствуйте.
Итак, задача.
Задача
Заела ностальгия, хочу увидеть старую добрую фреймбуферную консоль с пингвином (CONFIG_LOGO_LINUX_VGA16
или CONFIG_LOGO_LINUX_CLUT224
).
Всё это безобразие я пытаюсь выполнить на не самом старом ноутбуке с Core i7-7700HQ и i915 в качестве основной видеоплаты (есть ещё дискретная видеоплата AMD, но речь сейчас не о ней). Причём грузится Linux посредством UEFI (не BIOS).
«Родное» разрешение экрана – 1920x1080, поэтому в обычных условиях (без извращений, т. е. без efifb
либо inteldrmfb
) GRUB как-то автоматически цепляет именно это разрешение, а дальше я гружу ядро с параметрами video=eDP-1:1920x1080 video=HDMI-A-1:1920x1080
.
Но вернёмся к задаче. Вопрос не об inteldrmfb
и не о KMS – вопрос именно о включении VGA- или VESA-режимов. Основная проблема в том, что перевести фреймбуфер
- в разрешение 720x400x16 (текстовая VGA-консоль 80x25)
- либо в 640x480x16 (VGA16)
- либо в любое из VESA-разрешений (хотя бы 800x600)
– я не могу. В худшем случае после меню GRUB я вижу просто чёрный экран, в лучшем – для вывода используется узкая полоска высотой 20px вверху экрана (похоже, что ядро просто пишет в самое начало видеопамяти, да ещё предполагает глубину цвета 4bpp вместо 32bpp). В обоих случаях приходится заходить на компьютер по сети.
Ход эксперимента
Варианты, которые я использовал:
- текстовая консоль VGA (
CONFIG_FB_VGA16
is not set,CONFIG_VGA_CONSOLE=y
) vesafb
(CONFIG_FB_BOOT_VESA_SUPPORT=y
,CONFIG_FB_VESA=y
)vga16fb
(CONFIG_FB_VGA16=m
)uvesafb
, VESA framebuffer в userspace, использующий «виртуальный» x86 BIOS (CONFIG_FB_VGA16=m
,CONFIG_FB_UVESA=m
, v86d установлен)
В случае с vga16fb
у меня даже появляются /dev/fb0
и /sys/class/graphics/fb0/*
, но, ещё раз, вывод приходится на самое начало видеопамяти .
Что я пытался сделать:
- Включал/выключал KMS (
nomodeset
,i915.modeset=0
, вот это всё). В конце концов для чистоты эксперимента просто перестал собирать модулиi915
иamdgpu
. - Играл с параметрами
video=
иvga=
, как описано здесь, здесь здесь и здесь. Вариантыvga=normal
,vga=extended
,vga=ask
,vga=301
,video=vga16fb:640x480-4
,video=vesa
,video=uvesafb
н к чему не приводят, ядро на них кладёт. - Играл с настройками GRUB. Команда
vbeinfo
отсутствует, командаvideoinfo
выводит пустой список видеорежимов. УстановкаGRUB_GFXPAYLOAD_LINUX=text
приводит к тому, что GRUB радостно сообщает: «text» mode is not available и продолжает загрузку в слепом (blind) режиме. Т. е. это тоже чёрный экран, но уже средствами не ядра, а GRUB. - Запускал
hwinfo --framebuffer
. Пустой список.
В сухом остатке – у меня ощущение, что я косячу либо с настройками GRUB, либо с параметрами ядра (в последнем случае не скажешь наверняка, т. к. документация на тот же vesafb
была написана 20 лет назад, и хрен поймёт, насколько она актуальна сейчас).
Либо же то, что я наблюдаю – особенности именно интеловского фреймбуфера.
Либо же VGA- и VESA-режимы вообще недоступны пр загрузке через UEFI, но подтверждения этому я нигде не нашёл. Но, с другой стороны, x86 BIOS недоступен, да.
Вопрос
Собственно, вопрос. Оно вообще возможно – VGA или VESA через UEFI? Если да – то какие настройки GRUB и параметры ядра должны быть?
P.S. Смотрел в /boot/grub/x86_64-efi/video.lst
– там только efi_gop
, efi_uga
, video_bochs
, video_cirrus
, что, в общем, закономерно. Никакого vbe
там нет.
P.P.S. Ядро 4.19.251, хотя это и не важно. Модули, которые меня интересуют, не менялись десятилетиями.