
Я использую GRUB в качестве загрузчика для своей пользовательской ОС. Я хочу, чтобы он переходил в графический режим для меня, чтобы мне не приходилось делать это самому в своей системе. Однако, прежде чем GRUB передаст управление ОС, видеорежим меняется обратно на текстовый режим 80x25. Я пробовал использовать , set gfxpayload=keep
но, похоже, это ничего не дает. Режим, который я выбрал (используя set gfxmode=1024x768x24
), работает нормально, пока GRUB все еще активен, но перед передачей управления точке входа моей ОС он возвращается в текстовый режим. Я что-то делаю не так? А вот мой grub.cfg
файл:
set root=(hd0,1)
set gfxmode=1024x768x24
set gfxpayload=keep
insmod vbe
insmod vga
insmod video_cirrus
insmod gfxterm
set menu_color_normal=red/blue
set menu_color_highlight=green/blue
loadfont /boot/grub/fonts/unicode.pf2
terminal_input console
terminal_output gfxterm
set timeout=1
set default=0
menuentry "Trolololo" {
multiboot /kernel
boot
}
решение1
Проблема решена. Как и предполагал sawdust, анализ исходного кода GRUB был выходом ( grub_multiboot_set_console
функция в grub-2.00/grub-core/loader/multiboot.c
файле).
Проблема была в том, что мое ядро загружается multiboot <filename>
командой, а linux загружается (в большинстве случаев) командой linux <filename>
. Спецификация мультизагрузки требует, чтобы информация о предпочтительном видеорежиме была указана в заголовке мультизагрузки. Если эта информация не указана, GRUB переключается обратно в текстовый режим перед запуском ядра и полностью игнорирует gfxpayload
переменную.