- Вопрос или проблема
- Уровень загрузки против уровня ядра
- Что дальше
- Определение доступных разрешений
- Теперь, когда мое разрешение установлено
- Теперь мы на уровне ядра
- Добавление этого на основе комментариев ниже
- Обновление
- Ответ или решение
- Проблема низкого разрешения в раннем загрузочном фреймбуфере EFI/VGA и GRUB
- Причины проблемы
- Возможные решения
- 1. Отключение CSM
- 2. Установка UEFI Shell
- 3. Доступные разрешения
- Примечания
- Заключение
Вопрос или проблема
Когда я загружаю свою машину с Linux с UEFI и grub2, у меня доступно только несколько графических режимов (режимов разрешения). И оба из них действительно меньше, чем мой монитор/экран. Например, разрешение загрузочной консоли устанавливается на 800x600
, в то время как мой экран имеет 1920x1080
, и изображение выглядит очень плохо.
Мой GPU – Nvidia, но я не хочу устанавливать, вставлять или использовать какие-либо драйверы, специфичные для GPU. По крайней мере, не во время загрузки.
Меня интересует возможность изменения разрешения начальной EFI/VGA загрузочной консоли (и GRUB2) так, чтобы оно совпадало с полным экраном.
Некоторые источники утверждают, что я не могу, потому что возможно использовать только разрешения, поддерживаемые GPU в режиме VESA-расширений
. Это правда? Это относится к моему случаю? Или мне просто нужно изменить некоторые настройки UEFI?
Я хотел бы, чтобы полное разрешение было включено с момента начала GRUB. Это возможно?
Уровень загрузки против уровня ядра
Из комментария OP:
@eyoung100 Я могу просматривать и выбирать режимы EFI GOP в меню grub2. Но доступно только два режима: 800×600 и 1024×768. Мой дисплей 1920×1080, и эти режимы выглядят ужасно на нем (особенно если я использую Xorg с efifb). Вот почему я не могу использовать EFI framebuffer…
Я полагаю, что OP пытается исправить проблему уровня загрузки с помощью решения уровня ядра. Некоторые моменты, которые следует помнить:
- Разрешения GOP и EFI переменные хранятся в NVRAM компьютера как только для чтения.
- Единственное время, когда защита только для чтения снимается – это после загрузки компьютера.
- Теоретически, значения можно изменить, но единственный раз, когда я когда-либо видел, чтобы их обновляли, это с помощью инструментов, таких как
efivars
, и версийgrub
. - Хотя вышеуказанные инструменты могут получить доступ к EFI значениям для изменения, таких как порядок загрузки, я никогда не видел, чтобы кто-либо использовал эти инструменты для доступа и изменения GOP или Протокола графического вывода.
- Как видно из ссылки в 4, Графический порт закодирован в оболочке UEFI. Преимущество этого заключается в том, что это убирает зависимость от аппаратного обеспечения для создания вывода на дисплей, как указано в этом PDF.
Что дальше
Поскольку GOP доступен только в среде до загрузки, разрешение должно быть установлено в среде до загрузки, то есть в оболочке UEFI, которую OP, похоже, уже использовал:
@eyoung100 Я смог полностью отключить CSM в UEFI, а затем в grub2 я увидел около шести новых режимов для GOP! Один из них был моим режимом с полным разрешением! Он работал отлично. Я загрузился в правильном режиме с /dev/fb0, предоставленным efi-framebuffer.0.
Таким образом, я предоставляю метод создания оболочки UEFI для будущих читателей. Этот метод можно использовать для выполнения скриптов оболочки (для настройки загрузки ПК), установки разрешений, восстановления поврежденных параметров загрузки и многого другого, без какой-либо ОС. Я мог бы описать их здесь, но ради краткости следуйте шагам 1-7 на: KilianKegel/Howto-create-a-UEFI-Shell-Boot-Drive.
– Обратите внимание, что вы можете заменить шаг 3 на более стабильную версию, скачав файл shell.efi
со страницы выпусков EDK2.
Определение доступных разрешений
- Загрузитесь с нового созданного USB-накопителя.
- После завершения
startup.nsh
, введите на приглашенииgop mode
. - Появится список, отображающий 3 колонки и строку, которая будет отмечена звездочкой**.
- Начальная колонка слева – это номер выбора
- Вторая колонка – это количество символов в колонке на экране
- Третья колонка – это количество строк на экране
- Используйте
gop set x
, гдеx
– это номер, соответствующий вашему выбранному выбору***. - Перезагрузитесь, чтобы сохранить выбор***.
Примечания:
** Я полагаю, что первый выбор – это 80x25
, что, если я правильно помню, соответствует разрешению 640x480
.
*** Для выбора желаемого результата может понадобиться несколько перезагрузок и set
.
Теперь, когда мое разрешение установлено
Как отметил OP через комментарий выше, убедитесь, что при использовании полностью UEFI-ориентированной системы CSM полностью отключен. CSM был введен для эмуляции BIOS-ориентированных систем до полного принятия протокола UEFI.
- Одной из таких эмуляций был VBIOS в графических картах. Пока ОС не взяла на себя процесс загрузки, протокол VGA BIOS инструктировал карту загрузиться в видеорежим не выше 1024×768. После того как ОС взяла на себя управление, драйвер переключался на режим, установленный через настройки ОС, т.е. драйвер, который вы скачали у производителя вашей графической карты или у другого OEM типа PNY.
В случае моего вопроса и ответа, чтобы полностью отключить CSM, мне пришлось включить поддержку WHQL для Windows 8.1/10, чтобы все мои ОС могли видеть NVIDIA GeForce 1070 с поддержкой GOP в моей системе, даже несмотря на то, что FreeBSD не нуждается в подписи драйвера Windows. Я позволю OP прокомментировать, как им удалось найти 6 дополнительных разрешений ниже, так как я потратил около часа, просматривая снимки экрана удивительно распространенной Aptio Setup Utility, прежде чем начал писать этот ответ, и не смог найти письменную процедуру.
Теперь мы на уровне ядра
…Однако возникла еще одна новая проблема, вероятно, вызванная отключением CSM. Я могу читать/писать в /dev/fb0, и он отображается корректно. Но если я запускаю Xorg, он отказывается обнаружить моё устройство framebuffer, независимо от того, что я делаю с файлом конфигурации (или полного его отсутствия). Он говорит “Экран не найден” после нескольких попыток вызвать fbdevhw.
Теперь OP необходимо использовать менеджер пакетов своей ОС (он никогда не указывал ОС, но я предполагаю, что это основанная на Debian), и выполнить команду:
sudo apt nvidia-driver
для установки последней поддерживаемой версии проприетарного двоичного драйвера, который будет 470.xx.xx
. В этот загрузку/установку должен входить инструмент nvidia-xconfig
. Если его нет, попробуйте:
sudo apt nvidia-xconfig
Этот инструмент создаст файл xorg.conf
, который затем можно модифицировать вручную. К сожалению, из-за проприетарного драйвера автоматическое определение в X.Org попытается установить драйвер nv
, который хуже, чем драйвер nouveau
, а драйвер nouveau
не предоставляет 3D-ускорения.
Добавление этого на основе комментариев ниже
Я понимаю, что OP хочет запускать X.Org на устройстве fbdev
. Причина, по которой я ответил на этот пост так, как я это сделал (советую OP использовать либо проприетарный драйвер NVIDIA, либо драйвер nouveau
), заключается в том, что разработчики NVIDIA отказываются создавать код, позволяющий их графическим картам “присоединяться” к драйверам ядра fbdev
или fbcon
, как подтверждено ответом напрямую от разработчика еще в 2016 году. Обратите внимание, что версия драйвера здесь не имеет значения, потому что, как я указал в своих комментариях ниже:
С появлением UEFI возможность использовать модуль ядра uvesa и передавать vga=xxx в строке команд ядра исчезла.
Это было подтверждено ответом birdie. Сообщество пользователей жаловалось на эту проблему задолго до этого поста и многократно просило NVIDIA выпустить драйвер с открытым исходным кодом, который сообщество могло бы дорабатывать, но поскольку NVIDIA является коммерческой компанией, я не вижу, чтобы это произошло в ближайшее время.
Обновление
NVIDIA выпустила свои графические модули для сообщества с открытым исходным кодом. См. Открытые драйверы GPU от NVIDIA.
Ответ или решение
Проблема низкого разрешения в раннем загрузочном фреймбуфере EFI/VGA и GRUB
При загрузке Linux-машины с использованием UEFI и grub2 может возникнуть проблема с низким разрешением в начальном экране. Часто пользователи сталкиваются с тем, что доступные графические режимы ограничены, например, в 800×600, в то время как разрешение их монитора составляет 1920×1080. Это приводит к ухудшению качества изображения при загрузке и работе с командной строкой.
Причины проблемы
-
Ограниченные графические режимы: Существует мнение, что режимы, доступные в EFI/UEFI (и, следовательно, в GRUB), зависят от возможностей графического адаптера и его режима VESA. Это верно — если графический адаптер не поддерживает определенные разрешения в режиме GOP (Graphics Output Protocol), пользователи не смогут их использовать непосредственно при загрузке.
-
Неправильные настройки UEFI: Некоторые параметры системы могут быть неправильно настроены, что также может ограничивать доступные графические режимы. Например, включение CSN (Compatibility Support Module) может привести к использованию устаревших BIOS-режимов, где поддерживаемое разрешение ограничено 1024×768.
Возможные решения
1. Отключение CSM
- Безопасный режим UEFI: Убедитесь, что режим CSM отключен. Это может привести к доступности дополнительных режимов GOP. Если CSM активирован, графический адаптер может работать в режиме, ограниченном BIOS, что не позволит вам использовать высокое разрешение. Ваши действия:
- Зайдите в настройки UEFI (обычно это делается путем нажатия клавиши при запуске, например, Del или F2).
- Найдите параметр CSM и отключите его.
- Также рекомендую включить поддержку WHQL (Windows Hardware Quality Labs), чтобы обеспечить максимальную совместимость с драйверами.
2. Установка UEFI Shell
- Создание загрузочной флешки с UEFI Shell: UEFI Shell позволяет вам управлять параметрами загрузчика и графическими режимами до старта операционной системы. Вам нужно:
- Создать загрузочную флешку с UEFI Shell, следуя инструкциям, в том числе скачать соответствующий
shell.efi
файл из EDK2 Releases Page. - Загрузить систему с этой флешки и использовать команду
gop mode
для просмотра доступных графических разрешений. - Используйте команду
gop set x
, чтобы установить нужное разрешение.
- Создать загрузочную флешку с UEFI Shell, следуя инструкциям, в том числе скачать соответствующий
3. Доступные разрешения
- После выполнения вышеперечисленных шагов запустите систему и проверьте доступные режимы разрешения:
- Запустите UEFI Shell и используйте команды для получения списка режимов и установки нужного.
Это должно обеспечить разрешение, совместимое с вашим монитором, начиная с момента загрузки GRUB.
Примечания
- Помните, что изменения в GOP могут сохраняться в NVRAM, и вам может понадобиться несколько раз перезагрузить систему или использовать дополнительные команды для применения изменений.
- Учтите, что при использовании конкретного графического устройства, например NVIDIA, могут быть дополнительные сложности с поддержкой framebuffer’ов. Простое использование драйвера может не решить проблемы отображения. Если разрешение не устанавливается, может потребоваться установка проприетарных драйверов NVIDIA, что не будет вашим первоначальным предпочтением.
Заключение
Настройка разрешения в EFI/VGA на этапе загрузки может быть непростой задачей, однако с помощью правильных шагов вы сможете адаптировать параметры вашего устройства под свои нужды. Важно помнить о необходимости отключения оберточного режима CSM и использования UEFI Shell для изменения режима графического вывода. Это позволит использовать разрешение экрана в полном объеме и улучшить качество отображения на стадии загрузки системы.
Данная информация будет полезна как для новичков, так и для более опытных пользователей, желающих оптимизировать процесс загрузки их Linux-системы.