Всем здравствуйте.
Итак, задача.
Задача
Заела ностальгия, хочу увидеть старую добрую фреймбуферную консоль с пингвином (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_VGA16is 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, хотя это и не важно. Модули, которые меня интересуют, не менялись десятилетиями.


